【发布时间】:2012-09-24 10:59:43
【问题描述】:
现在我正在开发一个使用异步任务的我面临这个错误,任何人都有这个想法..
10-03 19:04:55.662: E/AndroidRuntime(1547): FATAL EXCEPTION: Thread-11
10-03 19:04:55.662: E/AndroidRuntime(1547): java.lang.ExceptionInInitializerError
10-03 19:04:55.662: E/AndroidRuntime(1547): at com.cc.accounts.ChatAccountsFragment.Gtalk_logInComplete(ChatAccountsFragment.java:579)
10-03 19:04:55.662: E/AndroidRuntime(1547): at com.cc.xmpp.GmailXmppClient.Login(GmailXmppClient.java:92)
10-03 19:04:55.662: E/AndroidRuntime(1547): at com.cc.accounts.ChatAccountsFragment$5.run(ChatAccountsFragment.java:482)
10-03 19:04:55.662: E/AndroidRuntime(1547): at java.lang.Thread.run(Thread.java:1096)
10-03 19:04:55.662: E/AndroidRuntime(1547): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10-03 19:04:55.662: E/AndroidRuntime(1547): at android.os.Handler.<init>(Handler.java:121)
10-03 19:04:55.662: E/AndroidRuntime(1547): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
10-03 19:04:55.662: E/AndroidRuntime(1547): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421)
10-03 19:04:55.662: E/AndroidRuntime(1547): at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
10-03 19:04:55.662: E/AndroidRuntime(1547): ... 4 more
这是异步任务
public void Gtalk_logInComplete(String Uname, XMPPConnection _connection) {
Log.i(TAG, "Uname" +Uname);
Uname = current_username;
_connection = current_connection;
ForwardAction task = new ForwardAction(); // this is line no 579
task.execute();
}
private class ForwardAction extends AsyncTask<Void, Void, Void> {
private ArrayList<String> contactJids;
private GmailXmppClient Gtalk_xmpp_client;
private ArrayList<String> contactNames;
@Override
protected void onPreExecute() {
super.onPreExecute();
show();
}
protected Void doInBackground(Void... params) {
// new Thread() {
// public void run() {
synchronized (this.contactJids) {
Roster roster = this.Gtalk_xmpp_client.getRoster();
String file_name;
for (RosterEntry entry : roster.getEntries()) {
if (entry.getType() == ItemType.to || entry.getType() == ItemType.both) {
this.contactJids.add(entry.getUser());
this.contactNames.add(entry.getName());
contact_db.open();
boolean yes = contact_db.checkUsername(entry.getUser());
Log.i(TAG, "Con=" + yes);
if (!yes) {
Bitmap buddy_img = buddyImage(entry, current_connection);
if (buddy_img != null)
file_name = Store(buddy_img);
else
file_name = "";
if (entry.getName() == null)
contact_db.createContact(entry.getUser(), entry.getUser(), current_username, file_name, "GOOGLE");
else
contact_db.createContact(entry.getName(), entry.getUser(), current_username, file_name, "GOOGLE");
} else {
Log.i(TAG, "Con=exist");
}
}
}
}
// }
// }.start();
contact_db.close();
return null;
}
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
hide();
}
}
【问题讨论】:
-
我们需要查看更多代码。
-
构造函数里面是什么?
-
似乎 ForwardAction() 方法操作 UI,在主线程外无效
-
@Mohamed_AbdAllah 如何解决这个问题...
标签: android multithreading fatal-error