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;



 

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

参考

更新SDK后错误处理:W/ResourceType(18775): No known package when getting value for resource number 0x7f050000

在升级ADT bundle,SDK之后,调试一个project时遇到以上问题,然后调试其他项目却没有出现该问题.

查看0x7f050000指向的就是app_name,检查strings.xml也没发现问题,而且升级之前没有发现这个问题的,在网上查找许久终于找到一个答案.见最后参考链接.

Android SDK Build-tools  21 and 21.0.1 存在问题.当assets目录下有zip或者jar文件时,生成的应用就会出现上述问题. 而在21.0.2版本没有这个问题.所以可以通过升级SDK Build-tools解决.
对于我的项目,我查看了assets目录,对于出问题的项目,里面有几个txt文件,并没有zip或jar文件,而不出问题的项目,assets目录是空的,看来只要assert目录有东西,都可能存在问题.
解决方法,既然21.0.2可以,那就通过SDK Manager,安装android SDK Build-tools 21.0.2以上的版本.实测,安装更新后,重启eclipse,调试项目,没有该问题出现了.
如果不想更新,也有版本,根据参考链接中的方法,指定Build-tools版本.
如指定使用20的Build-tools版本:
对于eclipse:
修改project.properties加入sdk.buildtools=20
对于 Android Studio:
则修改build.gradle在android的section中增加 buildToolsVersion "20"  

或者可使用附件提供的4.4W.rar(前提需要把E:\android4.0\android-sdk-windows\build-tools 目录下的文件清空)

参考链接:

https://stackoverflow.com/questions/26488685/eclipse-juno-adt-23-0-2-resourcesnotfoundexception?stw=2

猜你喜欢

转载自technicalsearch.iteye.com/blog/2050662