0

プロパティに応じて警告ダイアログを表示し、ユーザーが [OK] ボタンをクリックすると、関数を再度呼び出して、実行中のプロセス内で更新された値を取得します。

次のコードがあります。

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

UI はメイン スレッドでしか処理できないため、 AlertDialog を表示するにはハンドラを使用する必要があります。

もう 1 つの方法は、マルチプロセッシングに asyncTask を使用してから、asyncTask の onPostExcecute() を使用して AlertDialog を表示することです。

その他ご不明な点はお気軽にご質問ください。

于 2013-01-24T09:09:21.620 に答える
0

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 に答える