मैं अपने एंड्रॉइड ऐप से एपीआई कॉल करने के लिए रेट्रोफिट का उपयोग कर रहा हूं। लेकिन प्रतिक्रिया ठीक संदेश के साथ स्थिति कोड 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;
}
}
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
}
मैंने अपनी सोच के सरल तरीके से समझाया, मुझे आशा है कि आप इसके बारे में समझ गए होंगे।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।