相同的齐射类多次请求API吗?

时间:2018-07-15 05:27:03

标签: java android android-volley

我知道排球对网络图书馆很有帮助。我的问题是我必须多次调用API请求,是否有机会在单独的类中调用此代码并每次都使用它?

String url = "sameurl";

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
            }
        }) 
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);

2 个答案:

答案 0 :(得分:1)

您可以使用侦听器来执行此操作。将所有与网络和截击相关的代码移到一个单独的类中。将所需的对象和数据(例如URL,http方法,标头等)作为方法参数传递。

您还需要具有一个由您的调用类实现的接口,当收到响应或请求失败时,volley将调用此接口的方法来通知调用方。

您的界面将如下所示

public interface HttpListener {
   void onResponseReceived(JSONObject response);
   void onError(VolleyError error);
}

现在在排球课上,你会得到类似的东西

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
                //pass httpListener instance as a method parameter to this method
                if(httpListener != null) {
                    httpListner.onResponseReceived(response);
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                if(httpListener != null) {
                    httpListner.onError(VolleyError error);
                }
            }
        }) 

在进行http调用时,您还需要传递此侦听器。最简单的方法是使您的调用者类实现此接口,并将this作为HttpListner的对象传递

您的调用者类将实现HttpListener接口并重写方法。每当您通过此覆盖的方法获得响应或任何错误时,都会得到回调。

答案 1 :(得分:0)

实际上,其想法是在单独的线程中通过网络调用API。每当您需要执行网络调用时,都需要在单独的线程中执行此操作,Volley提供了一个有用的接口以方便的方式执行此操作。

因此,无论何时在创建JSON请求时创建Volley的新实例,它都会创建一个独立的线程并开始执行网络调用。主要的UI线程代码执行进一步进行而无需等待网络调用完成-无论如何,这是多线程的基本思想。 GC会根据需要处理所有垃圾收集。

如果您坚持使用相同的Volley对象来进行所有网络API调用,则需要以同步方式进行API调用。也就是说,当网络呼叫返回任何响应时,您需要启动下一个呼叫。此实现取决于您在那里的情况。如果要以异步方式执行网络调用,则每次使用多线程环境的异步行为调用网络API时,都必须创建Volley对象的新实例。