Java 方法调用产生NPE改造
我试图在应用程序中设置NavHeader上的天气,单击浮动操作按钮Java 方法调用产生NPE改造,java,android,retrofit,retrofit2,Java,Android,Retrofit,Retrofit2,我试图在应用程序中设置NavHeader上的天气,单击浮动操作按钮 fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { WeatherAPI.Factory.getInstance().getWeather().enqueue(new Callback<Weather>() { @Override
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());
}
});
}
});
以下是错误:
05-19 09:46:22.399 26168-26168/us.egek.攀岩Kaynaklar
E/AndroidRuntime:致命异常:主
工艺流程:us.egek.RockUplingKaynakular,PID:26168
java.lang.RuntimeException:无法启动活动
ComponentInfo{us.egek.RockClimpingKaynaklar/us.egek.RockClimpingKaynaklar.Activities.MainActivity}:
java.lang.NullPointerException
在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
在android.app.ActivityThread.access$800(ActivityThread.java:139)
在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:149)
位于android.app.ActivityThread.main(ActivityThread.java:5257)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
在
us.egek.rockclimpingkaynaklar.Activities.MainActivity.onCreate(MainActivity.java:93)
在
WeatherAPI.Factory.getInstance()
方法中,您应该将服务属性分配给改装创建语句
service = retrofit.create(WeatherAPI.class);
我可以看出代码中从未初始化过您的服务对象。因此
WeatherAPI.Factory.getInstance()
将始终提供null
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;
}
}
service = retrofit.create(WeatherAPI.class);