2017-10-27 7 views
0

良い日、 私が今会った問題のために、私のasynctaskはSDK 24以上で動作していますが、SDK 21,22,23エミュレータと実際のデバイスに置いたとき、それは働かない。AsynctaskがSDK 23以前で動作していない

私の最初のアクティビティとフラグメントのAsynctasksは動作していますが、2番目のアクティビティのasysntaskは機能しません。エラーコード:400、例外java.lang.IllegalStateException:myURL。

doInBackGroundコードと私のasynctask:このコードの場合

 @Override 
     protected String doInBackground(Void... voids) { 
       try { 
        //creating a URL 
        URL url = new URL(urlWebService); 
        //Opening the URL using HttpURLConnection 
        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

        //StringBuilder object to read the string from the service 
        StringBuilder sb = new StringBuilder(); 

        //We will use a buffered reader to read the string from service 
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

        //A simple string to read values from each line 
        String json; 

        while ((json = bufferedReader.readLine()) != null) { 
         if (!json.contains("<br")) { 
          sb.append(json + "\n"); 
         } 
        } 

        //finally returning the read string 
        return sb.toString().trim(); 

       } catch (Exception e) { 
        System.out.println("Error in http connection " + e.toString()); 
        return null; 
       } 
     } 
    } 

は、SDK 24,25,26上で動作します。 con.getInputStream()で例外がスローされます。私は問題が何であるか分かりません。それはスレッドか他の何の問題ですか?ありがとう。

IOExeption 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err: java.io.FileNotFoundException:mrURL 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197) 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err:  at com.example.reonyx.tracking5.PlayBackActivity$1GetJSON.doInBackground(PlayBackActivity.java:1206) 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err:  at com.example.reonyx.tracking5.PlayBackActivity$1GetJSON.doInBackground(PlayBackActivity.java:964) 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
10-27 02:28:29.453 16954-17698/com.example.reonyx.tracking5 W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
10-27 02:28:29.454 16954-17698/com.example.reonyx.tracking5 W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
10-27 02:28:29.454 16954-17698/com.example.reonyx.tracking5 W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
10-27 02:28:29.454 16954-17698/com.example.reonyx.tracking5 W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
10-27 02:28:29.454 16954-17698/com.example.reonyx.tracking5 W/System.err:  at java.lang.Thread.run(Thread.java:818) 
+0

例外があり、その理由を理解しようとしている場合はいつでも、スタックトレースを質問に追加する必要があります。スタックトレースは通常、問題の内容を示します。そうでない場合、スタックトレースは私たちにあなたを助けるためのより多くの情報を与えます。また、エラーを記録するために 'System.out.println'の代わりに' Log.e'を使うことも考えてください。 – Jon

答えて

0

aynctaskが機能していないか、またはHttpURLConnectionが期待どおりに機能していませんか?コードごとに、取得URLを使用してデータを取得しているとわかります。

私は、getResponseCodeメソッドを使用して応答を待ち、getInputStreamメソッドを使用するように勧めます。

@Override 
protected String doInBackground(String... strings) { 

    URL url; 
    HttpURLConnection urlConnection = null; 

    try { 
     url = new URL(strings[0]); 
     urlConnection = (HttpURLConnection) url.openConnection(); 

     int responseCode = urlConnection.getResponseCode(); 

     if(responseCode == HttpURLConnection.HTTP_OK) { 

      // use bufferreder to get the data from input stream. 

     } 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if(urlConnection!=null) 
     urlConnection.disconnect(); 
    } 

    return null; 
} 
+1

これは素晴らしい提案ですが、答えではありません。より評判が高くなると、元の投稿に明確化コメントを追加できます。 OPが説明を追加する場合は、より具体的なものであなたの答えを更新してください。 ;) – Jon

+0

前述のように応答コードは400です。すべてはSDK 24以上で動作し、SDK 23以下は動作しません。 – Aseng

+0

上記のコードを試しましたか? –

関連する問題