简体   繁体   English

不会在获取的JSON的卡片视图/回收者视图中显示

[英]Won't display in card view/recycler view of of fetched JSON

I've been trying to display the JSON data fetched from an API backend in the RecyclerView though can't seem to display it there's no error the just wont appear though backend notified that the operation has been successful 我一直试图在RecyclerView中显示从API后端获取的JSON数据,虽然似乎无法显示它,但没有错误,尽管后端通知该操作已成功,但不会出现

MapAndList.java MapAndList.java

        private void loadJSON() {
            Log.d("sample","Help");
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(Constants.BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            RequestInterfaceList request = retrofit.create(RequestInterfaceList.class);
            Call<JSONResponse> call = request.getJSON();
            call.enqueue(new Callback<JSONResponse>() {
                @Override
                public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                    Log.d("sample","success to");
                    JSONResponse jsonResponse = response.body();
                    mArrayList = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                    mAdapter = new DataAdapter(mArrayList);
                    mRecyclerView.setAdapter(mAdapter);
                }

                @Override
                public void onFailure(Call<JSONResponse> call, Throwable t) {
                    Log.d("sample","failure");
                    Log.d("Error", t.getMessage());
                }
            });

        }

LocationData.java LocationData.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

/**
 * Created by knightdev on 5/24/17.
 */
public class LocationData {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("zip")
    @Expose
    private String zip;
    @SerializedName("latitude")
    @Expose
    private Double latitude;
    @SerializedName("longitude")
    @Expose
    private Double longitude;
    @SerializedName("device")
    @Expose
    private Device device;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public Double getLatitude() {
        return latitude;
    }

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return longitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    public Device getDevice() {
        return device;
    }

    public void setDevice(Device device) {
        this.device = device;
    }
}

