![](/img/trans.png)
[英]Unable to fetch data in recycler view using Retrofit2 + RxJava2
[英]Unable to fetch response using Retrofit2 + RXJava2 but fetching response in POSTMAN
我正在尝试从服务器获取 JSON 响应以进行联网我正在使用 Retrofit2 和 Rxjava2 从服务器获取数据。 以下是来自服务器的 JSON 响应。
{
"status": "Success",
"panHolderName": "xxxxxx",
"dateOfBirth": "xx-xx-xxxx",
"gender": "xxx",
"residence": null,
"occupation": "xxxx",
"address": "xxxxxxx",
"pincode": "xxxxxx"
}
当我在 POSTMAN 中使用 API 时,它可以正确获取上述响应,但是当我使用 RXJAva2 和 retrofit 时,它显示panHolderName
字段仅获取响应为什么没有显示其他字段数据。
下面是我的代码
RetrofitClient.class
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getInstance(){
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(22, TimeUnit.SECONDS)
.readTimeout(22, TimeUnit.SECONDS)
.writeTimeout(22, TimeUnit.SECONDS)
.build();
if(retrofit == null)
retrofit = new Retrofit.Builder()
.baseUrl("http://68.169.58.46:8080/portal/androidIntegrationAPI/")
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
return retrofit;
}
}
ApiService.class
public interface ApiService {
@POST("getPanDetails")
Observable<PanDetails> getDetails(@Body JsonObject jsonObject);
}
PanDetails.class
public class PanDetails {
@SerializedName("status")
@Expose
String status;
@SerializedName("panHolderName")
@Expose
String panHolderName;
@SerializedName("dateOfBirth")
@Expose
String dateOfBirth;
@SerializedName("gender")
@Expose
String gender;
@SerializedName("residence")
@Expose
String residence;
@SerializedName("occupation")
@Expose
String occupation;
@SerializedName("address")
@Expose
String address;
@SerializedName("pincode")
@Expose
String pincode;
public PanDetails(String status, String panHolderName, String dateOfBirth, String gender, String residence,
String occupation, String address, String pincode) {
this.status = status;
this.panHolderName = panHolderName;
this.dateOfBirth = dateOfBirth;
this.gender = gender;
this.residence = residence;
this.occupation = occupation;
this.address = address;
this.pincode = pincode;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getPanHolderName() {
return panHolderName;
}
public void setPanHolderName(String panHolderName) {
this.panHolderName = panHolderName;
}
public String getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(String dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getResidence() {
return residence;
}
public void setResidence(String residence) {
this.residence = residence;
}
public String getOccupation() {
return occupation;
}
public void setOccupation(String occupation) {
this.occupation = occupation;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPincode() {
return pincode;
}
public void setPincode(String pincode) {
this.pincode = pincode;
}
}
个人信息.class
private void sendPan(String str1){
Retrofit retrofit = RetrofitClient.getInstance();
ApiService apiService = retrofit.create(ApiService.class);
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("panNo",str1);
apiService.getDetails(jsonObject).subscribeOn(Schedulers.io())
.subscribe(new Observer<PanDetails>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(PanDetails value) {
prg.dismiss();
name.setText(value.getPanHolderName());
Log.d("name",nam);
mydob.setText(value.getDateOfBirth());
address.setText(value.getAddress());
pin.setText(value.getPincode());
if(value.getGender().equals("Male")){
gender.setSelection(1);
}
else{
gender.setSelection(2);
}
}
@Override
public void onError(final Throwable e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
prg.dismiss();
TastyToast.makeText(getApplicationContext(),e.getMessage(),
TastyToast.LENGTH_LONG,TastyToast.INFO).show();
}
});
}
@Override
public void onComplete() {
}
});
}
有人,请让我知道我做错了什么。 任何帮助,将不胜感激。
谢谢
之后抛出错误
name.setText(value.getPanHolderName());
这就是为什么它不打印其他值的原因。 在设置 UI 数据时,您需要在主线程上进行观察。
添加build.gradle
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation "io.reactivex.rxjava2:rxjava:2.1.1"
和
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.