java - 如何在属性中显示json数据

标签 java android listview retrofit2

我尝试将 json 数据放入 listview 属性中,但数据未显示在属性中。数据显示在RUN窗口中。 如何将数据放入属性中?我使用 fragment 来显示 ListView enter image description here

我的主要 fragment :

api = retrofitClient.getClient("http://10.8.0.2:5000/").create(Api.class);
        String encoding = Base64Encoder.encode(UtilsApi.username + ":" + UtilsApi.password);
        Log.d(TAG, "listsensor: "+api.listSensor(UtilsApi.username,UtilsApi.password,"Basic "+encoding));
        api.listSensor(UtilsApi.username, UtilsApi.password, "Basic " + encoding)
                .enqueue(new Callback<List<Sensor>>() {
                    @Override
                    public void onResponse(Call<List<Sensor>> call, Response<List<Sensor>> response) {
                        if (response.isSuccessful()) {
                            try {
                                Toast.makeText(getActivity().getApplicationContext(),"Success",Toast.LENGTH_SHORT).show();      
                                MediaType JSON = MediaType.parse("application/json; charset=utf-8");
                                OkHttpClient client = new OkHttpClient();
                                JSONObject jsonRESULTS = new JSONObject(response.body().toString());

                                sensors = (List<Sensor>) response.body();

                                listView.setAdapter(new SensorListAdapter(getActivity().getApplicationContext(), sensors));
                            }catch (JSONException e){
                                e.printStackTrace();
                            }

                        }else {
                            Toast.makeText(getActivity().getApplicationContext(), "Sensor Failed", Toast.LENGTH_LONG).show();
                        }
                    }
                    @Override
                    public void onFailure(Call<List<Sensor>> call, Throwable t) {
                        Toast.makeText(getActivity().getApplicationContext(), "Sensor Failed", Toast.LENGTH_LONG).show();
                        Log.d(TAG, "INI: " + sensors);
                    }
                });
    }

传感器列表适配器:

private Context context;
    private List<Sensor> sensors;

    public SensorListAdapter(Context context, List<Sensor> sensors){
        super(context, R.layout.list_sensor_item, sensors);
        this.context = context;
        this.sensors = sensors;
    }


    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        convertView = layoutInflater.inflate(R.layout.list_sensor_item,parent,false);
        Sensor sensor = sensors.get(position);

        return convertView;

界面:

@FormUrlEncoded // List Sensor
    @POST("/api/sensors/v1.0/listsensors")
    Call<List<Sensor>> listSensor(
            @Field("username") String username,
            @Field("password") String password,
            @Header("Authorization") String authtoken);

改造客户端

private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl){
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
        if (retrofit==null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
        }
        return retrofit;

最佳答案

根据 Json 结构,List 本身是外部 Json 对象的一部分。假设 SensorsObject,因此使用 SensorsObject 作为响应,List 将是此类的属性。

关于java - 如何在属性中显示json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841944/

相关文章:

android - 当 ListView 行项目中有隐藏 View 时, fragment 不尊重匹配父高度

java - Java 1.8 Collection Api 性能测试结果令人困惑

java - 查找JDK是openJDK还是Oracle JDK

java - 在 RESTful POST 中使用多种方法发送信息是否是一种反模式

java - 自定义 View 无法正确绘制

android - LinearLayout 内的 ListView 不再对 OnclickListener 使用react

Java - 以原子方式处理文件

android - 选择正确的方法在 android 中实现谷歌地图

android - 从 Google Play 中删除内部测试人员

Android:如果 ListView 中没有项目,显示 TextView 的最佳方式是什么?