I want to parse two view in one recyclerview but i get the issue while parsing json data, while parsing i am confused about how to parse tow bean class using parent bean class. my code is below MainFragment.
public class SensorFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private final String TAG = "MainActivity";
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private SensorAdapter adapter;
private OnFragmentInteractionListener mListener;
List<SensorResposne> sensorResposnes;
List<TemperatorSensorList> temperatorSensorLists;
public SensorFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment SensorFragment.
*/
// TODO: Rename and change types and number of parameters
public static SensorFragment newInstance(String param1, String param2) {
SensorFragment fragment = new SensorFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_fragment_three, container, false);
View view = inflater.inflate(R.layout.fragment_sensor, container, false);
recyclerView = view.findViewById(R.id.recyclerViewSensor);
// recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this));
temperatorSensorLists = new ArrayList<>();
sensorResposnes = new ArrayList<SensorResposne>();
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapter = new SensorAdapter(getActivity(), sensorResposnes, true, true);
recyclerView.setAdapter(adapter);
requestJsonObject();
return view;
}
private void requestJsonObject() {
RequestQueue queue = Volley.newRequestQueue(getActivity());
String potentialId = SitesUtil.getInstance().getSelectedPotentialId();
String sensorUrl = UrlUtility.getSensorUrl(potentialId);
StringRequest stringRequest = new StringRequest(Request.Method.GET, sensorUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Response " + response);
Gson gson = new Gson();
SensorResposne sensorResposne = gson.fromJson(response, SensorResposne.class);
for (SensorList data : sensorResposne.getSensorList()) {
if (data != null) {
data.getName();
data.getStatus();
sensorResposnes.add(data);
}
}
for (TemperatorSensorList data : sensorResposne.getTemperatorSensorList()) {
if (data != null) {
data.getSensorName();
// data.getTemperatureValue();
temperatorSensorLists.add(data);
}
}
adapter = new SensorAdapter(getActivity(), sensorResposnes, true, true);
recyclerView.setAdapter(adapter);
Log.d("recycleviewResposne:", "resposne");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error " + error.getMessage());
}
});
queue.add(stringRequest);
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}}
And Adpater for parsing Json Data:
public class SensorAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private boolean isHeader;
private boolean isFooter;
private List<SensorResposne> data;
private Context context;
public static final int VIEW_HEADER = 0;
public static final int VIEW_FOOTER = 2;
public static final int VIEW_ITEM = 1;
public SensorAdapter(Context context, List<SensorResposne> data, boolean isHeader, boolean isFooter) {
this.context = context;
this.data = data;
this.isHeader = isHeader;
this.isFooter = isFooter;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_HEADER) {
return new RecyclerViewHolders(LayoutInflater.from(context).inflate(R.layout.sensor_layout, parent, false));
} else {
return new Temperature(LayoutInflater.from(context).inflate(R.layout.temperature_list, parent, false));
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof RecyclerViewHolders) {
((RecyclerViewHolders) holder).textSensor.setText(data.get(position).getSensorList().get(position).getName());
if (data.get(position).getSensorList().get(position).getStatus().equals("OK")) {
((RecyclerViewHolders) holder).mImageConnected.setImageResource(R.drawable.ic_connection_stauts);
} else {
((RecyclerViewHolders) holder).mImageConnected.setImageResource(R.drawable.ic_notconnetced);
}
/* ((RecyclerViewHolders) holder).textSensor.setText(data.get(position).getName());
if (data.get(position).getStatus().equals("OK"))
{
((RecyclerViewHolders)holder). mImageConnected.setImageResource(R.drawable.ic_connection_stauts);
}else
{
((RecyclerViewHolders)holder). mImageConnected.setImageResource(R.drawable.ic_notconnetced);
}*/
Log.d("Item View", "Binding Item header at" + position);
} else if (holder instanceof Temperature) {
((Temperature) holder).tvTemrature.setText(data.get(position).getTemperatorSensorList().get(position).getSensorName());
}
}
// to Check the number of item
@Override
public int getItemCount() {
int itemCount = data.size();
//if header is required then increase the number of count by one
if (isHeader) {
itemCount = itemCount + 1;
}
if (isFooter) {
itemCount = itemCount + 1;
}
return itemCount;
}
public SensorResposne getName(int position) {
if (isHeader) {
return data.get(position - 1);
} else return data.get(position);
}
@Override
public int getItemViewType(int position) {
if (isHeader && isHeader(position))
return VIEW_HEADER;
else if (isFooter && isFooter(position)) {
return VIEW_FOOTER;
} else return VIEW_ITEM;
}
private boolean isFooter(int position) {
return position == getItemCount() - 1;
}
private boolean isHeader(int position) {
//Check the position of item if item at position 0 then return true else false
return position == 0;
}
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textSensor;
ImageView mImageConnected;
public RecyclerViewHolders(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
textSensor = (TextView) itemView.findViewById(R.id.textSensor);
mImageConnected = itemView.findViewById(R.id.imageConnect);
}
@Override
public void onClick(View view) {
}
}
public class Temperature extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView tvTemrature, tvValue;
public Temperature(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
tvTemrature = itemView.findViewById(R.id.sensorName);
tvValue = itemView.findViewById(R.id.tvTempValue);
}
@Override
public void onClick(View v)
{
}
}
}
I have parent class called sensor resposne based on that class i want to parse tow baen class getter and setter method but am coufused on that my parent bean class is:
public class SensorResposne {
@SerializedName("sensorList")
@Expose
private List<SensorList> sensorList = null;
@SerializedName("temperatorSensorList")
@Expose
private List<TemperatorSensorList> temperatorSensorList = null;
public List<SensorList> getSensorList() {
return sensorList;
}
public void setSensorList(List<SensorList> sensorList) {
this.sensorList = sensorList;
}
public List<TemperatorSensorList> getTemperatorSensorList() {
return temperatorSensorList;
}
public void setTemperatorSensorList(List<TemperatorSensorList> temperatorSensorList) {
this.temperatorSensorList = temperatorSensorList;
}}
Am not able to figure out how to parse these tow beans class in single adapter using for multiple view in recyclerview any help