Android アプリを実行するには、いくつかの基本的なデータが必要です。このデータは、JSON を使用してサーバーからダウンロードされます。Xcode では単純に sendsynchronous リクエストを使用しましたが、メイン UI でネットワークを実行すると Eclipse でエラーが発生することに気付きました。asynctask で多くのものを見つけましたが、必要なデータがダウンロードされるまでアプリを待機させたい (同期?)。
asynctask .execute().get() を使用して変数を onPostExecute に設定しようとしましたが、変数を返すと NullPointerException が発生します。誰かがこれを機能させる方法を知っていますか? アプリを実行する前にこのデータが本当に必要なので、データがダウンロードされるまでアプリを待機させます。
MainActivity はこれを呼び出します。
SingletonClass appIDSingleton = SingletonClass.getInstance();
this.ID = appIDSingleton.getAppID();
シングルトン クラス:
public String getAppID() {
try {
new DownloadAppID().execute(APP_ID_URL).get(5000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return AppID; //AppID is still NULL (because the download isnt finished yet?)
}
private class DownloadAppID extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
System.out.println(result);
AppID = result;
}
}