无法使用 Volley 连接到 API
Cannot connect to the API using Volley
我正在尝试使用 volley 从 API 获得 JSON 请求,但它似乎没有用。我确实尝试了另一个虚拟 API 并且它有效但不适用于这个。我目前使用的那个有 headers 键和值。另外,在邮递员上检查 API 时,我看到 JSON 格式以“[”开头,所以我不确定 JSONObject 应该放什么。另外,我不确定我添加的 header 是否正确。我是 android 的新手,如果有人能帮助我,我将不胜感激。
public class MainActivity 扩展 AppCompatActivity {
private RecyclerView mRecyclerView;
private ExampleAdapter mExampleAdapter;
private ArrayList<ExampleItem> mExampleList;
private RequestQueue mRequestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mExampleList = new ArrayList<>();
mRequestQueue = Volley.newRequestQueue(this);
parseJSON();
}
私有无效解析JSON() {
字符串 url = "http://apidev.travelhouse.world/api/v1/packages";
JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i = 0; i < response.length(); i++) {
JSONObject hit = response.getJSONObject(i);
String creatorName = hit.getString("holiday_name");
String imageUrl = hit.getString("primary_image");
String likeCount = hit.getString("package_price");
mExampleList.add(new ExampleItem(imageUrl, creatorName, likeCount));
}
mExampleAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
mRecyclerView.setAdapter(mExampleAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(MainActivity.this, "Failed to connect", Toast.LENGTH_LONG).show();
}
}) {
/** Passing some request headers* */
@Override
public Map getHeaders() throws AuthFailureError {
HashMap headers = new HashMap();
headers.put("Content-Type", "application/json");
headers.put("X-API-KEY", "CODEX@123");
return headers;
}
};
mRequestQueue.add(request);
}
将您的 JsonObjectRequest
替换为:
JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.length(); i++) {....}
}
}
我正在尝试使用 volley 从 API 获得 JSON 请求,但它似乎没有用。我确实尝试了另一个虚拟 API 并且它有效但不适用于这个。我目前使用的那个有 headers 键和值。另外,在邮递员上检查 API 时,我看到 JSON 格式以“[”开头,所以我不确定 JSONObject 应该放什么。另外,我不确定我添加的 header 是否正确。我是 android 的新手,如果有人能帮助我,我将不胜感激。
public class MainActivity 扩展 AppCompatActivity {
private RecyclerView mRecyclerView;
private ExampleAdapter mExampleAdapter;
private ArrayList<ExampleItem> mExampleList;
private RequestQueue mRequestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mExampleList = new ArrayList<>();
mRequestQueue = Volley.newRequestQueue(this);
parseJSON();
}
私有无效解析JSON() { 字符串 url = "http://apidev.travelhouse.world/api/v1/packages";
JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i = 0; i < response.length(); i++) {
JSONObject hit = response.getJSONObject(i);
String creatorName = hit.getString("holiday_name");
String imageUrl = hit.getString("primary_image");
String likeCount = hit.getString("package_price");
mExampleList.add(new ExampleItem(imageUrl, creatorName, likeCount));
}
mExampleAdapter = new ExampleAdapter(MainActivity.this, mExampleList);
mRecyclerView.setAdapter(mExampleAdapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(MainActivity.this, "Failed to connect", Toast.LENGTH_LONG).show();
}
}) {
/** Passing some request headers* */
@Override
public Map getHeaders() throws AuthFailureError {
HashMap headers = new HashMap();
headers.put("Content-Type", "application/json");
headers.put("X-API-KEY", "CODEX@123");
return headers;
}
};
mRequestQueue.add(request);
}
将您的 JsonObjectRequest
替换为:
JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
for (int i = 0; i < jsonArray.length(); i++) {....}
}
}