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包,删掉一个就哦了。