【问题标题】:Volley get request doesn't hit serverVolley 获取请求未命中服务器
【发布时间】:2017-07-06 21:04:08
【问题描述】:

我已经解决了这个问题,它已经过去了大约 2 个小时,基本上我正在尝试从我的服务器获取一些数据,并且 volley 回调永远不会被执行。

基本上我定义了一个接口来处理凌空请求,所以对于 getRequest 我有这样的东西:

public void getDataObjectVolley(final String requestType, String url, final String token){
        try {
            RequestQueue queue = Volley.newRequestQueue(mContext);

            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url,null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    if(mResultCallback != null)
                        mResultCallback.notifySuccess(requestType, response);
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {

                }
            }) {

                @Override
                public Map<String, String> getHeaders(){
                    Map<String, String> headers = new HashMap<>();
                    Log.d("tokenXX",token);
                    headers.put("x-access-token", token);
                    return headers;
                }
            };

            jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(30000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            queue.add(jsonObjectRequest);

        }catch(Exception e){

        }
    }

然后在我的活动中,我初始化回调并将函数传递给他:

IResult mResultCallbackGET = null;

onCreate 我调用 loadPhotos

 loadPhotoDetails();

那么方法是这样的:

 private void loadPhotoDetails() {
        final String urlDetails = connectionTxt + "/fotos/" + fotoId;
        loadPhotoInfo();
        mVolleyService = new VolleyService(mResultCallbackGET,this);
        mVolleyService.getDataObjectVolley(GETREQUEST,urlDetails,token);
    }

loadPhotoInfo

void loadPhotoInfo(){
        Log.d("HELLOWORLD","HELLOWOLD");
        mResultCallbackGET = new IResult() {
            @Override
            public void notifySuccess(String requestType, JSONObject response) {
                /*Log.d("HELLOWOLRD","HELLOWOLD1");
                Log.d("resposta123",response.toString());
                String path = null;
                Double lat = null;
                Double lon = null;
                Double alt = null;
                Boolean hasFlower = null;
                Boolean hasLeaf = null;
                Boolean hasThorn = null;
                Boolean hasFruit = null;
                String flowerColor = null;
                String time = null;

                try {
                    path = response.getString("image");
                    lat = response.getDouble("lat");
                    lon = response.getDouble("lon");
                    alt = response.getDouble("altitude");
                    hasFlower = response.getBoolean("hasFlower");
                    hasLeaf = response.getBoolean("hasLeaf");
                    hasThorn = response.getBoolean("hasThorn");
                    hasFruit = response.getBoolean("hasFruit");
                    flowerColor = response.getString("flowerColor");
                    time = response.getString("date");

                } catch (JSONException e) {
                    e.printStackTrace();
                }
                photoDetails = new Photo(path,lat,lon,alt,time,hasFlower,hasLeaf,hasThorn,hasFruit,flowerColor);
                Log.d("fruit12",String.valueOf(hasFlower));
                Log.d("fruit12",String.valueOf(hasLeaf));
                Log.d("fruit12",String.valueOf(hasThorn));

                if(hasFruit){
                    hasFruitTxt.setText("Sim");
                }
                else{
                    Log.d("fruit","false");
                    hasFruitTxt.setText("Não");
                }

                if(photoDetails.getHasFlower()){
                    hasFlowerTxt.setText("Sim");
                }
                else{
                    hasFlowerTxt.setText("Não");
                }

                if(photoDetails.getHasThorns()){
                    hasThornsTxt.setText("Sim");
                }
                else{
                    hasThornsTxt.setText("Não");
                }

                if(photoDetails.getHasLeaf()){
                    hasLeafTxt.setText("Sim");
                }
                else{
                    hasLeafTxt.setText("Não");
                }*/
                Log.d("HELLOWOLRD","HELLOWOLD1");
            }

            @Override
            public void notifySuccess(String requestType, JSONArray response) {
                Log.d("HELLOWOLRD","HELLOWOLD2");
            }

            @Override
            public void notifyError(String requestType, VolleyError error) {
                Log.d("HELLOWOLRD","HELLOWOLD3");
            }
        };
    }

你们可以看到我有 4 个 hello worlds 日志,它只是进入第一个,它从未命中服务器,对此有什么帮助吗?

非常感谢

【问题讨论】:

    标签: java android http android-volley


    【解决方案1】:

    我的建议是在 loadPhotoDetails() 方法中处理所有 HTTP 请求。代码会更短。您可以创建一个 CONSTANTS 文件来处理 connectionTxt 和其他常量。 (参考下面的例子)

    //--------------------------------------------- ------------

    private void loadPhotoDetails()(String fotoId) {

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
                connectionTxt + "/fotos/" + fotoId, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try{
                    if (response.has("Ratings")) {
                        JSONArray ratings = response.getJSONArray("Ratings");
    
                        String source = null;
                        String value = null;
                        if (ratings.length() > 0) {
    
                            JSONObject mRatings = ratings.getJSONObject(ratings.length() - 1);
                            source = mRatings.getString("Source");
                            value = mRatings.getString("Value");
                            rating.setText(source + " : " + value);
    
                        }else {
                            rating.setText("Ratings: N/A");
                        }
    
                        path.setText(response.getString("image"));
                        lat.setText(response.getString("lat"));
                        lon.setText(response.getString("lon"));
                        alt.setText(response.getString("altitude"));
                        hasFlower.setText(response.getBoolean("hasFlower"));
                        hasLeaf.setText(response.getBoolean("hasLeaf"));
                        hasThorn.setText(response.getBoolean("hasThorn"));
                        hasFruit.setText(response.getBoolean("hasFruit"));
                        flowerColor.setText(response.getString("flowerColor"));
                        time.setText(response.getString("date"));
                    }
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("Error:", error.getMessage());
            }
        });
    
        queue.add(jsonObjectRequest);
    
    }
    

    //--------------------------------------------------------

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2018-09-28
      • 2023-03-30
      • 2021-07-31
      • 2016-12-11
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多