基本上,我有一个使用JSON的应用程序。我在新的HentData.execute()中获得了JSON;并将其传递给字符串变量。但是当我尝试用它做某事时我的程序崩溃了。
HentData扩展了AsyncTask,我知道它给了我一个可以工作的JSON字符串
INSIDE oncreate()
new HentData().execute();
jsonToArray();
arrayToText();
崩溃
但是当我像这样运行它时,它是否有效,我是否必须以某种方式关闭HentData类?
protected void onPostExecute(String resultat){
json_string = resultat;
jsonToArray();
arrayToText();
}
这是我的doInBackground()
protected String doInBackground(Void... voids){
try {
URL url = new URL(json_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream IS = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(IS));
StringBuilder sb = new StringBuilder();
while((json_string = bufferedReader.readLine())!=null){
sb.append(json_string+"\n");
}
bufferedReader.close();
IS.close();
httpURLConnection.disconnect();
return sb.toString().trim();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:0)
但是当我像这样运行它时,它是否有效,我是否必须以某种方式关闭HentData类?
protected void onPostExecute(String resultat){ json_string = resultat; jsonToArray(); arrayToText(); }
你不必关闭任何东西。这是有效的,因为AsyncTask中的“async”使代码在后台运行。
换句话说,
new HentData().execute(); // Not waiting for result
jsonToArray(); // Continue on, even though there is no result yet --> error
arrayToText();
如果您想以更灵活的方式获得结果,请参阅How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?
如果您不喜欢编写AsyncTasks(对于HTTP方法),请参阅Comparison of Android networking libraries: OkHTTP, Retrofit, and Volley