2016-05-23 61 views
0

我正在使用web API学习Android。所以我正在使用Volley。我发现教程从Android Volley Requestqueue

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

    } 
+0

发表您的适配器代码 –

+0

你的问题是'的onClick()'方法 –

+0

@war_Hero检查我编辑的代码 – Puvanarajan

回答

0

我找到了解决办法。我需要在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"