java - android volley 是否有回调做类似 java 最后的事情?

标签 java android android-volley

请求完成后我必须做一些事情。就像关闭加载对话框

我必须在 onResponse() 和 onErrorResponse() 的每个请求中添加 dialog.dismiss();

volley有全局回调吗?我想在同一 fragment/Activity 中进行全局回调来处理错误/成功消息

    JsonRequest jsonRequest = new JsonRequest
            (url, params, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    dialog.dismiss();
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    dialog.dismiss();
                }
            }) {
    };

最佳答案

是的,您可以通过创建自定义 Volley 请求来做到这一点。 请参阅下面的代码:

import java.io.UnsupportedEncodingException;
import java.util.Map;    
import org.json.JSONException;
import org.json.JSONObject;    
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import android.app.AlertDialog;

public class CustomRequest extends Request<JSONObject> {
    private Listener<JSONObject> listener;
    private Map<String, String> params;
    private AlertDialog dialog;

 //You can replace AlertDialog by the Type of dialog you use
    public CustomRequest(String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener          errorListener,AlertDialog dialog)
          {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
        this.dialog =dialog;
    }
    public CustomRequest(int method, String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }
    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    }; 

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            //Here you can call dialog.dismiss();
            dialog.dismiss();
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }
    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
}
}

请告诉我这是否有效。 :)

关于java - android volley 是否有回调做类似 java 最后的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737372/

相关文章:

java - 在 tomcat 中创建反向代理的最简单方法是什么?

java - JDOM 1.1 : hyphen is not a valid comment character

android - StaggaredGridLayoutManager 无法正常工作

Android 模拟器屏幕缩放问题

android - RecyclerView 不会立即显示任何内容

java - 类 RecyclerViewAdapter 中的构造函数 RecyclerViewAdapter 无法应用于给定类型

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : -1

android - 是否有适用于所有移动设备的适用于 Facebook 应用程序的通用 URI 方案?

java - 不使用参数的 POST 方法

java - 如何在点击android上添加类似和不同条件按钮?