Android 进程对话框与线程

Android 进程对话框与线程,android,multithreading,progressdialog,Android,Multithreading,Progressdialog,我正在安卓系统中开发列表视图控件。当我点击列表视图项时,我想要一个进度对话框,在请求的数据到来后,我想要停止它 我把这个对话框放在线程中,当线程停止时,我想显示另一个对话框,但它不工作,它会触发下面给出的错误 05-10 15:05:10.607:错误/AndroidRuntime(820):未捕获处理程序:由于未捕获异常,线程MagentoBackground正在退出 **05-10 15:05:10.617:错误/AndroidRuntime(820):java.lang.RuntimeEx

我正在安卓系统中开发列表视图控件。当我点击列表视图项时,我想要一个进度对话框,在请求的数据到来后,我想要停止它

我把这个对话框放在线程中,当线程停止时,我想显示另一个对话框,但它不工作,它会触发下面给出的错误

05-10 15:05:10.607:错误/AndroidRuntime(820):未捕获处理程序:由于未捕获异常,线程MagentoBackground正在退出 **05-10 15:05:10.617:错误/AndroidRuntime(820):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序。

我的代码是这样的

           Runnable viewQuestions = new Runnable(){
            public void run() {
                getViewAnswer(answerBean);
            }


        };
       thread =  new Thread(null, viewQuestions, "MagentoBackground");
       thread.start();
       m_ProgressDialog = ProgressDialog.show(context, "Please wait...", "Retrieving data ...", true);



      protected void getViewAnswer(AnswerBean answerBean) {
          //fetch data code
            if(viewAnswerBeans != null && viewAnswerBeans.size() > 0){
             m_ProgressDialog.dismiss();
             viewAndGiveAnswerDialog(viewAnswerBeans);
                             dialogbox.show();

         } else {
             m_ProgressDialog.dismiss();
                     dialogBox.show();

         }
      }
我的问题是这个“dialogBox.show();”不起作用,它不会显示消息


有人能帮我解决这个问题吗?因为您是从非UI线程调用UI组件的。看看下面的链接

使用处理程序

private Handler gps_ws_handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
            m_ProgressDialog.dismiss();
            dialogBox.show();


    }
};

在活动中创建处理程序

Handler handler = new Handler();
然后在getViewAnswer中,向其发布消息

protected void getViewAnswer(AnswerBean answerBean) {

    //fetch data code


    handler.post(new Runnable() {
    @Override
    public void run() {
        if(viewAnswerBeans != null && viewAnswerBeans.size() > 0){
        m_ProgressDialog.dismiss();
        viewAndGiveAnswerDialog(viewAnswerBeans);
                     dialogbox.show();

         } else {
        m_ProgressDialog.dismiss();
             dialogBox.show();

         }
    }
});
  }

对于后台任务,请使用AsyncTask和ProgressDialog,如图所示。

出于这些目的,我建议您使用

公共类活动扩展了活动{

private ProgressDialog m_ProgressDialog = null;
private Runnable viewOrders;
private ListView mListView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);

    viewOrders = new Runnable() {

        public void run() {
            loadList();
        }
    };

    Thread thread = new Thread(null, viewOrders, "MagentoBackground");
    thread.start();
    m_ProgressDialog = ProgressDialog.show(YourActivity.this, "",
            "Get Data...", true);

}

private Runnable returnRes = new Runnable() {

    public void run() {



            mListView = (ListView) findViewById(R.id.yourList);

            //create here your adapter 

            mListView.setAdapter(yourAdapter);
            mListView.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View v,
                        int position, long arg3) {

                    //on item click
                }
            });
        }
        m_ProgressDialog.dismiss();
    }
};

private void loadList() {
    try {
        /* Make your request Here
                    The progress Dialog is dismissed automatically after request is  finished */
        }

        Thread.sleep(1000);

    } catch (Exception e) {
    }

    runOnUiThread(returnRes);
}
private ProgressDialog m_ProgressDialog=null;
私人可运行视图命令;
私有列表视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
viewOrders=new Runnable(){
公开募捐{
loadList();
}
};
线程线程=新线程(null,viewOrders,“MagentoBackground”);
thread.start();
m_ProgressDialog=ProgressDialog.show(YourActivity.this,“,
“获取数据…”,正确);
}
private Runnable returnRes=new Runnable(){
公开募捐{
mListView=(ListView)findViewById(R.id.yourList);
//在这里创建适配器
mListView.setAdapter(您的适配器);
setOnItemClickListener(新的OnItemClickListener(){
公共链接(AdapterView arg0,视图v,
整数位置,长arg3){
//点击项目
}
});
}
m_ProgressDialog.discouse();
}
};
私有void加载列表(){
试一试{
/*在这里提出你的要求
请求完成后,“进度”对话框将自动关闭*/
}
睡眠(1000);
}捕获(例外e){
}
runOnUiThread(returnRes);
}
}