Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android截击中处理多个请求_Android_Performance_Android Volley - Fatal编程技术网

在Android截击中处理多个请求

在Android截击中处理多个请求,android,performance,android-volley,Android,Performance,Android Volley,我试图用凌空抽射击中多个请求,我得到了所有请求的响应。我的问题是如何识别响应属于哪个API mQueue = CustomVolleyRequest.getInstance(this.getApplicationContext()) .getRequestQueue(); final CustomJSONObjectrequest jsonRequest = new CustomJSONObjectrequest(Request.Method

我试图用凌空抽射击中多个请求,我得到了所有请求的响应。我的问题是如何识别响应属于哪个API

mQueue = CustomVolleyRequest.getInstance(this.getApplicationContext())
            .getRequestQueue();

    final CustomJSONObjectrequest jsonRequest = new CustomJSONObjectrequest(Request.Method
            .GET, url,
            new JSONObject(), this, this); // 
    jsonRequest.setTag(REQUEST_TAG);

    final CustomJSONObjectrequest jsonRequest2 = new CustomJSONObjectrequest(Request.Method
            .GET, url2,
            new JSONObject(), this, this);
    jsonRequest2.setTag(REQUEST_TAG);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mQueue.add(jsonRequest);
            mQueue.add(jsonRequest2); // Both the request will have different API request
        }
    });
}
@Override
public void onErrorResponse(VolleyError error) {
    mTextView.setText(error.getMessage());
}

@Override
public void onResponse(Object response) {

    // How to identify, which response is belong to which api request
    mTextView.setText("Response is: " + response);

}

您可以对单个请求执行类似的操作。第二个请求也可以采用同样的方法。这样,您就可以知道哪个请求正在给您响应

