Я начал изучать разработку Android несколько месяцев назад, и в настоящее время я учусь работать с данными JSON.
Несколько дней назад я пытался проанализировать данные JSON и отобразить их в RecyclerView, и это сработало(в целом я следовал нескольким учебникам Youtube), но теперь я хочу сделать то же самое в Fragment, и он не работает.
У меня есть MainActivity, которая в настоящее время ничего не делает, кромеперемещаться по фрагментам.
Приложение работает (я могу ориентироваться), при нажатии на кнопку SensorsFragment (кнопка с данными JSON) появляется более темный серый фон.
Я пытался найтипроблема, но я не вижу, где это.
Это данные, которые я хочу проанализировать: http://www.mocky.io/v2/5cd67f9d300000630060612b
Класс элемента
public class SensorItem {
private String mID;
private String mType;
private int mValue;
public SensorItem(String ID, String Type, int value ){
mID=ID;
mType=Type;
mValue=value;
}
public String getID(){
return mID;
}
public String getType(){
return mType;
}
public int getValue(){
return mValue;
}
}
Адаптер
public class SensorAdapter extends RecyclerView.Adapter<SensorAdapter.SensorViewHolder> {
private Context mContext;
private ArrayList<SensorItem> mSensorList;
private LayoutInflater inflater;
public SensorAdapter(Context context, ArrayList<SensorItem> mSensorList){
inflater = LayoutInflater.from(context);
this.mContext=context;
this.mSensorList=mSensorList;
}
@Override
public SensorViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = inflater.inflate(R.layout.sensor_item, viewGroup, false);
SensorViewHolder holder = new SensorViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(SensorViewHolder holder, int i) {
SensorItem currentItem = mSensorList.get(i);
String sensorID = currentItem.getID();
String sensorType = currentItem.getType();
int sensorValue = currentItem.getValue();
holder.mTextViewID.setText(sensorID);
holder.mTextViewType.setText(sensorType);
holder.mTextViewValue.setText(sensorValue);
}
@Override
public int getItemCount() {
return mSensorList.size();
}
public void clearAdaptor() {
mSensorList.clear();
}
public class SensorViewHolder extends RecyclerView.ViewHolder{
public TextView mTextViewID;
public TextView mTextViewType;
public TextView mTextViewValue;
public SensorViewHolder(View itemView) {
super(itemView);
mTextViewID = itemView.findViewById(R.id.text_view_id);
mTextViewType = itemView.findViewById(R.id.text_view_type);
mTextViewValue = itemView.findViewById(R.id.text_view_value);
}
}
}
и фрагмент
public class SensorsFragment extends Fragment {
private RecyclerView mRyclerView;
private SensorAdapter mSensorAdapter;
private ArrayList<SensorItem> mSensorList = new ArrayList<SensorItem>();
private RequestQueue mRequestQueue;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sensors, container, false);
mRyclerView = view.findViewById(R.id.recycler_view);
mSensorAdapter = new SensorAdapter(getContext(), mSensorList);
mSensorAdapter.clearAdaptor();
mRyclerView.setAdapter(mSensorAdapter);
mRyclerView.setHasFixedSize(true);
mRyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mSensorList = new ArrayList<>();
mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
parseJSON();
return view;
}
private void parseJSON(){
String url = "http://www.mocky.io/v2/5cd67f9d300000630060612b";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("C07-14");
for(int i=0; i < jsonArray.length(); i++){
JSONObject sensor = jsonArray.getJSONObject(i);
String ID = sensor.getString("id");
String type = sensor.getString("type");
int value = sensor.getInt("value");
mSensorList.add(new SensorItem(ID, type, value));
}
mSensorAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mRequestQueue.add(request);
}
}
Кроме того, файлы XML:
фрагмент_sensors.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
/>
</RelativeLayout>
sensor_item.xml
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp"
android:gravity="left"
>
<TextView
android:id="@+id/text_view_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID"
android:textColor="@android:color/black"
android:textSize="20sp"/>
<TextView
android:id="@+id/text_view_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TYPE"
android:textColor="@android:color/black"
android:textSize="20sp"
android:layout_below="@+id/text_view_id"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp"
android:gravity="right"
>
<TextView
android:id="@+id/text_view_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="VALUE"
android:textColor="@android:color/black"
android:textSize="20sp"/>
</RelativeLayout>
</android.support.v7.widget.CardView>