当前位置: 首页 > 知识库问答 >
问题:

我在尝试从 JSON 获取数据时收到此错误

曹镜
2023-03-14
package com.joshbradley.pokemonapp.activities;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

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

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.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.joshbradley.pokemonapp.R;
import com.joshbradley.pokemonapp.adapters.Adapter;
import com.joshbradley.pokemonapp.helperclass.HelperClass;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class HomeScreen extends AppCompatActivity {

//VARIABLES

    RecyclerView recyclerView;
    List<HelperClass> helperClasses;
    Adapter adapter;

    private static String JSON_URL_TEST = "https://pokeapi.co/api/v2/pokemon?limit=151";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_screen);

//回收器和视图

    recyclerView = findViewById(R.id.home_screen_recycler);
    helperClasses = new ArrayList<>();

//调用提取数据方法extractData();

}

//提取数据

private void extractData() {

    RequestQueue queue = Volley.newRequestQueue(this);
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, "https://pokeapi.co/api/v2/pokemon?limit=151", null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            for (int i = 0; i < response.length(); i++){
                try {
                    JSONObject jsonObject = response.getJSONObject(i);

                    HelperClass helperClass = new HelperClass();

                    helperClass.setName(jsonObject.getString("name"));
                    helperClass.setImageUrl(jsonObject.getString("url"));
                    helperClasses.add(helperClass);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
//ADAPTER AND LAYOUT MANAGER

                recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
                adapter = new Adapter(getApplicationContext(), helperClasses);
                recyclerView.setAdapter(adapter);
            }

// ERROR RESPONSE 

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        queue.add(jsonArrayRequest);


    }


}
// MY ERROR
com.android.volley.ParseError: org.json.JSONException: Value {"count":1154,"next":"https:\/\/pokeapi.co\/api\/v2\/pokemon?offset=151&limit=151","previous":null,"results":[{"name":"bulbasaur","url":"https:\/\/pokeapi.co\/api\/v2\/pokemon\/1\/"},{"name":"ivysaur","url":"https:\/\/pokeapi.co\/api\/v2\/pokemon\/2\/"},{"name":"venusaur","url":"https:\/\/pokeapi.co\/api\/v2\/pokemon\/3\/"},

共有1个答案

谭吉星
2023-03-14

在 ExtractData() 方法中,您有以下内容,这意味着您希望服务响应是 JSON 数组

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, ...

如果查看Exception的主体,您将看到服务正在返回一个对象(其中包含一个数组)。

{ "count":1154
, "next":"https:\/\/pokeapi.co\/api\/v2\/pokemon?offset=151&limit=151"
, "previous":null
, "results":[ ... some array of values]
  ... you cut it off so there may be more fields ... 
}

因此,看起来您应该接受一个JSONObject,然后提取与< code>results键相关联的值。我不确定语法,但可能是这样的...

JsonObjectRequest request = new JsonObjectRequest(...
    @Override
    public void onResponse(JSONObject response) {
        JSONArray results = response.getJSONArray("results");
        ....
 类似资料:
  • 启动层java初始化期间发生错误。朗,模块。FindException:无法识别模块格式:C:\Users\pinto\Downloads\fontawesome-free-6.1.1-desktop。邮政编码 这是我的导入和悬停错误。

  • 尝试从本地文件获取 json 数据并继续获取 “JSON.parse:数据意外结束在第 1 行第 1 列” 。 我已经尝试了fetch函数的许多参数,但是我总是得到至少一个错误。 JSON数据 我想安慰你。记录数据以确保其正常运行。

  • 我正在建立一个阳光应用从Udacity课程。在第2课中,我尝试将应用程序连接到OpenWeatherMap.org站点上的云,以获取城市的天气数据。首先,基本查询起作用,即URL URL=新URL(“http://api.openweathermap.org/data/2.5/forecast?id=524901&appid=c21566b1153f87e9f1d256b962cd6d42”);但

  • (venv)C:\ Users \ Jay MOH \ PycharmProjects \ Elisanta -Command“C:\ Users \ Jaymoh \ PycharmProjects \ Elisanta \ venv \ Scripts \ python . exe-u-C”导入setuptools,tokenizefile = ' C:\ Users \ Jay MOH \

  • 我已经创建了一个简单的Spring Web MVC应用程序,该应用程序从酒店API获取json Web响应,但是当我尝试从根节点使用findPath()方法时,我收到错误。我正在使用Jackson Library进行json解析。代码如下: 第3行产生错误。 这是我的网络回复: 错误消息: HTTP 状态 500 - 处理程序处理失败;nested exception is java.lang.N

  • 我试图通过Java+sparkSession从Cassandra表读取数据,方法应该将其作为JSON返回。 这是我的数据库: HTTP状态500-org.glassfish.jersey.server.ContainerException:org.apache.spark.sql.AnalysisException:无法解析给定的输入列[value]; 类型异常报告 消息org.glassfish