Я использую IntentService для обработки сетевых сообщений с сервером через JSON. Часть JSON/server работает нормально, но мне трудно получить результаты туда, где они нужны. Следующий код показывает, как я запускаю службу намерений изнутри 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()? Есть ли другой/лучше структурировать этот код? Большое спасибо.