Android 创建简单的 volley Singleton class 准备 GET 和 POST 方法

Android create simple volley Singleton class to prepare GET and POST method

使用 android Volley 教程我正在创建简单的单例 class 作为 Volley,但是在准备 GET 和 POST 方法后我得到 NullPointerException 错误,我找不到什么错误:

AppControllert Volley 单例 class:

public class ApplicationController extends Application {
    public static final String TAG = "VolleyPatterns";
    private RequestQueue mRequestQueue;
    private static ApplicationController sInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }
    public static synchronized ApplicationController getInstance() {
        return sInstance;
    }
    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }
        return mRequestQueue;
    }
    public <T> void addToRequestQueue(Request<T> req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        VolleyLog.e("Adding request to queue: %s", req.getUrl());
        getRequestQueue().add(req);
    }
    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);

        getRequestQueue().add(req);
    }
    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
}

在 Activity 中,我尝试用这个 class:

创建简单的请求
final String URL = "http://192.168.1.6/apitest";
JsonObjectRequest req = new JsonObjectRequest(URL, null,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.e("Response:", response.toString());
            }
        }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("Error: ", error.getMessage());
    }
});
ApplicationController.getInstance().addToRequestQueue(req);

Logcat 错误:

Caused by: java.lang.NullPointerException
            at asrebidaree.ir.asrebidaree.ActivityRegistration.onCreate(ActivityRegistration.java:37)

第 37 行是:ApplicationController.getInstance().addToRequestQueue(req);

代码看起来不错。您必须在 AndroidManifest.xml 中注册应用程序的子类。如果你没有,你的 sInstance 将不会被初始化,因为 Android 不会使用你的应用程序的 sublcass