4

今、私はこのエラーに直面している非同期タスクを使用して開発しています。誰もがこれについて考えています..

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();
    }        
}
4

1 に答える 1

9

このエラーは、実行できないスレッドからビューを更新しようとすると発生します。からビューを更新するか、 runOnUiThreadonPostExecuteを使用してビューを更新する必要があります。

次のように runOnUiThread を使用できます。

runOnUiThread(new Runnable() {
    public void run() {                     
        // your code to update the UI thread here               
    }
});
于 2012-10-03T18:03:51.547 に答える