2017-05-19 11 views
-1

フローティングアクションボタンがクリックされたときに、アプリでNavHeaderの天気を設定しようとしています。メソッド呼び出しによってNPEが発生する

fab.setOnClickListener(new View.OnClickListener() { 
     @Override public void onClick(View view) { 

     WeatherAPI.Factory.getInstance().getWeather().enqueue(new Callback<Weather>() { 
      @Override public void onResponse(Call<Weather> call, Response<Weather> response) { 

      Query query = response.body().getQuery(); 
      degree.setText(query.getResults().getChannel().getItem().getCondition().getTemp()); 
      } 

      @Override public void onFailure(Call<Weather> call, Throwable t) { 

      Log.e("failure", t.getMessage()); 
      } 
     }); 
     } 
    }); 

ただし、ボタンをクリックするとNPEが表示されます。

public interface WeatherAPI { 

    String BASE_URL = "https://query.yahooapis.com/v1/public/"; 

    @GET("PATH CONTINUES HERE") 
    Call<Weather> getWeather(); 

    class Factory { 

    private static WeatherAPI service; 

    public static WeatherAPI getInstance() { 

     if (service == null) { 

     Retrofit retrofit = 
      new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()) 
       .baseUrl(BASE_URL) 
       .build(); 

     retrofit.create(WeatherAPI.class); 

     return service; 
     } else { 
     return service; 
     } 
    } 
    } 
} 

getQuery()の呼び出しによってNullPointerExceptionが生成されることがあるという警告が表示されます。ここで

は私のQueryクラスである:ここ

public class Query { 

    @SerializedName("count") 
    @Expose 
    private int count; 
    @SerializedName("created") 
    @Expose 
    private String created; 
    @SerializedName("lang") 
    @Expose 
    private String lang; 
    @SerializedName("results") 
    @Expose 
    private Results results; 

    public int getCount() { 
     return count; 
    } 

    public void setCount(int count) { 
     this.count = count; 
    } 

    public String getCreated() { 
     return created; 
    } 

    public void setCreated(String created) { 
     this.created = created; 
    } 

    public String getLang() { 
     return lang; 
    } 

    public void setLang(String lang) { 
     this.lang = lang; 
    } 

    public Results getResults() { 
     return results; 
    } 

    public void setResults(Results results) { 
     this.results = results; 
    } 

} 

がエラーである:あなたのWeatherAPI.Factory.getInstance()方法で

05-19 09:46:22.399 26168-26168/us.egek.rockclimbingkaynaklar E/AndroidRuntime: FATAL EXCEPTION: main Process: us.egek.rockclimbingkaynaklar, PID: 26168 java.lang.RuntimeException: Unable to start activity ComponentInfo{us.egek.rockclimbingkaynaklar/us.egek.rockclimbingkaynaklar.Activities.MainActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:149) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at us.egek.rockclimbingkaynaklar.Activities.MainActivity.onCreate(MainActivity.java:93)

+0

サービスオブジェクトがコード内で初期化されていないことがわかります。したがって、 'WeatherAPI.Factory.getInstance()'は常に 'null'を返します – jayeshsolanki93

答えて

2

、あなたは改造にサービスプロパティを割り当てる必要があります声明

service = retrofit.create(WeatherAPI.class); 
を作成
関連する問題