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

Android Studiojson数组响应

郎聪
2023-03-14

我一直试图通过openweathermaps从API获得json响应,但我似乎无法让它与volley或Reformation一起工作,我将发布volley和Reformation函数,以及我在这两个函数和json消息本身上得到的错误

这是我试图捕获的json响应http://samples.openweathermap.org/data/2.5/find?lat=55.5

这是截取代码“令人惊讶的是,我确实得到了我正在寻找的json的响应,但我在截取错误消息上得到了它”

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

    // Initialize a new JsonArrayRequest instance
    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
            Request.Method.GET,
            mJSONURLString,
            null,
            new Response.Listener<JSONArray>(){
                @Override
                public void onResponse(JSONArray response) {
                    textView.setText(response.toString());
                    try{
                        for(int i=0;i<response.length();i++){

                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener(){
                @Override
                public void onErrorResponse(VolleyError error){
                    // this is where i get my json "how?"
                    System.out.println(error);
                }
            }
    );
    requestQueue.add(jsonArrayRequest);

这是一个完全不同的项目的改造代码“我正在测试两个atm”

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    CitiesArrayAPI service = retrofit.create(CitiesArrayAPI.class);
    Call<List<Cities>> call = service.loadCitiesFromAPI();
    call.enqueue(new Callback<List<Cities>>() {
        @Override
        public void onResponse(Response<List<Cities>> response, Retrofit retrofit) {
            System.out.println("test");
            try {
                List<Cities> cities = response.body();
                for (int i = 0; i < cities.size(); i++) {

                }
            } catch (Exception e) {
                Log.d("onResponse", "There is an error");
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(Throwable t) {
            Log.d("onFailure", t.toString());
        }
    });

这是arrayapi的改装界面

public interface CitiesArrayAPI {
@GET("data/2.5/find?lat=55.5&lon=37.5&cnt=5&appid=b6907d289e10d714a6e88b30761fae22")
Call<List<Cities>> loadCitiesFromAPI();

}

这是我从改装中得到的错误,适用于onFailure方法

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

共有2个答案

郁权
2023-03-14

您要解析的json肯定不是List

下面是根对象的外观

public class YouRootObject {

    @SerializedName("message")
    private String message;
    @SerializedName("cod")
    private String cod;
    @SerializedName("count")
    private Integer count;
    @SerializedName("list")
    private List<City> cities;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getCod() {
        return cod;
    }

    public void setCod(String cod) {
        this.cod = cod;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public List<City> getList() {
        return cities;
    }

    public void setList(List<City> cities) {
        this.cities = cities;
    }
}

而不是

i、 e.呼叫

柴瀚
2023-03-14

问题是,您希望返回一个对象的列表,所以请将改装接口更改为返回对象而不是列表

public interface CitiesArrayAPI {
@GET("data/2.5/find?lat=55.5&lon=37.5&cnt=5&appid=b6907d289e10d714a6e88b30761fae22")
Call<Cities> loadCitiesFromAPI();
}

添加一个名为Coord的类

public class Coord {

@Expose
@SerializedName("lat")
private double lat;

@Expose
@SerializedName("lng")
private double lng;

private double getLat(){
    return lat;
}
 private double getLng(){
    return lng;
}
}

创建对象城市,它有一个coord对象

public class City {

@Expose
@SerializedName("coord")
private Coord coord;

private Coord getCoord(){
    return coord;
}
}

和类城市,这是一个列表,这个对象是在改造接口中调用的

public class Cities {

@SerializedName("cities")
private List<City> cities;
}

然后在回应中你可以打电话

response.body.getCoord().getlat();
 类似资料:
  • 来自API的Im有两个不同的响应。然后我判断对象,但是我如何将消息的内容返回到字符串呢?下面的示例返回Exception: Json响应: Json响应: 模型:

  • 我正在尝试更新具有父状态的道具的子组件。当用将父级的状态更改为my knowlage时,chlid应该重新执行。但是,当child位于数组中时,rerender不会Occure。我怎么才能修好?提前谢了。 我的app功能:

  • 我有一个控制器endpoint,返回字符串列表。我有代码在我的转换层,取代了这个页面的字符串。(Page是我写过的一个类。)我如何告诉Spring医生来处理这个。默认情况下,springdoc将响应声明为字符串的JSON数组。 我可以让它替换我的回答中的字段列表,如下所示: 但我不想让它那样做。事实上,页面有一个列表字段,因此它会变成一个页面字段,而页面字段本身也有一个页面字段,依此类推。 使用s

  • 问题内容: 是否可以在PHP中处理来自AJAX请求的响应?我不是一个真正的JS开发人员,所以我正在用这个开发人员。 我有点黑了: }); 该功能似乎可以正常运行,它会向我发出有关正确数据的警报。 我需要能够将此输出给用户,以便可读。我发现很多指南都描述了替换数据,但就目前而言,直到选择child_id之前,没有数据。.然后我希望它以可读的方式显示上述数据。 我不知道如何开始使用视图文件(php)中

  • 我可以很容易地得到消息,但我不能从响应中得到“他”数组。 下面是我的数据模型类 这就是我向服务器发送请求的方式:

  • 我用php帖子获取电报群的用户数 响应是数组: 我如何访问我尝试的结果值 echo $data 1[19];这只给指数位置值谢谢