Android Volley Requestqueue

时间:2016-05-23 06:53:01

标签: android android-volley

我正在使用网络API学习Android。所以我正在使用Volley。我从

找到了教程

http://www.androidhive.info/2014/09/android-json-parsing-using-volley/

https://developer.android.com/training/volley/index.html

这里我创建了一个类调用AppController。

package utils;

        import utils.LruBitmapCache;
        import android.app.Application;
        import android.text.TextUtils;

        import com.android.volley.Request;
        import com.android.volley.RequestQueue;
        import com.android.volley.toolbox.ImageLoader;
        import com.android.volley.toolbox.Volley;

public class AppController extends Application {

    public static final String TAG = AppController.class
            .getSimpleName();

    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;

    private static AppController mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized AppController getInstance() {
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        return mRequestQueue;
    }

    public ImageLoader getImageLoader() {
        getRequestQueue();
        if (mImageLoader == null) {
            mImageLoader = new ImageLoader(this.mRequestQueue,
                    new LruBitmapCache());
        }
        return this.mImageLoader;
    }

    public <T> void addToRequestQueue(Request<T> req, String tag) {
        // set the default tag if tag is empty
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        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);
        }
    }
}

之后我的按钮点击事件我创建了JsonObjectRequest,我调用了这个方法。

AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);

然后它给出了错误

  

java.lang.IllegalStateException:无法执行方法   android:onClick at   android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick

所以我使用了这种方法。

Volley.newRequestQueue(this).add(jsonObjReq);

然后它正在运作。我想知道为什么第一种方法不起作用。 (AppController的)

被修改

 public void loginClick(View view){

        EditText username = (EditText) findViewById(R.id.userName);
        EditText password = (EditText) findViewById(R.id.password);

        String tag_json_obj = "json_obj_req";

        String url = "http://api.androidhive.info/volley/person_object.json";

        final ProgressDialog pDialog = new ProgressDialog(this);
        pDialog.setMessage("Loading...");
        pDialog.show();

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

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("RESULT", response.toString());
                        pDialog.hide();
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("RESULT", "Error: " + error.getMessage());
                // hide the progress dialog
                pDialog.hide();
            }
        });

        Volley.newRequestQueue(this).add(jsonObjReq);

//       AppController.getInstance().addToRequestQueue(jsonObjReq,tag_json_obj);

    }

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。我需要在AndroidManifest.xml中添加“android:name =”utils.AppController“”行。

driver.get