JSON 経由でサーバーとのネットワーク通信を処理するために IntentService を使用しています。JSON/サーバー部分は正常に動作していますが、必要な場所に結果を戻すのに問題があります。次のコードは、onClick() 内からインテント サービスを開始し、サービスがグローバル変数を更新して結果をメイン アクティビティに中継する方法を示しています。
public class GXActivity extends Activity {
private static final String TAG = "GXActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
// === called when the activity is first created
Log.i(TAG, "GXActivity Created");
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
View.OnClickListener handler = new View.OnClickListener() {
public void onClick(View v) {
// === set up an application context to hold a global variable
// === called user, to contain results from the intent service
GXApp appState = ((GXApp) getApplicationContext());
User user = new User(-1); // initialize user id to -1
appState.setUser(user);
// === next start an intent service to get JSON from the server;
// === this service updates the user global variable with
// === results from the JSON transaction
Intent intent = new Intent(this, GXIntentService.class);
startService(intent);
// === check app context for results from intent service
appState = ((GXApp) getApplicationContext());
if (appState.getUser().getId() != -1)...
}
}
}
}
私が抱えている問題は、JSON を解析するインテント サービスが onCreate() が完了するまで呼び出されないため、結果を探しているコードが初期化されていない結果を見てスタックすることです。
結果を確認する前にインテント サービスが呼び出されるようにするには、どうすればよいですか? onCreate() 関数からクリック リスナーを取り出したら機能しますか? このコードを構造化するための別の/より良いものはありますか? どうもありがとう。