Android 在异步任务中使用向量
我在mt AsyncTask doInBackground方法中有一个循环Android 在异步任务中使用向量,android,exception,vector,android-asynctask,Android,Exception,Vector,Android Asynctask,我在mt AsyncTask doInBackground方法中有一个循环 @Override protected Void doInBackground(Void... params) { receive = new Vector<Sms>(); sent = new Vector<Sms>(); draft = new Vector<Sms>();
@Override
protected Void doInBackground(Void... params) {
receive = new Vector<Sms>();
sent = new Vector<Sms>();
draft = new Vector<Sms>();
try {
String type, from, date, budy;
Vector<Sms> receive = new Vector<Sms>();
Vector<Sms> sent = new Vector<Sms>();
Vector<Sms> draft = new Vector<Sms>();
progress_status = 1;
publishProgress(progress_status);
Cursor cursor = mContext.getContentResolver().query(
Uri.parse("content://sms"), null, null, null, null);;
cursor.moveToFirst();
progress_status = 2;
publishProgress(progress_status);
do {
type = cursor.getString(cursor.getColumnIndexOrThrow("type"));
from = cursor
.getString(cursor.getColumnIndexOrThrow("address"));
date = cursor.getString(cursor.getColumnIndexOrThrow("date"));
budy = cursor.getString(cursor.getColumnIndexOrThrow("body"));
// check type (1-inbox,2-outbox,3-draft) and set there views
int numType = Integer.parseInt(type);
switch (numType) {
case 1:
Log.d("inbox", "message");
Log.d("inbox", numType + "");
//receive.add(new Sms(type, from, date, budy));
break;
case 2:
Log.d("outbox", "message");
Log.d("outbox", numType + "");
sent.add(new Sms(type, from, date, budy));
break;
case 3:
Log.d("draft", "message");
Log.d("draft", numType + "");
//draft.add(new Sms(type, from, date, budy));
break;
default:
break;
}
} while (cursor.moveToNext());
} catch (Exception e) {
Log.d("eeeee", e.getMessage());
}
return null;
}
正如我所说的,单是循环并不会只产生向量。加上
这是e.printStackTrace()
04-13 01:01:08.080:W/System.err(14901):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
04-13 01:01:08.085:W/System.err(14901):在android.os.Handler。(Handler.java:121)
04-13 01:01:08.085:W/System.err(14901):在android.app.Activity。(Activity.java:739)
04-13 01:01:08.085:W/System.err(14901):位于com.example.sms.sms.(sms.java:18)
04-13 01:01:08.085:W/System.err(14901):位于com.example.sms.MainActivity$ShowDialogAsyncTask.doInBackground(MainActivity.java:168)
04-13 01:01:08.085:W/System.err(14901):位于com.example.sms.MainActivity$ShowDialogAsyncTask.doInBackground(MainActivity.java:1)
04-13 01:01:08.085:W/System.err(14901):位于android.os.AsyncTask$2.call(AsyncTask.java:264)
04-13 01:01:08.085:W/System.err(14901):位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-13 01:01:08.085:W/System.err(14901):在java.util.concurrent.FutureTask.run(FutureTask.java:137)处
04-13 01:01:08.085:W/System.err(14901):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-13 01:01:08.085:W/System.err(14901):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-13 01:01:08.085:W/System.err(14901):位于java.lang.Thread.run(Thread.java:856)
如果不将活动用作“屏幕”,则不应扩展活动。您必须删除SMS扩展活动
,而是以更以数据为中心的方式设计SMS。活动用于显示聚合数据,而不是存储聚合数据
将SMS设置为如下内容:
public class SMS {
public String type, from, mdate, body;
public SMS(String type, String from, String mdate, String body) {
this.type = type;
this.from = from;
this.mdate = mdate;
this.body = body;
}
}
你的代码是不完整的,这使得它几乎不可能帮助你。。。您键入的是要在AsyncTask中显示Toast吗?这里的最终结果是,除了主线程外,您不能在任何线程(AysncTask在自己的线程中运行)中创建处理程序。我相信短信是你自己的定制类?我相信您正在创建一个新的处理程序。我添加了更多的代码。我不使用处理程序,老实说,即使我想,我也不知道如何使用。短信是否扩展了活动?看起来是这样。在这种情况下,您会遇到一些问题。“但在循环结束后,大小再次为0”您正在尝试块中创建具有相同名称的新向量<代码>已发送向量=新向量()代码>一旦退出try-catch块,这些将被销毁,只需删除这些重复的向量。你知道循环结束时向量重置的原因吗?我会在添加数据时检查大小,它确实添加了行。但循环结束后,大小再次为0
04-13 01:01:08.080: W/System.err(14901): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-13 01:01:08.085: W/System.err(14901): at android.os.Handler.<init>(Handler.java:121)
04-13 01:01:08.085: W/System.err(14901): at android.app.Activity.<init>(Activity.java:739)
04-13 01:01:08.085: W/System.err(14901): at com.example.sms.Sms.<init>(Sms.java:18)
04-13 01:01:08.085: W/System.err(14901): at com.example.sms.MainActivity$ShowDialogAsyncTask.doInBackground(MainActivity.java:168)
04-13 01:01:08.085: W/System.err(14901): at com.example.sms.MainActivity$ShowDialogAsyncTask.doInBackground(MainActivity.java:1)
04-13 01:01:08.085: W/System.err(14901): at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-13 01:01:08.085: W/System.err(14901): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-13 01:01:08.085: W/System.err(14901): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-13 01:01:08.085: W/System.err(14901): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-13 01:01:08.085: W/System.err(14901): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-13 01:01:08.085: W/System.err(14901): at java.lang.Thread.run(Thread.java:856)
public class SMS {
public String type, from, mdate, body;
public SMS(String type, String from, String mdate, String body) {
this.type = type;
this.from = from;
this.mdate = mdate;
this.body = body;
}
}