Android中网络编程出错

  在android 2.3上设计的下载程序,在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,原来在4.0中,访问网络不能在主程序中进行,有两个方法可以解决。

  一个是在主程序中增加:

// 详见StrictMode文档  
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
        .detectDiskReads()  
        .detectDiskWrites()  
        .detectNetwork()   // or .detectAll() for all detectable problems  
        .penaltyLog()  
        .build());  
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
        .detectLeakedSqlLiteObjects()  
        .detectLeakedClosableObjects()  
        .penaltyLog()  
        .penaltyDeath()  
        .build());  

   另一种是启动线程执行下载任务:

public void onCreate(Bundle savedInstanceState) {	
super.onCreate(savedInstanceState);  
      setContentView(R.layout.main);  
      // 启动线程执行下载任务  
      new Thread(downloadRun).start();  
  }  
    
  /** 
   * 下载线程 
   */  
  Runnable downloadRun = new Runnable(){  
  
@Override  
public void run() {  
    // TODO Auto-generated method stub  
    updateListView();  
}  
  };  

  

 Android中SharedPreferences的模式

MODE_MULTI_PROCESS这个值是一个标志,在Android 2.3及以前,这个标志位都是默认开启的,允许多个进程访问同一个SharedPrecferences对象。而以后的Android版本,必须通过明确的将MODE_MULTI_PROCESS这个值传递给mode参数,才能开启多进程访问。

我们在获得SharedPreferences的时候,需要判断一下SDK的版本号:

int __sdkLevel = Build.VERSION.SDK_INT;  
SharedPreferences __sp = $context.getSharedPreferences(SETTING_NAME, (__sdkLevel > Build.VERSION_CODES.FROYO) ? 4 : 0);  

  

 

posted @ 2012-10-30 15:19  任智康  阅读(352)  评论(0编辑  收藏  举报