安卓:排球HTTP请求自定义标题自定义、排球、标题、HTTP

2023-09-12 02:22:41 作者:爷丶有爷的范°

我收到以下错误,当我运行的应用程序: BasicNetwork.performRequest:意外的响应code 401

我需要通过电子邮件,密码和令牌访问的URL,但它不工作

我开始学习android的最后一周,我不知道很多

 包quest.testvolley;

进口com.android.volley.AuthFailureError;
进口com.android.volley.VolleyLog;
进口com.kpbird.volleytest.R;

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

进口的java.net.URL;
进口的java.util.ArrayList;
进口的java.util.HashMap;
进口的java.util.Map;

公共类MainActivity延伸活动{

    私人字符串变量= this.getClass()getSimpleName()。
    私人的ListView lstView;
    私人请求队列mRequestQueue;
    私人的ArrayList< NewsModel> arrNews;
    私人LayoutInflater LF;
    私人VolleyAdapter VA;
    私人ProgressDialog PD;

    @覆盖
    保护无效的onCreate(包savedInstanceState){

        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        LF = LayoutInflater.from(本);

        arrNews =新的ArrayList< NewsModel>();
        VA =新VolleyAdapter();

        lstView =(ListView控件)findViewById(R.id.listView);
        lstView.setAdapter(VA);
        mRequestQueue = Volley.newRequestQueue(本);
        字符串URL = "http://192.168.1.18/repr/api/clientes/Y2FtcG9zKGlkLG5vbWUsc3RhdHVzKTppnaW1pdCgxMCk6b2Zmc2V0KDApOm9yZGVtKG5vbWVbYXNjXSk=";
        PD = ProgressDialog.show(这一点,请等待......,请稍候...);
        尝试{

            视频下载(2000);
        }赶上(例外五){}

        JsonObjectRequest jsonObjReq =新JsonObjectRequest(Request.Method.POST,网址,空,新Response.Listener<的JSONObject>(){

            @覆盖
            公共无效onResponse(JSONObject的响应){

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

            @覆盖
            公共无效onErrorResponse(VolleyError错误){

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

            @覆盖
            保护地图<字符串,字符串> getParams()方法{

                地图<字符串,字符串> PARAMS =新的HashMap<字符串,字符串>();
                params.put(电子邮件,rm@test.com.br);
                params.put(senha,测试);
                params.put(X-API-TOKEN,99KI9Gj68CgCf70deM22Ka64chef2C40Gm2lFJ2J0G9JkD0afd19MfacGf3FFm8CM1hG0eDiIk8);

                返回PARAMS;
            }
        };

        mRequestQueue.add(jsonObjReq);
    }
 

解决方案

在 JsonObjectRequest 延长JsonRequest其覆盖 getBody()方法直接,让您的 getParam()永远不会调用,我建议你延长 StringRequest 而不是的JsonObjectRequest。

您可以检查这回答的更多细节。

顺便说一句,你另一种选择: Netroid ,即基于排球,都提供了更多的功能

javaWeb http 请求,http 响应

I'm getting the following error when I run the app: BasicNetwork.performRequest: Unexpected response code 401

I need to pass an email, a password and a token to access the URL, but it's not working

I started learn android last week, I don't know much

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

解决方案

The JsonObjectRequest is extended JsonRequest which override getBody() method directly, so your getParam() would never invoke, I recommend you extend StringRequest instead of JsonObjectRequest.

your can check this answer for more details.

by the way, you've another choice : Netroid, that based Volley, offered more features at all.