final CustomJSONObjectrequest jsonRequest = new CustomJSONObjectrequest(Request.Method
        .GET, url,
        new JSONObject(), this,  new Response.Listener<Object>() {
                @Override
            public void onResponse(Object response) {

// How to identify, which response is belong to which api request
mTextView.setText("Response is: " + response);

});
然后,您可以为截击请求创建自定义处理程序,如:

public class CustomJSONObjectRequest implements Response.Listener<JSONObject>, Response.ErrorListener {

private VolleyResponse volleyResponse;
private String tag;
private JsonObjectRequest jsonObjectRequest;


public CustomJSONObjectRequest(int method, String url, JSONObject jsonObject, String tag, VolleyResponse volleyResponse) {
    this.volleyResponse = volleyResponse;
    this.tag= tag;
    jsonObjectRequest = new JsonObjectRequest(method, url, jsonObject, this, this);
}

@Override
public void onResponse(JSONObject response) {
    volleyResponse.onResponse(response, tag);
}

@Override
public void onErrorResponse(VolleyError error) {
    volleyResponse.onError(error, tag);
}

public JsonObjectRequest getJsonObjectRequest() {
    return jsonObjectRequest;
}
}
确保让您的类实现
VolleyResponse
接口,该接口将为您提供响应和标记

@Override
public void onResponse(JSONObject object, String tag) {
    Log.i("Response :", object.toString() + "   " + tag);
}

@Override
public void onError(VolleyError error, String tag) {

}
要将请求添加到截击队列,您可以使用:

mQueue.add(request1.getJsonObjectRequest());

PS:这段代码没有经过测试,但应该可以工作。

创建一个通用的截击类和一个接口,使用该接口获得成功和失败响应

  • 步骤1创建一个单独的截击类
  • 步骤2创建一个接口,用于访问来自volley类的响应
  • 步骤3为创建新对象 类并发送所需的参数
新的PostVolleyJsonRequest(TestVolley.this,TestVolley.this(interfcae),“提交”,url,参数)

  • 课堂语境
  • 发送成功和失败响应的接口
  • 成功时要识别的请求类型
  • url(必填)
  • 无需获取的参数(可选)
  • 通用截击类

    public class PostVolleyJsonRequest {
    private String  type;
    private Activity act;
    private VolleyJsonRespondsListener volleyJsonRespondsListener;
    private String networkurl;
    private JSONObject jsonObject = null;
    private JSONObject params;
    
    
    public PostVolleyJsonRequest(Activity act, VolleyJsonRespondsListener volleyJsonRespondsListener, String type, String netnetworkUrl,JSONObject params) {
        this.act = act;
        this.volleyJsonRespondsListener = volleyJsonRespondsListener;
        this.type = type;
        this.networkurl = netnetworkUrl;
        this.params = params;
        sendRequest();
    }
    
    private void sendRequest() {
    
        Log.d("url", "url" + networkurl);
        JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,networkurl,params,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.e("response", "response " + response);
                        volleyJsonRespondsListener.onSuccessJson(response, type);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        try {
                            NetworkResponse response = error.networkResponse;
                            Log.e("response", "response " + response);
                            if (response != null) {
                                int code = response.statusCode;
    
                                String errorMsg = new String(response.data);
                                Log.e("response", "response" + errorMsg);
                                try {
                                    jsonObject = new JSONObject(errorMsg);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                                String msg = jsonObject.optString("message");
                                volleyJsonRespondsListener.onFailureJson(code, msg);
                            } else {
                                String errorMsg = error.getMessage();
                                volleyJsonRespondsListener.onFailureJson(0, errorMsg);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
    
        jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
                600000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    
        RequestQueue requestqueue = Volley.newRequestQueue(act);
        requestqueue.add(jsObjRequest);
    
    }
    
    }

    在您想要包含多个请求的类中

    public class TestVolley extends AppCompatActivity implements VolleyJsonRespondsListener{
    
    //Your class code goes here
    
    
    //network request
    
    try {
            //parameters 
            //Context,Interface,Type(to indentify your responds),URL,parameter for your request 
    
            //request 1
            new PostVolleyJsonRequest(TestVolley.this, TestVolley.this, "Submit", url, params);
    
            //request 2
            new PostVolleyJsonRequest(TestVolley.this, TestVolley.this, "AccessData", url_2, params_2);
    
    
    
    
     } catch (Exception e) {
    
     e.printStackTrace()
     }
    
     //Methods from Interface
    
      @Override
    public void onSuccessJson(JSONObject result, String type) {
    
       //Based on the Type you send get the responds and parse it 
        switch (type) {
            case "Submit":
                try {
                    parseSubmit(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
    
            case "AccessData":
                try {
                    parseAccessData(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
               break;
        }
    

    如果我在父类中实现Response.Listener,我将重写父类中的OnResponse方法。那么有什么方法可以使用标记或其他任何东西进行标识吗?您可以创建一个实现
    Response.Listener
    接口的抽象类,并使其包含两个参数,第二个参数是标记。我只是这样做的。但在OnResponse(Obj)中,只有一个参数。然后,我们如何识别请求的标记,或者我是否错了,可以解释得更多一些。我试图做一个自定义类来处理请求。虽然没有测试过,但应该可以正常工作。你能分享一下吗?如果可能的话,那会对我有很大帮助
    public class PostVolleyJsonRequest {
    private String  type;
    private Activity act;
    private VolleyJsonRespondsListener volleyJsonRespondsListener;
    private String networkurl;
    private JSONObject jsonObject = null;
    private JSONObject params;
    
    
    public PostVolleyJsonRequest(Activity act, VolleyJsonRespondsListener volleyJsonRespondsListener, String type, String netnetworkUrl,JSONObject params) {
        this.act = act;
        this.volleyJsonRespondsListener = volleyJsonRespondsListener;
        this.type = type;
        this.networkurl = netnetworkUrl;
        this.params = params;
        sendRequest();
    }
    
    private void sendRequest() {
    
        Log.d("url", "url" + networkurl);
        JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,networkurl,params,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.e("response", "response " + response);
                        volleyJsonRespondsListener.onSuccessJson(response, type);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        try {
                            NetworkResponse response = error.networkResponse;
                            Log.e("response", "response " + response);
                            if (response != null) {
                                int code = response.statusCode;
    
                                String errorMsg = new String(response.data);
                                Log.e("response", "response" + errorMsg);
                                try {
                                    jsonObject = new JSONObject(errorMsg);
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                                String msg = jsonObject.optString("message");
                                volleyJsonRespondsListener.onFailureJson(code, msg);
                            } else {
                                String errorMsg = error.getMessage();
                                volleyJsonRespondsListener.onFailureJson(0, errorMsg);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
    
        jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
                600000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    
        RequestQueue requestqueue = Volley.newRequestQueue(act);
        requestqueue.add(jsObjRequest);
    
    }
    
    public interface VolleyJsonRespondsListener {
    
    public void onSuccessJson(JSONObject result, String type);
    public void onFailureJson(int responseCode, String responseMessage);
    
    public class TestVolley extends AppCompatActivity implements VolleyJsonRespondsListener{
    
    //Your class code goes here
    
    
    //network request
    
    try {
            //parameters 
            //Context,Interface,Type(to indentify your responds),URL,parameter for your request 
    
            //request 1
            new PostVolleyJsonRequest(TestVolley.this, TestVolley.this, "Submit", url, params);
    
            //request 2
            new PostVolleyJsonRequest(TestVolley.this, TestVolley.this, "AccessData", url_2, params_2);
    
    
    
    
     } catch (Exception e) {
    
     e.printStackTrace()
     }
    
     //Methods from Interface
    
      @Override
    public void onSuccessJson(JSONObject result, String type) {
    
       //Based on the Type you send get the responds and parse it 
        switch (type) {
            case "Submit":
                try {
                    parseSubmit(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
    
            case "AccessData":
                try {
                    parseAccessData(result);
                } catch (Exception e) {
                    e.printStackTrace();
                }
               break;
        }