मैं अपने एंड्रॉइड ऐप से एपीआई कॉल करने के लिए रेट्रोफिट का उपयोग कर रहा हूं। लेकिन प्रतिक्रिया ठीक संदेश के साथ स्थिति कोड 200 दिखाती है। लेकिन कॉल के लिए डेटा httpClient द्वारा वापस कर दिया जाता है। तो मैं अपने कॉल के प्रतिक्रिया डेटा को कैसे संभाल सकता हूं। यहाँ प्रतिक्रिया होगी

अनुरोध पेलोड

/okhttp.OkHttpClient: {"data":{"email":"foobar@gmail.com","password":"PASSWoRD121"}}

प्रतिक्रिया:

okhttp.OkHttpClient: {"डेटा":"माई टोकन"}

यहाँ मेरी मुद्रित प्रतिक्रिया उपरोक्त डेटा नहीं देगी। मैं अपनी अगली कॉल के लिए टोकन कैसे सेट कर सकता हूं?

प्रतिक्रिया ==== प्रतिसाद{प्रोटोकॉल=http/1.1, कोड=200, संदेश=ठीक है, url="http://tyhgfhfty/hfhgfh/"}

ApiService.java

 @POST(ApiConstant.Login)
 Call<User> LoginRequest(@Body JsonObject user);

लॉगिन गतिविधि:

ApiService userLoginService = retrofit.create(ApiService.class);
        final JsonObject jo = new JsonObject();

        jo.addProperty(ApiParameter.EMAIL, email);
        jo.addProperty(ApiParameter.PASSWORD, password);
        final JsonObject jobj = new JsonObject();
        jobj.add(ApiParameter.DATA, jo);
        userLoginService.userLogin(jobj).enqueue(new Callback<LoginRequest>(){
            @Override
            public void onResponse(Call<LoginRequest> call, Response<LoginRequest>response) {
                System.out.println(("response ===" + response));

LoginRequest.java

public class LoginRequest {

private String email;
private String password;

public void setEmail(String email) {
    this.email = email;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public String getPassword() {
    return password;
}

}

0
sejn 8 अक्टूबर 2020, 09:02

1 उत्तर

सबसे बढ़िया उत्तर

जब आपके पास एक json प्रतिक्रिया होती है, तो आप विश्लेषण कर सकते हैं या मान सकते हैं कि एक json एक वर्ग के बराबर है, क्योंकि Gson रूपांतरण।

उस जेसन में एक कुंजी data और एक स्ट्रिंग my tokken है।

एक वर्ग रेट्रोफिट प्रतिक्रिया में यह data नाम के बराबर चर है जो कि data प्रकार String से है, क्यों स्ट्रिंग? क्योंकि मूल्य मेरा टोकन उस जेसन में एक स्ट्रिंग है। तो आप उस मान को बाद में data गेट्टर सेटर से पुनः प्राप्त कर सकते हैं। जैसे getData();

तो {"data":"my tokken"} के लिए, आपकी LoginResponse कक्षा में केवल एक फ़ील्ड है जो data प्रकार String और सेटर गेटर के साथ है।

जब आपके पास प्रतिक्रिया {"data": {"user": "xxxx", "email": "foobar@gmail.com", "lastname": "yyyyy", "gender": 1, "deviceType": 1}"} हो। आप उस कुंजी का विश्लेषण कर सकते हैं data में एक json ऑब्जेक्ट है; एक जसन एक वर्ग के बराबर है

तो, आपको इसके मूल्य तक पहुंच प्राप्त करने के लिए एक वर्ग की आवश्यकता है। इसे User क्लास कहते हैं।

public class User {

     private String user; // because the value of user in json is String
     private String email;
     private String lastname;
     private Int gender; // because the value of gender in json is Int
     private Int deviceType;

     // the setter getter here

}

अंत में, आपकी कक्षा प्रतिक्रिया जो रेट्रोफिट कॉल को संभालती है। मान लीजिए UserResponse ऐसा होना चाहिए

public class UserResponse {

     private User data; 
     // the variable is named data because it should be the same to the json key and the type of the variable is class `User`. Remember about the bolded text
     // (variable named same is not a must, if different, you can use `SerializedName` annotation, you can read about it later) 

     // the setter getter here

}

मैंने अपनी सोच के सरल तरीके से समझाया, मुझे आशा है कि आप इसके बारे में समझ गए होंगे।

1
Erwin Kurniawan A 9 अक्टूबर 2020, 09:08