0

我想根据属性显示一个警报对话框,当用户单击“确定”按钮时,再次调用该函数以获取正在运行的进程中的更新值。

我有以下代码:

importingProgress = ProgressDialog.show(context, getString(R.string.progressNewsListTitle),
    getString(R.string.progressProjectListMessage), true);

new Thread(new Runnable() {
    public void run() {
        try {
            app.SetOtherTaskRunning(true);
            Ib_clients client = db.Ib_clients_GetById(app.GetCustomerId());
            try {
                LogManager.WriteToFile("---------------- Getting News from Webservice :- " + DateFormat.getDateTimeInstance().format(new Date()) + "----------------");
                CommonFuctions.CreateXml(context, h, client, db, app.GetBookMonth(), app.GetBookQuater(), app.GetBookYear(), Constants.News, app.GetWebServiceLastSyncDate(Constants.ServiceType.NEWS.toString()), Constants.ServiceType.NEWS, null, null, null, null, null);
                Return reponse = null;
                do {
                    reponse = CommonFuctions.SendingRequest(context, handler, db);
                    if (reponse.type.compareTo("warning") == 0) {
                        h.post(new Runnable() {
                            public void run() {
                                AlertDialog.Builder alert = new AlertDialog.Builder(context);
                                alert.setTitle(context.getString(R.string.information));
                                alert.setMessage("dsgdgd");
                                alert.setPositiveButton(context.getString(R.string.logoutDialogOk), new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int whichButton) {
                                    }
                                });
                                alert.show();
                            }
                        });
                    }
                } while (reponse.type.compareTo("warning") == 0);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            //Log.d(Constants.TAG, e.getMessage());
            e.printStackTrace();
        }
        if (importingProgress != null) {
            importingProgress.dismiss();
            importingProgress = null;
        }
    }
}).start();

如果响应类型是warning,则向用户显示一条消息,如果用户单击OK按钮 ,则CommonFuctions.SendingRequest(context, handler, db)再次调用以获取更新的值。在我们得到一个 .response 类型之前warning,我们需要向用户显示一个警告对话框并CommonFuctions.SendingRequest(context, handler, db)再次调用。

返回类:

public class Return {
    public String type;
    public String msg;
    public boolean isSuccess;
    public int client_id; // for getting clientid from server 
    public int booking_id; // for getting bookingid form server
 }
4

2 回答 2

0

Try to run your dialog as below in runonUIthread:

 runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                             AlertDialog.Builder alert = new AlertDialog.Builder(context);       
                                    alert.setTitle(context.getString(R.string.information));
                                    alert.setMessage("dsgdgd");
                                    alert.setPositiveButton(context.getString(R.string.logoutDialogOk), new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int whichButton) {      
                                        }
                                    });        
                                    alert.show();
                        }
                 });
于 2013-01-24T09:11:39.443 回答
0

您将不得不使用处理程序来显示 AlertDialog,因为 UI 只能由主线程处理。

另一种方法是使用 asyncTask 进行多处理,然后使用 asyncTask 的 onPostExcecute() 来显示 AlertDialog

请随时提出任何进一步的疑问。

于 2013-01-24T09:09:21.620 回答