首页 > 解决方案 > 解析来自凌空的请求

问题描述

我有一个奇怪的问题,我向服务器发出了一个简单的请求,它响应成功,我解析它没有问题,然后我将从服务器返回的值分配给我的响应模型类,但没有任何东西出现,尽管我找到了它们在日志文件中:(提示:大部分响应是阿拉伯语)

这是我的响应模型类:

    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}

标签: androidandroid-volley

解决方案


是的,因为“ques”在设置响应中的值之前返回。

尝试在此方法中设置您的“问题”值

              @Override
                public void onResponse(String response) {
                   //set your values here in the adapter
                   }

推荐阅读