6

ich die folgende Fehlermeldung erhalten, wenn ich die app laufe: BasicNetwork.performRequest: unerwarteter Antwortcode 401Android: Volley HTTP-Request-Header benutzerdefinierte

Ich brauche eine E-Mail zu übergeben, ein Passwort und ein Token Zugang die URL, aber es funktioniert nicht

I android letzte Woche lernen begonnen, ich weiß nicht viel

package quest.testvolley; 

import com.android.volley.AuthFailureError; 
import com.android.volley.VolleyLog; 
import com.kpbird.volleytest.R; 

import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.Volley; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import java.net.URL; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends Activity { 

    private String TAG = this.getClass().getSimpleName(); 
    private ListView lstView; 
    private RequestQueue mRequestQueue; 
    private ArrayList<NewsModel> arrNews ; 
    private LayoutInflater lf; 
    private VolleyAdapter va; 
    private ProgressDialog pd; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lf = LayoutInflater.from(this); 

     arrNews = new ArrayList<NewsModel>(); 
     va = new VolleyAdapter(); 

     lstView = (ListView) findViewById(R.id.listView); 
     lstView.setAdapter(va); 
     mRequestQueue = Volley.newRequestQueue(this); 
     String url = "http://192.168.1.18/repr/api/clientes/Y2FtcG9zKGlkLG5vbWUsc3RhdHVzKTppnaW1pdCgxMCk6b2Zmc2V0KDApOm9yZGVtKG5vbWVbYXNjXSk="; 
     pd = ProgressDialog.show(this,"Please Wait...","Please Wait..."); 
     try{ 

      Thread.sleep(2000); 
     }catch(Exception e){} 

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

      @Override 
      public void onResponse(JSONObject response) { 

       Log.d(TAG, response.toString()); 
       pd.hide(); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 

       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       pd.hide(); 
      } 
     }) { 

      @Override 
      protected Map<String, String> getParams() { 

       Map<String, String> params = new HashMap<String, String>(); 
       params.put("email", "[email protected]"); 
       params.put("senha", "test"); 
       params.put("X-API-TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkD0afd19MfacGf3FFm8CM1hG0eDiIk8"); 

       return params; 
      } 
     }; 

     mRequestQueue.add(jsonObjReq); 
    } 

Antwort

14

Die JsonObjectRequest wird JsonRequest verlängert die Überschreibung getBody() Methode direkt, so dass Ihre getParam() würde nie aufrufen, empfehle ich Ihnen StringRequest statt JsonObjectRequest erweitern .

überprüfen Sie Ihre this Antwort für weitere Details.

Übrigens, Sie haben eine andere Wahl: Netroid, dass basierte Volley, bot mehr Funktionen überhaupt.

+0

gleichen PRM für mich arbeiten, aber ich muss will das JSON-Objekt an den Server senden. Also, wie kann ich dieses Problem lösen? – John

1

Wenn Sie Ihre Karte als JSON-Objekt senden (Sie die Klasse JsonObjectRequest verwenden) , sollten Sie es in den JsonobjectRequ setzen est Konstruktor:

HashMap<String, String> params = new HashMap<String, String>(); 
params.put("email", "[email protected]"); 
params.put("senha", "test"); 
params.put("X-API-TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkD0afd19MfacGf3FFm8CM1hG0eDiIk8"); 

JsonObjectRequest jsonObjReq = new JsonObjectRequest(url, new JSONObject(params), ..., ...); 

Siehe this tuto

+2

noch nicht auch – AND4011002849

0

dieses für mich gearbeitet (gesehen auf Volley JsonObjectRequest Post parameters no longer work)

String url = "https://www.youraddress.com/"; 

Map<String, String> params = new HashMap(); 
params.put("first_param", 1); 
params.put("second_param", 2); 

JSONObject parameters = new JSONObject(params); 

JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, parameters, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     //TODO: handle success 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     error.printStackTrace(); 
     //TODO: handle failure 
    } 
}); 

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