java - 如何在volley中传递header api key

标签 java json api android-volley api-key

我是 android 和 volley 新手 我对 JSON 路径感到困惑 花了很多时间调试这段代码,但遗憾的是找不到错误,有人可以帮我找到这段代码中的问题吗?我无法在 Activity 页面上看到数据

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.android.volley.AuthFailureError;
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.JSONException;
import org.json.JSONObject;

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

public class dailyshop extends AppCompatActivity {
    private RecyclerView mRecycler;
    private cardAdapter mCardAdapter;
    private ArrayList<carditem> mCardList;
    private RequestQueue mRequestQueue;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dailyshop);

        mRecycler = findViewById(R.id.recycler_view);
        mRecycler.setHasFixedSize(true);
        mRecycler.setLayoutManager(new LinearLayoutManager(this));

        mCardList = new ArrayList<>();

        mRequestQueue = Volley.newRequestQueue(this);
        parseJSON();
    }

    private void parseJSON(){
        String url = "https://fortnite-api.theapinetwork.com/store/get";
        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,

                new Response.Listener<JSONObject>()
                {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("data");
                            for (int i = 0; i < jsonArray.length(); i++){
                                JSONObject jsonObject = jsonArray.getJSONObject(i);

                                String itemName = jsonObject.getString("name");
                                String imageUrl = jsonObject.getString("background");
                                int vCount = jsonObject.getInt("cost");

                                mCardList.add(new carditem(imageUrl,itemName,vCount));
                            }

                            mCardAdapter = new cardAdapter(dailyshop.this, mCardList);
                            mRecycler.setAdapter(mCardAdapter);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                }
        ){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String>  params = new HashMap<String, String>();
                params.put("Authorization", "mycode");
                return params;
            }
        };
        mRequestQueue.add(request);
    }
}

我尝试在同一个 JSON 子项中使用没有 key 的自定义 API,并且它有效

api json 文件

{
   "lastUpdate":1563408000,
   "language":"en",
   "data":[
      {
         "itemId":"0ac5766-6f9355e-6575a4e-abaef79",
         "lastUpdate":1563408000,
         "store":{
            "isFeatured":false,
            "isRefundable":true,
            "cost":"500",
            "occurrences":1,
            "isNew":true
         },
         "item":{
            "name":"Glitter",
            "description":"",
            "type":"emote",
            "rarity":"rare",
            "costmeticId":null,
            "images":{
               "icon":"https://fortnite-public-files.theapinetwork.com/emote/a7eb82676b96bc1ff2129ee739d70d4a.png",
               "featured":null,
               "background":"https://fortnite-public-files.theapinetwork.com/image/0ac5766-6f9355e-6575a4e-abaef79.png",
               "information":"https://fortnite-public-files.theapinetwork.com/image/0ac5766-6f9355e-6575a4e-abaef79/item.png"
            },
            "backpack":{

            },
            "obtained_type":"vbucks",
            "ratings":{
               "avgStars":4.18,
               "totalPoints":614,
               "numberVotes":147
            }
         }
      },
      {
         "itemId":"d2e8284-fb06feb-ea3fbe3-c41fd8b",
         "lastUpdate":1563408000,
         "store":{
            "isFeatured":false,
            "isRefundable":true,
            "cost":"800",
            "occurrences":3,
            "isNew":false
         },
         "item":{
            "name":"Star Wand",
            "description":null,
            "type":"pickaxe",
            "rarity":"rare",
            "costmeticId":null,
            "images":{
               "icon":"https://fortnite-public-files.theapinetwork.com/pickaxe/e0907bc2a6058035c5bf96820da6c21f.png",
               "featured":null,
               "background":"https://fortnite-public-files.theapinetwork.com/image/d2e8284-fb06feb-ea3fbe3-c41fd8b.png",
               "information":"https://fortnite-public-files.theapinetwork.com/image/d2e8284-fb06feb-ea3fbe3-c41fd8b/item.png"
            },
            "backpack":{

            },
            "obtained_type":"vbucks",
            "ratings":{
               "avgStars":4.07,
               "totalPoints":789,
               "numberVotes":194
            }
         }
      },
      {
         "itemId":"eb00ead-bb56b45-05e52f8-2398d3a",
         "lastUpdate":1563408000,
         "store":{
            "isFeatured":false,
            "isRefundable":true,
            "cost":"300",
            "occurrences":1,
            "isNew":true
         },
         "item":{
            "name":"Scanline",
            "description":"",
            "type":"wrap",
            "rarity":"uncommon",
            "costmeticId":null,
            "images":{
               "icon":"https://fortnite-public-files.theapinetwork.com/wrap/5677d39e97ba5bf8d92e25bc520e7cc0.png",
               "featured":null,
               "background":"https://fortnite-public-files.theapinetwork.com/image/eb00ead-bb56b45-05e52f8-2398d3a.png",
               "information":"https://fortnite-public-files.theapinetwork.com/image/eb00ead-bb56b45-05e52f8-2398d3a/item.png"
            },
            "backpack":{

            },
            "obtained_type":"vbucks",
            "ratings":{
               "avgStars":4.82,
               "totalPoints":164,
               "numberVotes":34
            }
         }
      },
      {
         "itemId":"a784814-93b4ea3-3c26b6f-631fac7",
         "lastUpdate":1563408000,
         "store":{
            "isFeatured":false,
            "isRefundable":true,
            "cost":"500",
            "occurrences":1,
            "isNew":true
         }
      }
   ]
}

我需要有关 JSON 路径的帮助以及我的代码是否有问题

最佳答案

试试这个:

@Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        String credentials = "username" + ":" + "password";
        String base64EncodedCredentials = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
        HashMap<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Basic " + base64EncodedCredentials);
        return headers;
    }

关于java - 如何在volley中传递header api key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57086199/

相关文章:

android - 从 sdcard 读取一个 json 文件返回 - 空指针异常

api - "(#100) Error finding the requested story"像在帖子上一样发布时遇到

bash - 如何从一行中进行grep

java - JMockit - 期望 - 匹配调用包含模拟对象作为参数的方法

java - 将 Java Swing 中的文件树组件替换为另一个文件树组件

Java - 有一个方法可以将私有(private)字段值传递给另一个类的方法吗?

javascript - 带换行符的 JSON.parse

java - ava.lang.ClassCastException : android. support.v7.widget.AppCompatTextView 无法转换为 android.widget.EditText

json - JQ递归树扩展

image - 如何从他们的电子邮件地址获取用户图像