2017-12-13 21 views
1

私はYahoo Weather APIに基づいて基本的なGet Requestを実行しています。これはYoutubeの例です。実行することができません。doInBackgroundメソッドのHTTPリクエストでランタイムエラーが発生します。 (下を参照)。HTTP Get Request - 互換性のないタイプ

私の電話機でエラーメッセージが表示されます。「値True of Type Java.lang.booleanをJSONオブジェクトに変換できません」というエラーメッセージが表示されます。だから私はStringを返す必要があります。しかし、 "ライン"のタイプをStringに変更すると、 "互換性のないタイプ - 必須java.lang.String - found Boolean"というエラーが発生します。だから、BufferedReaderのreadlineコマンドは文字列を期待していますが、ブール値を求めています。誰も私に何が起こったのか、どうやってこれを修正するのか説明できますか?

ありがとうございます!

ます。public void refreshWeather(最終文字列の場所){

new AsyncTask<String, Void, String>() 

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

      String YQL = String.format("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"%s\")",location); 
      String endpoint = String.format("https://query.yahooapis.com/v1/public/yql?q=%s&format=json", Uri.encode(YQL)); 

      try { 
       URL url = new URL(endpoint); 
       URLConnection connection = url.openConnection(); 
       InputStream inputStream = connection.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuilder result = new StringBuilder(); 
       boolean line; 

       while ((line = reader.readLine()!= null)){ 
        result.append(line); 
       } 

       return result.toString(); 

      } catch (Exception e) { 
       error = e; 
       } 
      return null; 
     } 

     /** 

     onPostExecute checks first if there is a service failure, then if city is valid, then it 
     populates the data from the city and goes to method serviceSuccess and populates the fields with the retrieved data 

     */ 

     @Override 
     protected void onPostExecute(String s) { 

      if (s == null && error != null){ 
       callback.serviceFailure(error); 
       return; 
      } 

      try { 
       JSONObject data = new JSONObject(s); 
       JSONObject queryResults = data.optJSONObject("query"); 

       int count = queryResults.optInt("count"); 
       if (count == 0){ 

        callback.serviceFailure(new LocationWeatherException("No Weather Info Found for" + location)); 
        return; 
       } 


       Channel channel = new Channel(); 
       channel.populate(queryResults.optJSONObject("results").optJSONObject("channel")); 

       callback.serviceSuccess(channel); 

       } catch (JSONException e) { 

       callback.serviceFailure(e); 
      } 
     } 
    }.execute(location); 
} 
+0

:あなたはそれを呼び出す前に、

line != null EXを使用し、その後、変数を設定してみてください? – tobifasc

答えて

0

チェックする必要があります。例:line = reader.readLine()!= null

これは、変数名が同じかどうかを確認するときに変数名を設定しようとすると、エラーが発生します。あなたはこれらのエラーが発生した行にlogcatで確認することができます

line = reader.readLine(); 
if(line != null) { 
    //do something 
} 
+0

私はそれを分割し、今それは動作します!あなたの素早い返信をありがとうございます.. –

+0

@NielsVanwingh素晴らしい!私のソリューションが助けになられたら、upvoteカウンターの下にある小さなチェックマークをクリックすることで、私の答えに合格マークを付けることができますか? – wanderer0810

1

あなたのwhileループが間違っているようです。あなたはJavaで比較を行うと、「行」は文字列型である必要がありますwhileループは、あなたが==

while ((line = reader.readLine()) != null) 
+0

確かに、私はそれを解決しようとしました。問題は、別のエラーメッセージを出した "String"に変更できなかったことです。どうやら式はreturnのブール値を期待していましたが、メソッドはStringを予期していました。ソリューションはそれらを分割してIFループに変えました。あなたの努力と助けてくれてありがとう! –

関連する問題