尝试通过使用改造2和gson库来获取api数据,我能够基于我创建的模型变量来获取数据,但是在一个正在获取的模型中,这是空点异常。我检查了每个变量是否在构造函数,getter,setter中初始化了,但是一切都很好。在调试中,它向我显示Date.java模型中的null。下面是Java代码和LOGCAT。希望有人能帮助我找到解决方案。
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView fajrTv,dhuhrTv,asrTv,maghribTv,ishaTv,dateTv;
Button btnSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prayer);
btnSearch=findViewById(R.id.btnSearch);
fajrTv=findViewById(R.id.fajrTv);
dhuhrTv=findViewById(R.id.dhuhrTv);
asrTv=findViewById(R.id.asrTv);
maghribTv=findViewById(R.id.maghribTv);
ishaTv=findViewById(R.id.ishaTv);
dateTv=findViewById(R.id.dateTv);
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SearchAPI();
}
});
private void SearchAPI() {
String mLocation=search.getText().toString().trim();
keyboard();
if (mLocation.isEmpty()){
Toast.makeText(PrayerActivity.this,"Please enter city name",Toast.LENGTH_SHORT).show();
}else {
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(APIInterface.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
APIInterface apiInterface=retrofit.create(APIInterface.class);
Call<Prayer> call=apiInterface.getPrayer(mLocation,method,school);
call.enqueue(new Callback<Prayer>() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onResponse(Call<Prayer> call, Response<Prayer> response) {
Prayer prayer=response.body();
String fajrMain=prayer.getData().getTimings().getFajr();
String dhuhrMain=prayer.getData().getTimings().getDhuhr();
String asrMain=prayer.getData().getTimings().getAsr();
String maghribMain=prayer.getData().getTimings().getMaghrib();
String ishaMain=prayer.getData().getTimings().getIsha();
String dateMain=prayer.getData().getDate().getGregorian().getDate(); //In logcat it is showing me null on this line
dateTv.setText(dateMain);}
@Override
public void onFailure(Call<Prayer> call, Throwable t) {
Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_LONG).show();}});}}}}
APIInterface.Java
public interface APIInterface {
String BASE_URL="https://api.aladhan.com/v1/"; //For checking the json use "http://api.aladhan.com/v1/timingsByAddress?address=Riyadh&method=1"
@GET("/timingsByAddress?address=&method=&school=")
Call<Prayer> getPrayer(@Query("address") String address, @Query("method") int method, @Query("school") int school);}
Data.Java
public class Data {
@SerializedName("timings")
@Expose
private Timings timings;
@SerializedName("date")
@Expose
private Date date;
@SerializedName("meta")
@Expose
private Meta meta;
public Data(Timings timings, Date date, Meta meta) {
this.timings = timings;
this.date = date;
this.meta = meta;}
public Timings getTimings() {
return timings;}
public Date getDate(){
return date;}
public Meta getMeta() {
return meta;}
public void setTimings(Timings timings) {
this.timings = timings;}
public void setDate(Date date) {
this.date = date;}
public void setMeta(Meta meta) {
this.meta = meta;}}
Date.Java
public class Date {
@SerializedName("readable")
@Expose
private String readable;
@SerializedName("timestamp")
@Expose
private String timestamp;
@SerializedName("hijri")
@Expose
private Hijri hijri;
@SerializedName("gregorian")
@Expose
private Gregorian gregorian;
public Date(String readable, String timestamp,Hijri hijri, Gregorian gregorian) {
this.readable = readable;
this.timestamp=timestamp;
this.hijri=hijri;
this.gregorian = gregorian;}
public String getReadable() {
return readable;}
public void setReadable(String readable) {
this.readable = readable;}
public Gregorian getGregorian() {
return gregorian;}//During debugging it is showing getGregorian "null" on this line
public Hijri getHijri() {
return hijri;}
public void setHijri(Hijri hijri) {
this.hijri = hijri;}
public String getTimestamp() {
return timestamp;}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;}
public void setGregorian(Gregorian gregorian) {
this.gregorian = gregorian;}}
Gregorian.Java
public class Gregorian {
@SerializedName("date")
@Expose
private String date;
public Gregorian(String date) {
this.date = date;}
public String getDate() {
return date;}
public void setDate(String date) {
this.date = date;}}
LOGCAT
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nabil.myapplication, PID: 8752
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.nabil.myapplication.model.Gregorian.getDate()' on a null object reference
at com.nabil.myapplication.PrayerActivity$5.onResponse(MainActivity.java:167)