2017-03-31 13 views
0
The following is my example code. 

private class PostLikes extends AsyncTask<Integer, Void, Void> { 
String type_id, msg; 

@Override 
protected Void doInBackground(Integer... params) { 
//.... 
//.... 
    type_id = jsonobject2.getString("type_id"); 
    msg = jsonobject2.getString("msg"); 
    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 
    if (type_id.equals("1")) { 
    Toast.makeText(getApplicationContext(), "error, Toast.LENGTH_SHORT).show(); 
    } else { 
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); 
    } 
} 

} 

AsyncTaskを使用する標準的な方法は、doInBackground関数がバックグラウンドスレッドの結果をonPostExecute関数に返すようにすることです。 そのコードは正常に機能していますが、私は上記のコードに問題があるかどうかを知りたいと思います。おかげさまで アンドロイドのAsyncTaskのdoInBackgroundとonPostExecuteの両方にクラスメンバーを共有する際に問題がありますか?

答えて

1

これがどのように設定されているかは問題ありません。メンバー変数type_idmsgは、他のメンバー変数と同様にonPostExecute()から参照されます。 doInBackground()は実行するまでに完了しているので、スレッド競合は発生しません。

+0

あなたの答えをありがとう。戻り値がマルチ配列(String、int、boolean)の場合には複雑なパラメータを使用するよりも良いと思います。しかし、私はここでこのようなサンプルコードを見つけることができません。 – bb14816

+0

あなたの意見を知りたい。 – bb14816

+0

技術的には、ドキュメントは、バックグラウンド計算の結果が 'onPostExecute()'に渡されると述べています。それがパターンです。問題は、読み取り可能でメンテナンス可能なものです。パターンを満たすために、またはメンバ変数を使用するためにワンタイム使用構造を構築していますか?私はいずれにしても思うが、意見は変わると思う。 – Cheticamp

関連する問題