【发布时间】:2020-07-23 03:42:35
【问题描述】:
我像这段代码一样从 JSON 读取数据到 ArrayList。
MySQLConnect.java
public List<ComputerService> getData(){
String url = URL + GET_URL;
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
showJSON(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(main, error.getMessage().toString(), LENGTH_LONG).show();
}
}
);
RequestQueue requestQueue = Volley.newRequestQueue(main.getApplicationContext());
requestQueue.add(stringRequest);
return computerServicesArrayList;
}
public void showJSON(String response){
String data_mysql = "";
computerServicesArrayList.clear();
try{
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("data");
for(int i=0; i < result.length(); i++){
JSONObject collectData = result.getJSONObject(i);
String id_job = collectData.getString("id_job");
String type_job = collectData.getString("type_job");
String place_more_job = collectData.getString("place_more_job");
computerservice = new ComputerService(id_job, type_job, place_more_job);
computerServicesArrayList.add(computerservice);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
在 MainActitvity 中,我将数据从 MySQLConnect 设置为 Myadapter,如下所示。
private MyAdapter myAdapter;
private MySQLConnect mySQLConnect;
public static List<ComputerService> computerServicesArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtAdd = (EditText)findViewById(R.id.txtAdd);
btnAdd = (Button)findViewById(R.id.btnAdd);
rcyViewData = (RecyclerView)findViewById(R.id.rcyViewData);
mySQLConnect = new MySQLConnect(MainActivity.this);
computerServicesArrayList = mySQLConnect.getData();
mAdapter = new MyAdapter(this, computerServicesArrayList);
}
在我的适配器中,我尝试像这样将数据从 JSON 传输到 RecycleView。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
List<ComputerService> computerServicesArrayList;
Context context;
public MyAdapter(Context context, List<ComputerService> computerServicesArrayList) {
this.context = context;
this.computerServicesArrayList = computerServicesArrayList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.my_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.myText1.setText(computerServicesArrayList.toString());
}
@Override
public int getItemCount() {
return 0;
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView myText1, myText2;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
myText1 = itemView.findViewById(R.id.txtTitle);
myText2 = itemView.findViewById(R.id.txtDetail);
}
}
}
在 MyAdapter 函数 onBindViewHolder 我不知道如何向 holder.myText1.setText() 显示数据。
如何将 ArraList 数据显示到 RecycleView?
【问题讨论】:
-
在
getItemCount()方法中的适配器中返回computerServicesArrayList.size()还使用foreach 循环在onBindViewHolder方法中单独迭代所有项目
标签: android android-recyclerview android-json