2016-03-25 8 views
2

Ich versuche, booleschen Wert mit Volley-Bibliothek zu buchen.Wenn eine Schaltfläche angeklickt wird, ist ein boolescher Wert auf True gesetzt. Der boolesche Wert wird dann auf meinem PHP-Skript gebucht, Zähler in meinem zu inkrementieren MySQL-Datenbank. Ich erhalte einen Fehler beim Versuch, eine Anfrage in die Warteschlange einzufügen. Was mache ich falsch? Dies ist mein CodeWie boolean Wert mit Volley

 holder.custom_button.setOnClickListener(new View.OnClickListener() { 
      int count; 


      @Override 
      public void onClick(View v) { 

       count = 0; 

       superHeroes.get(position).setCount(superHeroes.get(position).getCount() + 1); 
       holder.txtCount.setText(superHeroes.get(position).getCount() + ""); 


       final String url = "http://10.0.2.2/likes.php"; 

       isLiked = true; 

       JSONObject obj = new JSONObject(); 

       try { 
        obj.put("isLiked", true); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       JsonObjectRequest jsObjRequest = new JsonObjectRequest 

         (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { 


          @Override 
          public void onResponse(JSONObject response) { 

          } 
         }, new Response.ErrorListener() { 

          @Override 
          public void onErrorResponse(VolleyError error) { 
           // TODO Auto-generated method stub 

          } 
         }); 

// Access the RequestQueue through your singleton class. 
// i am getting error here 
       customVolleyRequest.getInstance(this).addToRequestQueue(jsObjRequest); 

      } 


     }); 

SINGLETON

package net.simplifiedcoding.myfeed; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.support.v4.util.LruCache; 

import com.android.volley.Cache; 
import com.android.volley.Network; 
import com.android.volley.RequestQueue; 
import com.android.volley.toolbox.BasicNetwork; 
import com.android.volley.toolbox.DiskBasedCache; 
import com.android.volley.toolbox.HurlStack; 
import com.android.volley.toolbox.ImageLoader; 
/** 
* Created by Belal on 12/5/2015. 
*/ 

public class CustomVolleyRequest { 

    private static CustomVolleyRequest customVolleyRequest; 
    private static Context context; 
    private RequestQueue requestQueue; 
    private ImageLoader imageLoader; 

    private CustomVolleyRequest(Context context) { 
     this.context = context; 
     this.requestQueue = getRequestQueue(); 

     imageLoader = new ImageLoader(requestQueue, 
       new ImageLoader.ImageCache() { 
        private final LruCache<String, Bitmap> 
          cache = new LruCache<String, Bitmap>(20); 

        @Override 
        public Bitmap getBitmap(String url) { 
         return cache.get(url); 
        } 

        @Override 
        public void putBitmap(String url, Bitmap bitmap) { 
         cache.put(url, bitmap); 
        } 
       }); 
    } 

    public static synchronized CustomVolleyRequest getInstance(Context context) { 
     if (customVolleyRequest == null) { 
      customVolleyRequest = new CustomVolleyRequest(context); 
     } 
     return customVolleyRequest; 
    } 

    public RequestQueue getRequestQueue() { 
     if (requestQueue == null) { 
      Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024); 
      Network network = new BasicNetwork(new HurlStack()); 
      requestQueue = new RequestQueue(cache, network); 
      requestQueue.start(); 
     } 
     return requestQueue; 
    } 

    public ImageLoader getImageLoader() { 
     return imageLoader; 
    } 
} 

ERROR

'getInstance(android.content.Context)' in 'net.simplifiedcoding.myfeed.CustomVolleyRequest' cannot be applied to '(anonymous android.view.View.OnClickListener)' 
+0

Haben Sie die Singleton-Klasse für Volley erstellt? –

+0

Boolean Sache ist richtig, Sie müssen die Singleton-Klasse von Volley fehlen. –

+0

Sie sollten 'POST' anstelle von' GET' verwenden, wie im Folgenden 'JsonObjectRequest request = new JsonObjectRequest (Request.Method.POST, url, obj, neuer Response.Listener () {...' – BNK

Antwort

2

Sie sind nichtPOST Anfrage zu machen. Sie sollten wie folgt tun:

JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, 
     new JSONObject(jsonParams), 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       // Handle response 
      } 
     }, 
     new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // Handle Error 
      } 
     }) { 
    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     return headers; 
    } 
}; 
AppController.getInstance().addToRequestQueue(req); // AppController is Volley Singleton. 

Sie CardAdapter verwendet haben, ich weiß nicht, was das ist. Sie sollten das Anforderungsobjekt immer zu Volley Singleton hinzufügen. Reference.

+0

Was soll ich anstelle von "content-type" und "application/json; charset = utf-8 "? @RohitArya –

+0

Da Sie eine Json-Objekt-Anfrage machen, sollten Sie das gleiche verwenden. Aber es hängt vollständig von Ihrer Backend-Implementierung ab. –