【问题标题】:Android: Volley HTTP Request custom headerAndroid:Volley HTTP 请求自定义标头
【发布时间】:2014-08-08 17:58:02
【问题描述】:

我在运行应用程序时收到以下错误: BasicNetwork.performRequest:意外响应代码 401

我需要传递电子邮件、密码和令牌才能访问该 URL,但它不起作用

我上周开始学习android,我不太了解

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", "rm@test.com.br");
                params.put("senha", "test");
                params.put("X-API-TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkD0afd19MfacGf3FFm8CM1hG0eDiIk8");

                return params;
            }
        };

        mRequestQueue.add(jsonObjReq);
    }

【问题讨论】:

    标签: android httprequest android-volley digest-authentication


    【解决方案1】:

    JsonObjectRequest 是扩展 JsonRequest 直接覆盖 getBody() 方法,所以你的 getParam() 永远不会调用,我建议你扩展 StringRequest 而不是 JsonObjectRequest。

    您可以查看this 答案了解更多详情。

    顺便说一句,您还有另一个选择:Netroid,它基于 Volley,提供了更多功能。

    【讨论】:

    • 对我来说也是相同的 prm,但我必须要将 JSON 对象发送到服务器。那么我该如何解决这个问题呢??
    【解决方案2】:

    如果您想将 Map 作为 Json 对象发送(您正在使用 JsonObjectRequest 类),则应将其放入 JsonobjectRequest 构造函数中:

    HashMap<String, String> params = new HashMap<String, String>();
    params.put("email", "rm@test.com.br");
    params.put("senha", "test");
    params.put("X-API-TOKEN", "99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkD0afd19MfacGf3FFm8CM1hG0eDiIk8");
    
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(url, new JSONObject(params), ..., ...);
    

    见this tuto

    【讨论】:

      【解决方案3】:

      这个对我有用(见 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);
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2014-04-20
        • 2011-03-04
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多