【问题标题】:Android Volley RequestqueueAndroid Volley 请求队列
【发布时间】:2016-09-19 22:36:07
【问题描述】:

我正在使用 Web 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:on点击 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick

所以我用了这个方法。

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

然后它正在工作。我想知道为什么第一种方法不起作用。 (应用控制器)

已编辑

 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);

    }

【问题讨论】:

  • 发布您的适配器代码
  • 你的问题是onClick()方法
  • @war_Hero 检查我编辑的代码
  • 可能你的应用控制器在点击的时候没有初始化。 Volley.newRequestQueue 是一个静态方法。检查应用程序控制器实例。
  • 谢谢我找到了解决办法。

标签: android android-volley


【解决方案1】:

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

<uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:name="utils.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多