繁体   English   中英

无法使用 Retrofit2 + RXJava2 获取响应,但在 POSTMAN 中获取响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM