2016-11-20 5 views
-1

基本的に、私はJSONを使用するアプリケーションを持っています。新しいHentData.execute()でJSONを取得します。それを文字列変数に渡します。しかし、私は何かをacutallyしようとすると私のプログラムがクラッシュします。新しいClass.execute()クラッシュ後のメソッドの呼び出し、アンドロイドスタジオ

HentDataは、私はそれが私のOnCreate

INSIDE作品JSON文字列を与える知っている、AsyncTaskを拡張()

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

あるしかし、私はそれが動作します。このようにそれらを実行すると、私は何とか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(); 

あなたが結果を得るために、より柔軟な方法をしたい場合、あなたは(HTTPメソッドのために)書いAsyncTasksを嫌う場合は、How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?

を見るComparison of Android networking libraries: OkHTTP, Retrofit, and Volley

+0

うwhile(json_string == ""){}はHentDataの後に動作しますか? – Litenhundvilikkeinn

+0

** No ** 1)これは文字列を比較する方法ではありません。2)UIがフリーズし、さらにアプリケーションがクラッシュする可能性があります。 –

+0

助けていただきありがとうございます。私はonCreateの "継続"であるonPostExecuteにメソッドを置くだけです。これを行うには大丈夫ですか? – Litenhundvilikkeinn

関連する問題