1

アクティビティと、JSON を PHP ファイルに POST する Thread を呼び出す buttonClick があります。スレッドの終了後にアクティビティをクローズしたい。どうやってやるの?

これは私のクリックイベントです:

Button bsave = (Button) findViewById(R.id.button3);
    View.OnClickListener eventHandlerx = new View.OnClickListener() {
        @Override
            public void onClick(View arg0) {
                       sendJson( urlx, jsonarray);
                    }
    ...

そして、これは私のスレッドです:

private void sendJson(final String urlx, final JSONArray jsonarray) {
    Thread t = new Thread() {
        public void run() {
        Looper.prepare();
        ...}
    ...}
} 

アクティビティを閉じるために、finish() をどこで呼び出すことができますか? ありがとうございました

4

4 に答える 4

3

finish()UI スレッド内のどこからでも呼び出すことができます。を使用して UI スレッド内からコードを実行できますAysncTask( onPostExecuteyour をそれに置き換えますThread)。または をRunnable使用して を開始しActivityますrunOnUiThread

于 2013-08-08T01:32:28.997 に答える
1

それが役立つことを願っています

   class SendJson extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
    //here you can call functionality

    }        

    @Override
    protected void onPostExecute(String result) {            
    //here you can call finish 
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}
于 2013-08-08T02:02:37.150 に答える
0

私はテストを行いました-非UIスレッドからアクティビティを開始できます-非UIスレッドからアクティビティを終了できます

ACRA プロジェクトを見てください - すばらしい例外処理です。251 行目の ReportExecutor ( https://github.com/ACRA/acra/blob/master/src/main/java/org/acra/builder/ReportExecutor.java#L251 ) アクティビティは新しいスレッドで開始されます。

なぜそれが機能しているのか、私はあまりにも驚きました:)

于 2016-02-23T09:12:43.303 に答える
0

アクティビティを閉じたいだけなので、Handler を使用した例を次に示します。

    new Handler().post(new Runnable() {
        @Override
        public void run() {

            //do your stuff here

            MyActivity.this.finish();
        }
    });

ただし、@dst が述べたように、AsyncTask可能な限り使用する必要があります。

于 2013-08-08T01:59:10.027 に答える