Level.java Level.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Level {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("device_id")
    @Expose
    private Integer deviceId;
    @SerializedName("height")
    @Expose
    private Integer height;
    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("notify")
    @Expose
    private Boolean notify;
    @SerializedName("created_at")
    @Expose
    private String createdAt;
    @SerializedName("updated_at")
    @Expose
    private String updatedAt;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getDeviceId() {
        return deviceId;
    }

    public void setDeviceId(Integer deviceId) {
        this.deviceId = deviceId;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Boolean getNotify() {
        return notify;
    }

    public void setNotify(Boolean notify) {
        this.notify = notify;
    }

    public String getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(String createdAt) {
        this.createdAt = createdAt;
    }

    public String getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(String updatedAt) {
        this.updatedAt = updatedAt;
    }

}

Device.java Device.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Device {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("level")
    @Expose
    private Level level;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Level getLevel() {
        return level;
    }

    public void setLevel(Level level) {
        this.level = level;
    }

}

JSONResponse.java JSONResponse.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

/**
 * Created by knightdev on 5/24/17.
 */

public class JSONResponse {
    private LocationData[] android;

    public LocationData[] getAndroid() {
        return android;
    }
}

RequestInterfaceList.java RequestInterfaceList.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;

/**
 * Created by knightdev on 5/24/17.
 */

public interface RequestInterfaceList {

    @GET("api/water_level")
    Call<JSONResponse> getJSON();

}

DataAdapter.java DataAdapter.java

package com.floodwatchv1.knightdev.floodwatchv1.Retrofit;

/**
 * Created by knightdev on 5/24/17.
 */

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

import com.floodwatchv1.knightdev.floodwatchv1.R;

import java.util.ArrayList;

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> implements Filterable{
    private ArrayList<LocationData> mArrayList;
    private ArrayList<LocationData> mFilteredList;

    public DataAdapter(ArrayList<LocationData> arrayList) {
        mArrayList = arrayList;
        mFilteredList = arrayList;
    }

    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {
        viewHolder.tv_name.setText(mFilteredList.get(i).getName());
        viewHolder.tv_version.setText(mFilteredList.get(i).getLatitude().toString());
        viewHolder.tv_api_level.setText(mFilteredList.get(i).getLongitude().toString());
    }

    @Override
    public int getItemCount() {
        return mFilteredList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView tv_name,tv_version,tv_api_level;
        public ViewHolder(View view) {
            super(view);

            tv_name = (TextView)view.findViewById(R.id.tv_name);
            tv_version = (TextView)view.findViewById(R.id.tv_version);
            tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

        }
    }

    @Override
    public Filter getFilter() {

        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {

                String charString = charSequence.toString();

                if (charString.isEmpty()) {

                    mFilteredList = mArrayList;
                } else {

                    ArrayList<LocationData> filteredList = new ArrayList<>();

                    for (LocationData androidVersion : mArrayList) {

                        if (androidVersion.getName().toLowerCase().contains(charString) || androidVersion.getLongitude().toString().contains(charString) || androidVersion.getLatitude().toString().toLowerCase().contains(charString)) {

                            filteredList.add(androidVersion);
                        }
                    }

                    mFilteredList = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = mFilteredList;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                mFilteredList = (ArrayList<LocationData>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

}

And the return JSON is structured like this: 返回JSON的结构如下:

[
 {
   "id": 1,
   "name": "Parang, Marikina",
   "zip": "1900",
   "latitude": 14.66,
   "longitude": 121.113,
   "device": {
     "id": 1,
     "name": "ARD_0001",
     "level": {
       "id": 1,
       "device_id": 1,
       "height": 5,
       "status": "MONITOR",
       "notify": true,
       "created_at": "2017-05-24T08:01:08.000Z",
       "updated_at": "2017-05-24T08:01:08.000Z"
     }
   }
 },
 {
   "id": 2,
   "name": "Fortune, Marikina",
   "zip": "1901",
   "latitude": 14.6589,
   "longitude": 121.128,
   "device": {
     "id": 2,
     "name": "ARD_0002",
     "level": {
       "id": 2,
       "device_id": 2,
       "height": 21,
       "status": "EVACUATE",
       "notify": true,
       "created_at": "2017-05-26T03:16:49.000Z",
       "updated_at": "2017-06-07T03:30:07.000Z"
     }
   }
 },
 {
   "id": 3,
   "name": "San Jose del Monte, Bulacan",
   "zip": "",
   "latitude": 14.8206,
   "longitude": 121.102,
   "device": {
     "id": 3,
     "name": "ARD_0003",
     "level": {
       "id": 3,
       "device_id": 3,
       "height": 16.3,
       "status": "EVACUATE",
       "notify": true,
       "created_at": "2017-06-02T04:46:35.000Z",
       "updated_at": "2017-06-02T05:10:38.000Z"
     }
   }
 },
 {
   "id": 4,
   "name": "Mambugan, Antipolo",
   "zip": "",
   "latitude": 14.6176,
   "longitude": 121.138,
   "device": {
     "id": 4,
     "name": "ARD_0004",
     "level": {
       "id": 4,
       "device_id": 4,
       "height": 16.3,
       "status": "EVACUATE",
       "notify": true,
       "created_at": "2017-06-05T02:16:53.000Z",
       "updated_at": "2017-06-05T02:16:53.000Z"
     }
   }
 },
 {
   "id": 5,
   "name": "Malolos,Bulacan",
   "zip": "",
   "latitude": 14.8527,
   "longitude": 120.816,
   "device": {
     "id": 5,
     "name": "ARD_0005",
     "level": {
       "id": 5,
       "device_id": 5,
       "height": 15,
       "status": "EVACUATE",
       "notify": true,
       "created_at": "2017-06-06T06:35:27.000Z",
       "updated_at": "2017-06-07T03:29:47.000Z"
     }
   }
 }
]

最好在loadJSON()本身中过滤arraylist,然后将数据设置为适配器,而不是在适配器中进行过滤。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM