2015-06-20 30 views
1

我有一個類「MessageParser」延伸警告對話框上的工作線程

AbstractParser

和調用 的方法等「onMessagePacketReceived」:

conversation.add(message); 

補充的是實體的方法「對話「

AbstractEntity

並添加收到的消息,如下所示:

public void add(Message message) { 
    message.setConversation(this); 
    synchronized (this.messages) { 
     this.messages.add(message); 
    } 
} 

我想要做的是顯示它有像下面輸入一個警告對話框:

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle(R.string.input_pass); 
     View dialogView = getLayoutInflater().inflate(R.layout.set_password_dialog, null); 
     builder.setView(dialogView); 
     builder.setNegativeButton(R.string.cancel, null); 
     builder.setPositiveButton(R.string.next, null); 
     final AlertDialog dialog = builder.create(); 
     dialog.show(); 

     dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(
       new View.OnClickListener() { 

        @Override 
        public void onClick(final View v) { 
         EditText edit = (EditText) dialog.findViewById(R.id.account_password); 
         String pass = edit.getText().toString(); 
         if (pass.equals(accountList.get(0).getPassword())) { 
          conversation.add(message); 
          dialog.dismiss(); 
         } else { 
          edit.setError(getString(R.string.incorrect_pass)); 
         } 
        } 
       }); 

其替換conversation.add(消息)。我遇到了麻煩。它顯示

Can't create handler inside thread that has not called Looper.prepare()

我看過this答案,但不幫助我。

回答

0

問題是,您正在嘗試創建並在非UI線程中顯示對話框(這就是錯誤所述,因爲通常只有主UI線程調用Looper.prepare())。爲了修正它,使用以下代碼:

activity.runOnUiThread(new Runnable() { 
    @Override public void run() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setTitle(R.string.input_pass); 
     View dialogView = getLayoutInflater().inflate(R.layout.set_password_dialog, null); 
     builder.setView(dialogView); 
     builder.setNegativeButton(R.string.cancel, null); 
     builder.setPositiveButton(R.string.next, null); 
     final AlertDialog dialog = builder.create(); 
     dialog.show(); 
     dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(final View v) { 
         EditText edit = (EditText) dialog.findViewById(R.id.account_password); 
         String pass = edit.getText().toString(); 
         if (pass.equals(accountList.get(0).getPassword())) { 
          conversation.add(message); 
          dialog.dismiss(); 
         } else { 
          edit.setError(getString(R.string.incorrect_pass)); 
         } 
        } 
       }); 
    }}); 

編輯:
在上面的代碼中,activity變量應該通過在創建的活動被傳遞。

如果這不起作用,請張貼整個日誌貓。

+0

錯誤:(683,9)錯誤:無法找到符號方法runOnUiThread(<匿名Runnable>) – user168228

+0

已更新的答案。 – Chaoz

+0

但哪些活動? – user168228