Android异常

Android异常

一、 

Unable to resume activity : android.database.StaleDataException: Attempted to access a cursor after it has been closed. 异常

 

解决方法:

一般用Cursor后, 就立即close()了,但是在用managedQuery的时候, 却不能主动调用close()方法, 否则在Android 4.0+的系统上, 会发生崩溃

google的文档是这么写的

Warning: Do not call close() on a cursor obtained using this method, because the activity will do that for you at the appropriate time. However, if you call stopManagingCursor(Cursor) on a cursor from a managed query, the system will not automatically close the cursor and, in that case, you must call close().

 

也有人说用下面的方法可以避免这个问题

这个问题其实很简单  估计大家在查询数据库的时候用的是这个函数 
viedoCursor = context.managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoColumns,null, null, null);
只要换成这样就可以了:
ContentResolver cr = context.getContentResolver();
viedoCursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, videoColumns,null, null, null);

 

参与文档:

http://stackoverflow.com/questions/9696868/unable-to-resume-activity-error

 

二、

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128)
在主线程中的网络异常

从android4.0以后不建议在主线程直接连接服务器,进行访问网络的操作,一般需要开一个子线程去访问网络,然后通过handler去更新界面!

解决方案有两个,一个是使用StrictMode,二是使用线程来操作网络请求 

第一种方法:简单暴力,强制使用,代码修改简单(但是非常不推荐)
在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码

if (android.os.Build.VERSION.SDK_INT > 9) {
         StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
      StrictMode.setThreadPolicy(policy);
}

 

 第二种方法就是我使用的方法也是我要推荐的方法,将请求网络资源的代码使用Thread去操作。在Runnable中做HTTP请求,不用阻塞UI线程。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.main_view);
    new Thread(runnable).start();
}
 
Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Bundle data = msg.getData();
        String val = data.getString("value");
        Log.i(TAG,"请求结果:" + val);
    }
}
 
Runnable runnable = new Runnable(){
    @Override
    public void run() {
        // TODO: http request.
        Message msg = new Message();
        Bundle data = new Bundle();
        data.putString("value","请求结果");
        msg.setData(data);
        handler.sendMessage(msg);
    }
}

 三、ddms files not found hprofconv.exe

打开eclipse发现有这个东西。。
DDMS files not found: D:\andriod\android-sdk-windows\platform-tools\hprof-conv.exe

解决方法:

hprof-conv.exe:将hprof文件转换成MAT识别的标准格式。将hprofconv.exe 直接复制到platform-tools文件夹中,下载见附件

四、 Android 更新ADT至22.6.0版本之后,创建出来的项目继承的是ActionBarActivity

昨天Eclipse更新了一下sdk和adt到22.6,更新一切都很顺利,很开心的样子,可以新建一个工程时发现多了一个appcompat_v7这个东西,一下子就把小编怔住了,后来才发现这是官方的一个兼容包,没什么大惊小怪的,做工程还是更平时一样,要怎么做才不会出现这个包呢?其实在新建项目的时候把minimum required sdk选择android 4.0以上版本就不会出现那个了。

五、dex多重定义

问题描述:

[2013-03-26 09:41:23 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/apache/http/entity/mime/FormBodyPart;
[2013-03-26 09:41:23 - FirstLog] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/apache/http/entity/mime/FormBodyPart;


Android异常
 

这里有两个版本的jar包,删掉一个就哦了。

参考

你可能感兴趣的:(android,exception)