我的Android應用程序需要一些基本數據才能運行。這些數據是使用JSON從服務器下載的。在Xcode中,我簡單地使用了發送同步請求,但是我注意到當我在主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;
}
}
你在哪裏得到NullPointerException異常? – Yahor10
編輯我的帖子。我在getAppID方法返回時得到空值 –
您在哪裏調用這些行? SingletonClass appIDSingleton = SingletonClass.getInstance(); this.ID = appIDSingleton.getAppID(); :) – Yahor10