6

Tôi nhận được lỗi sau khi tôi chạy ứng dụng: BasicNetwork.performRequest: mã phản hồi bất ngờ 401Android: Volley HTTP Request tùy chỉnh tiêu đề

tôi cần phải vượt qua một email, mật khẩu và một mã thông báo truy cập URL, nhưng nó không làm việc

tôi bắt đầu học android tuần trước, tôi không biết nhiều

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

Trả lời

14

Các JsonObjectRequest được mở rộng JsonRequest đó ghi đè getBody() phương pháp trực tiếp, vì vậy bạn getParam() sẽ không bao giờ gọi, tôi khuyên bạn nên mở rộng StringRequest thay vì JsonObjectRequest .

bạn có thể kiểm tra this câu trả lời để biết thêm chi tiết.

nhân tiện, bạn có một lựa chọn khác: Netroid, dựa trên Volley, cung cấp nhiều tính năng hơn.

+0

cùng PRM đối với tôi cũng vậy, nhưng tôi phải muốn gửi các đối tượng JSON đến máy chủ. vì vậy làm thế nào tôi có thể giải quyết vấn đề này ?? – John

1

Nếu bạn muốn gửi đồ của bạn như là một đối tượng JSON (bạn đang sử dụng lớp JsonObjectRequest) , bạn nên đặt nó trong JsonobjectRequ est constructor:

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

Xem this tuto

+2

vẫn không làm việc – AND4011002849

0

này làm việc cho tôi (nhìn thấy trên 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); 
Các vấn đề liên quan