单击按钮以检查任何位置数据时,我无法获取图标和摘要,就像单击按钮时那样,它正在获取湿度压力和温度,但是在主要活动应用程序中添加摘要和图标行时崩溃,则返回null解决它。
下面是按钮的主要代码,单击按钮我正在获取温度和湿度,但是在添加这两行获取摘要和图标时,应用崩溃了,下面是主要活动,,,,,,,,>
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Button button;
private TextView responseText;
ImageView iconImageView;
TextView summaryTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();}
private void init() {
editText = findViewById(R.id.city_name);
button = findViewById(R.id.city_click);
responseText = findViewById(R.id.response_text);
iconImageView = findViewById(R.id.iconImageView);
summaryTextView = findViewById(R.id.summaryTextView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fetchWeatherDetails();
}
});
}
private void fetchWeatherDetails() {
Retrofit retrofit = NetworkClient.getRetrofitClient();
weatherapis weatherAPIs = retrofit.create(weatherapis.class);
Call<Weather> call;
call = weatherAPIs.getWeatherByCity((editText.getText().toString()),"c70504e5e7ee0c5962f9407a45a2e75b");
call.enqueue(new Callback() {
@Override
public void onResponse(Response response, Retrofit retrofit) {
if (response.body() != null) {
Weather wResponse = (Weather) response.body();
responseText.setText("Temp: " + wResponse.getMain().getTemp() + "\n " +
"Humidity: " + wResponse.getMain().getHumidity() + "\n" +
// "icon:"+ wResponse.getWeather_().getIcon() +"\n"+
"Pressure: " + wResponse.getMain().getPressure());
summaryTextView.setText(wResponse.getCurrently().getSummary());
iconImageView.setImageResource(WeatherIconUtil.ICONS.get(wResponse.getCurrently().getIcon()));
}}
@Override
public void onFailure(Throwable t) {}});
}
下面是Weathericonutil类,用于获取图标
public final class WeatherIconUtil {
public static final Map<String, Integer> ICONS;
static {
Map<String, Integer> iconMap = new HashMap<>();
iconMap.put("clear-day", R.drawable.ic_clear_day);
iconMap.put("clear-night", R.drawable.ic_clear_night);
iconMap.put("rain", R.drawable.ic_rain);
iconMap.put("snow", R.drawable.ic_snow);
iconMap.put("sleet", R.drawable.ic_sleet);
iconMap.put("wind", R.drawable.ic_wind);
iconMap.put("fog", R.drawable.ic_fog);
iconMap.put("cloudy", R.drawable.ic_cloudy);
iconMap.put("partly-cloudy-day", R.drawable.ic_partly_cloudy_day);
iconMap.put("partly-cloudy-night", R.drawable.ic_partly_cloudy_night);
iconMap.put("thunderstorm", R.drawable.ic_thunderstorm);
ICONS = Collections.unmodifiableMap(iconMap);
}
}
下面是我的天气api界面
public interface weatherapis {
String api_key = "my key";
String BASE_URL= "http://api.openweathermap.org/data/2.5/";
// static Retrofit retrofit = null;
@GET("/data/2.5/weather")
Call<Weather> getCurrently();
/*
Get request to fetch city weather.Takes in two parameter-city name and API key.
*/
@GET("/data/2.5/weather")
Call<Weather> getWeatherByCity(@Query("q") String city, @Query("appid") String apiKey);
}
*当前从模型中学习*
public class Currently {
@SerializedName("time")
@Expose
private Integer time;
@SerializedName("summary")
@Expose
private String summary;
@SerializedName("icon")
@Expose
private String icon;
@SerializedName("temperature")
@Expose
private Double temperature;
public Integer getTime() {
return time;
}
public void setTime(Integer time) {
this.time = time;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Double getTemperature() {
return temperature;
}
public void setTemperature(Double temperature) {
this.temperature = temperature;
}
}
网络客户端下方
public class NetworkClient {
public static final String BASE_URL = "http://api.openweathermap.org";
public static Retrofit retrofit;
/*
This public static method will return Retrofit client
anywhere in the appplication
*/
public static Retrofit getRetrofitClient() {
//If condition to ensure we don't create multiple retrofit instances in a single application
if (retrofit == null) {
//Defining the Retrofit using Builder
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL) //This is the only mandatory call on Builder object.
.addConverterFactory(GsonConverterFactory.create()) // Convertor library used to convert response into POJO
.build();
}
return retrofit;
}
}
*在主要活动中获取摘要和图标时崩溃日志*
09-12 15:54:18.648 12336-12336/? D/AndroidRuntime: Shutting down VM
09-12 15:54:18.648 12336-12336/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nv.thisisitman, PID: 12336
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String models.Currently.getSummary()' on a null object reference
at com.nv.thisisitman.MainActivity$2.onResponse(MainActivity.java:63)
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6239)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
答案 0 :(得分:0)
检查调试响应。我认为api响应中没有摘要。