新的Class.execute()崩溃后调用方法,android studio

时间:2016-11-20 01:15:53

标签: java android json

基本上,我有一个使用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;
    }

1 个答案:

答案 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