【发布时间】: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是一个静态方法。检查应用程序控制器实例。 -
谢谢我找到了解决办法。