フローティングアクションボタンがクリックされたときに、アプリで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)
サービスオブジェクトがコード内で初期化されていないことがわかります。したがって、 'WeatherAPI.Factory.getInstance()'は常に 'null'を返します – jayeshsolanki93