android - 解析来自凌空的请求
问题描述
我有一个奇怪的问题,我向服务器发出了一个简单的请求,它响应成功,我解析它没有问题,然后我将从服务器返回的值分配给我的响应模型类,但没有任何东西出现,尽管我找到了它们在日志文件中:(提示:大部分响应是阿拉伯语)
这是我的响应模型类:
public class QuestionResponse {
private String lang,questionID,question,choiceOne,choiceTwo,choiceThree,
type;
public QuestionResponse(){}
public QuestionResponse(String lang, String questionID, String question,
String choiceOne, String choiceTwo, String choiceThree, String type) {
this.lang = lang;
this.questionID = questionID;
this.question = question;
this.choiceOne = choiceOne;
this.choiceTwo = choiceTwo;
this.choiceThree = choiceThree;
this.type = type;
}
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
public String getQuestionID() {
return questionID;
}
public void setQuestionID(String questionID) {
this.questionID = questionID;
}
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public String getChoiceOne() {
return choiceOne;
}
public void setChoiceOne(String choiceOne) {
this.choiceOne = choiceOne;
}
public String getChoiceTwo() {
return choiceTwo;
}
public void setChoiceTwo(String choiceTwo) {
this.choiceTwo = choiceTwo;
}
public String getChoiceThree() {
return choiceThree;
}
public void setChoiceThree(String choiceThree) {
this.choiceThree = choiceThree;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
这是我的请求方法:
public QuestionResponse getQuestion(){
String BaseUrl = "http://winnerten.com/wini/public/api/";
String finalUrl = BaseUrl+"get-question";
final String token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjQwYzZiMDliNDQ5NjczNDUzYzNkYTY5OWUyZGY1NTI3ZjkxZTY4MDMifQ.eyJhenAiOiIyNTIyMTAyMDMyOTYtbWw5amRicmswaDJodGVicWRtdW9mNzRyaHZ1NDk1ZGwuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiIyNTIyMTAyMDMyOTYtZjdvMHU5OGt2bjVvZjhsYXZ1cnB0dHYwNzRwMDVqNzMuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMTU2NDMyMjIzNjQ5Njc1OTY2NDIiLCJlbWFpbCI6ImZhdGVtYWFobWVkMTk1M0BnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNTMzMTIyMjQyLCJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJpYXQiOjE1MzMxMTg2NDIsIm5hbWUiOiJmYXRlbWEgYWhtZWQiLCJwaWN0dXJlIjoiaHR0cHM6Ly9saDQuZ29vZ2xldXNlcmNvbnRlbnQuY29tLy13c0FPMWlpTUFYMC9BQUFBQUFBQUFBSS9BQUFBQUFBQUFBQS9BQW5uWTdwTG9PSlptNXU1V2F5YmlYRGhGQnktSy1xRzNRL3M5Ni1jL3Bob3RvLmpwZyIsImdpdmVuX25hbWUiOiJmYXRlbWEiLCJmYW1pbHlfbmFtZSI6ImFobWVkIiwibG9jYWxlIjoiZW4ifQ.HSqzBnGOEw9j33gnIiHycaAb8MPwaq7Elh94D9yBFrTABaOtLL9TNQxX4v7AeyWMRFApFrXw9F0lLfh7khH4dPSwTWKe8dnBJYvlUs_mGHP0tk0VuNr4fNhMWVgbRnn6EnfCUtLRHimXmPCJXJW8NVPtGuNWH5clifC-BbIYgQgXorMW9TCROmBUVj6E-kP023zFvhTHzbrcs7aNq8hx0P30gwyrbnyyWpfCUGG0Q5n5GmaF8onEkMjWx7Z-ZC4UsFSFECzf2Pj9ydB9K3FRUkYO0XZIyRtURZLNs8f6zbB6e0jjw26ETugUVqHTFYvoUcJeWwHK9Axuz9ZuBCeeww";
final QuestionResponse ques= new QuestionResponse();
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest postRequest = new StringRequest(Request.Method.POST, finalUrl,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// response
Log.d("ques.response",response);
try {
JSONObject all = new JSONObject(response);
JSONObject data = all.getJSONObject("data");
questionId = String.valueOf(data.getInt("questions_id"));
type = data.getString("type");
ques.setQuestionID(String.valueOf(data.getInt("questions_id")));
ques.setType(data.getString("type"));
Log.d("id",questionId);
Log.d("type",type);
if(type.equals("multi")){
question = data.getString("question");
choiceOne = data.getString("choice_1");
choiceTwo = data.getString("choice_2");
choiceThree = data.getString("choice_3");
lang = data.getString("lang");
ques.setQuestion(data.getString("question"));
ques.setChoiceOne(data.getString("choice_1"));
ques.setChoiceTwo(data.getString("choice_2"));
ques.setChoiceThree(data.getString("choice_3"));
ques.setLang(data.getString("lang"));
Log.d("question",question);
Log.d("ch_1",choiceOne);
Log.d("ch_2",choiceTwo);
Log.d("ch_3",choiceThree);
Log.d("type",type);
}
else if(type.equals("image")){
question = data.getString("question");
choiceOne = data.getString("choice_1");
choiceTwo = data.getString("choice_2");
choiceThree = data.getString("choice_3");
lang = data.getString("lang");
ques.setQuestion(data.getString("question"));
ques.setChoiceOne(data.getString("choice_1"));
ques.setChoiceTwo(data.getString("choice_2"));
ques.setChoiceThree(data.getString("choice_3"));
ques.setLang(data.getString("lang"));
}
else if(type.equals("correct")){
question = data.getString("question");
choiceOne = data.getString("choice_1");
choiceTwo = data.getString("choice_2");
choiceThree = data.getString("choice_3");
lang = data.getString("lang");
ques.setQuestion(data.getString("question"));
ques.setChoiceOne(data.getString("choice_1"));
ques.setChoiceTwo(data.getString("choice_2"));
ques.setChoiceThree("");
ques.setLang(data.getString("lang"));
}
Log.d("ques.parse.done","question parsing done");
} catch (JSONException e) {
Log.d("ques.parsing.error","parsing failed");
e.printStackTrace();
}
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("ques.error.response",error.toString());
}
}
){
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("token", token);
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImNlMDU4OGM4MmJiYjMwOGFjNTk1NWY3ZWVhMDI3ODVlYmM0NzkyZjFjY2ZmN2JjNzdkYmE3YjJmYjM5YjNiMThlMTY2NjgxZTQ0NTBmMWY4In0.eyJhdWQiOiIxIiwianRpIjoiY2UwNTg4YzgyYmJiMzA4YWM1OTU1ZjdlZWEwMjc4NWViYzQ3OTJmMWNjZmY3YmM3N2RiYTdiMmZiMzliM2IxOGUxNjY2ODFlNDQ1MGYxZjgiLCJpYXQiOjE1MzI3NzgwMjgsIm5iZiI6MTUzMjc3ODAyOCwiZXhwIjoxNTY0MzE0MDI4LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.EdebRxSgPIjU74xyqZFI-HqAjQJlmICaCNohRQNEK4LG4t3aIOAdna1J4IlZbmX-LXc7NxrMpXtOUs9Ino9OPN6IOBqL1exG57hLdvzQLlBxyagtsa4OKhZLdWIkD_DlZCepalNjg2q9TN1SIb6INihaVHWr-cxWu3jy4I_1IO-hrJmGox_M2lpvF-gMKd5TRoS9nLSSOfXMG9kdkRu5sV0l4DHViq7DylLivfiP_xoCq67AzBGqwqQqQwx7UBjQYF0QcdDJOzmCm4xiSFGpDZJKww8V8xHkCTesD-k3Zmc5Mqx5M-COO_8dewsP2ifLyRbKN8m8gOqVhrJlT1Rgkb71bYsCISMQ3QzFk2Y6ju_bxdiHDSrs99wlK4GxfmqAtBuzFXkamw7P0Ay-hwzPEg2rV0M7Ui2F9e9wNKkVmibBxyPIzHSEGpNF_lNG1TJbmhAHwngZh17TwhOLqTXV71nDJpKFzQgX1dTGC4ORtlMVEgpbGlDDfH0hY51qDUp7t-c4Egsue8nI1uyQ-CBiste1bGCBlpCkG-6WEEoYcQ1l4zJLmYu_VrR82ROEkgNFYQ4seck90s_iP2_tZr8GoiTmwFdIHui95pFBceTZIFQNvQ6jwJeo58jjB7-Ye-JvmyPm59FQm5Vigy-nEsvfuOCE7wxcrGh9qx--wOvfYQs");
headers.put("Accept", "application/json");
return headers;
}
};
// handles the slow connection, i.e connection timeout //
//int socketTimeout = 5000; //5 seconds
int socketTimeout = 30000; // 30 seconds. You can change it
RetryPolicy policy = new DefaultRetryPolicy(
socketTimeout,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
postRequest.setRetryPolicy(policy);
queue.add(postRequest);
return ques;
}
这是我的响应日志文件:
08-09 13:35:51.931 6077-6077/com.example.nasrmohamed.testapi10 D/ques.response: {"data":{"questions_id":55,"created_at":"2018-08-08 14:42:28","updated_at":"2018-08-08 14:42:28","question":"\u0645\u0627\u0647\u0649 \u0627\u0644\u0633\u0644\u0633\u0644\u0629 \u0627\u0644\u0645\u0643\u0648\u0646\u0629 \u0645\u0646 \u0639\u0638\u0627\u0645 \u0648\u063a\u0636\u0627\u0631\u064a\u0641 \u0648\u0627\u0644\u062a\u0649 \u062a\u0645\u062a\u062f \u0645\u0646 \u0627\u0644\u062c\u0645\u062c\u0645\u0629 \u0627\u0644\u0649 \u0627\u0644\u0639\u0635\u0639\u0635\u061f","choice_1":"\u0627\u0644\u0642\u0641\u0635 \u0627\u0644\u0635\u062f\u0631\u0649","choice_2":"\u0627\u0644\u0647\u064a\u0643\u0644 \u0627\u0644\u0639\u0638\u0645\u0649","choice_3":"\u0627\u0644\u0639\u0645\u0648\u062f \u0627\u0644\u0641\u0642\u0631\u0649","type":"multi","lang":"ar"},"code":200}
解决方案
是的,因为“ques”在设置响应中的值之前返回。
尝试在此方法中设置您的“问题”值
@Override
public void onResponse(String response) {
//set your values here in the adapter
}
推荐阅读
- reactjs - React 网络摄像头设置超时
- python-3.x - Python Authlib 是否支持解码 AWS Cognito 访问/ID 令牌?
- mysql - 计算一段时间内的俱乐部会员数据(新的、过去的和当前的)
- hex - 计算 shellcode 中的字节数
- javascript - 在输入表单中插入值
- sqlite - 将数据插入 SQLite 数据库失败并出现 sqlite3.InterfaceError: Error binding parameter 0 - 可能是不受支持的类型
- django - 两个字段之间的唯一约束,无论顺序如何
- google-apps-script - 如何制作电子表格副本并将其保存到指定文件夹?
- fastapi - 没有开始响应就返回了 ASGI 可调用对象
- assembly - NASM 汇编代码以前可以工作,但现在不行,并且正在丢弃分段错误