2017-02-24 8 views
1

非同期タスクを表示する際にエラーが発生しました。doInBackground()を実行中にエラーが発生しました。私はここで最小ジンジャーブレッドSDK を使用している 私はこれを実行しようとしたときには、ストリーム非同期タスクdoInBackground()の実行中にエラーが発生しましたか?

public static String readInputfromStraeam (InputStream inputStream) throws IOException{ 

      StringBuilder output = new StringBuilder(); 

      if(inputStream!=null){ 
       InputStreamReader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8")); 
       BufferedReader bufferedReader = new BufferedReader(reader); 
       String Line = bufferedReader.readLine(); 
       while (Line!=null){ 

        output.append(Line); 
        Line =bufferedReader.readLine(); 
       } 

      } 
      return output.toString(); 
     } 

から非同期タスクコード

private class TitleAsynctask extends AsyncTask<URL,Void,List<view>>{ 





    @Override 
     public List<view> doInBackground(URL... urls){ 

      URL url = Query_utils.createurl(POEM_TITLE); 
      String json = ""; 
      Log.d(LOG_TAG,"this worked"); 
      { 
       try { 
        json = Query_utils.makehttprequest(url); 
        Log.d(LOG_TAG, "make Httprequest works"); 
       } catch (IOException e) { 

       } 
      } 
      List<view> title_view = Query_utils.extracttitlefromjson(json); 
      return title_view; 

     } 
     @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) 
     @Override 
     protected void onPostExecute(List<view> data) { 
      madapter.clear(); 


      if (data != null && !data.isEmpty()){ 
       madapter.addAll(data); 
      } 
     } 


and the code for http request is 

    public static String makehttprequest(URL url) throws IOException { 
      String jsonResponse = ""; 
      if (url == null) { 
       return jsonResponse; 
      } 

      HttpURLConnection urlConnection = null; 
      InputStream inputStream = null; 
      try { 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setReadTimeout(10000 /* milliseconds */); 
       urlConnection.setConnectTimeout(15000 /* milliseconds */); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.connect(); 

       if (urlConnection.getResponseCode() == 200) { 
        inputStream = urlConnection.getInputStream(); 
        jsonResponse = readInputfromStraeam(inputStream); 
       } else { 
        Log.e(LOG_TAG, "Error in connection!! Bad Response "); 
       } 

      } catch (IOException e) { 
       Log.e(LOG_TAG, "Problem retrieving the earthquake JSON results.", e); 
      } finally { 
       if (urlConnection == null) { 
        urlConnection.disconnect(); 
       } 
       if (inputStream == null) { 
        inputStream.close(); 
       } 
      } 
      Log.d(LOG_TAG," " + jsonResponse); 

      return jsonResponse; 
     } 

、リード入力のあるエラーが

java.lang.RuntimeException: An error occured while executing doInBackground() 
         at android.os.AsyncTask$3.done(AsyncTask.java:304) 
         at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
         at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
         at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
         at java.lang.Thread.run(Thread.java:818) 
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference 
         at com.example.ashura.poemtest.Query_utils.makehttprequest(Query_utils.java:105) 
         at com.example.ashura.poemtest.MainActivity$TitleAsynctask.doInBackground(MainActivity.java:62) 
         at com.example.ashura.poemtest.MainActivity$TitleAsynctask.doInBackground(MainActivity.java:52) 
         at android.os.AsyncTask$2.call(AsyncTask.java:292) 
         at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
         at java.lang.Thread.run(Thread.java:818) 
です

+3

ようなものになるだろう場合は、それがにだけclose必要があるあなたは、エラーがスタックトレースを見て、あるものを投稿することができます「私はエラーを得た」?? – Raghunandan

+0

エラーログはどこですか? – Piyush

+0

@Raghunandan彼は質問の最後にスタックトレースを持っています。 –

答えて

2

ここに問題があります

  if (inputStream == null) { 
       inputStream.close(); 
      } 

inputStreamnullある場合は、存在しないclose()を呼び出そう。 inputStreamnullないので、改善が

  if (inputStream != null) { 
       inputStream.close(); 
      } 
関連する問題