Java 根据RecyclerView中的Json文件Id传递Json数据
我有一个问题,我已经尝试了很多次,但我没有成功,请你帮助我!我有一个从json文件中获取数据的RecyclerView。我有两个json文件,我的json文件如下所示:Java 根据RecyclerView中的Json文件Id传递Json数据,java,android,Java,Android,我有一个问题,我已经尝试了很多次,但我没有成功,请你帮助我!我有一个从json文件中获取数据的RecyclerView。我有两个json文件,我的json文件如下所示: { "ussd_code":[ {"cmd_id": 1,"cmd_name": "Solde de crédit","cmd_instruction": "*100#","cmd_commentaire": null,"opetor_id": 2,"mnu_id": 12,"test":2}, {"cmd_id": 2,"cm
{ "ussd_code":[
{"cmd_id": 1,"cmd_name": "Solde de crédit","cmd_instruction": "*100#","cmd_commentaire": null,"opetor_id": 2,"mnu_id": 12,"test":2},
{"cmd_id": 2,"cmd_name": "Solde de crédit","cmd_instruction": "*565#","cmd_commentaire": null,"opetor_id": 1,"mnu_id": 12,"test":1},
{"cmd_id": 3,"cmd_name": "Solde de crédit","cmd_instruction": "*124#","cmd_commentaire": null,"opetor_id": 3,"mnu_id": 12,"test":3},
{"cmd_id": 4,"cmd_name": "Airtel Money","cmd_instruction": "*501#","cmd_commentaire": null,"opetor_id": 1,"mnu_id": 12,"test":1},
{"cmd_id": 5,"cmd_name": "Mon numéro","cmd_instruction": "*502#","cmd_commentaire": null,"opetor_id": 1,"mnu_id": 12,"test":1},
{"cmd_id": 6,"cmd_name": "8 minutes (Vers airtel)","cmd_instruction": "*171*50#", "cmd_commentaire": "50 Unités pour 1 jour","opetor_id": 1,"mnu_id": 11,"test":1},
{"cmd_id": 7,"cmd_name": "10 min (Tous réseau)","cmd_instruction": "*171*0100#","cmd_commentaire": "100 Unités pour 1 jour","opetor_id": 1,"mnu_id": 11,"test":1}]}
还有一个:
{"operator":[
{"opetor_id": 1,"opetor_name": "Airtel","ctry_id": "CD"},
{"opetor_id": 2,"opetor_name": "Vodacom","ctry_id": "CD"},
{"opetor_id": 3,"opetor_name": "Orange","ctry_id": "CD"},
{"opetor_id": 4,"opetor_name": "Tigo","ctry_id": "CD"}]}
一旦我验证两个json文件中的运算符\u id
是否相同,我将在RecyclerView中传递数据这是我的代码:
String cmd_id=new String();
String cmd_name=新字符串();
String cmd_指令=新字符串();
String cmd_commentaire=新字符串();
...
对于(intz=0;z
这是我的适配器:
公共类CustomAdapter扩展了RecyclerView.Adapter{
String cmd_id=新字符串();
String cmd_name=新字符串();
String cmd_指令=新字符串();
String cmd_commentaire=新字符串();
ArrayList cmd_运算符=新的ArrayList();
语境;
公共CustomAdapter(上下文上下文、字符串cmd\u id、字符串cmd\u名称、字符串cmd\u指令、字符串cmd\u注释){
this.context=上下文;
this.cmd_id=cmd_id;
this.cmd\u name=cmd\u name;
this.cmd_指令=cmd_指令;
this.cmd_commentaire=cmd_commentaire;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
//对项目布局进行充气
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.rowlayout,parent,false);
MyViewHolder vh=新的MyViewHolder(v);//将视图传递给视图持有者
返回vh;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,最终整数位置){
//在项目中设置数据
//holder.name.setText(cmd_id.get(position));
holder.email.setText(cmd_name);
//holder.mobileNo.setText(cmd_指令.get(位置));
//在项目视图上实现setOnClickListener事件。
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//在单击项目时显示带有人名的祝酒词
//Toast.makeText(context,cmd_name.get(position),Toast.LENGTH_SHORT.show();
if(ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL\u PHONE)!=PackageManager.permission\u已授予){
Toast.makeText(MainActivity.this,“请授予调用权限”,Toast.LENGTH_SHORT.show();
请求权限();
}否则{
//Toast.makeText(橙色,这是“回收者视图项:”+i,Toast.LENGTH_LONG.show();
//最终意图;
Intent myIntent=新的Intent(Intent.ACTION_拨号,Uri.parse(“tel:”+cmd_指令.replace(“#”)+Uri.encode(“#”);
星触觉(myIntent);
}
}
});
}
@凌驾
public int getItemCount(){
返回cmd_id.length();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
TextView名称、电子邮件、mobileNo;//初始化项目视图的
公共MyViewHolder(查看项目视图){
超级(项目视图);
//获取项目视图的引用
name=(TextView)itemView.findViewById(R.id.name);
email=(TextView)itemView.findViewById(R.id.email);
mobileNo=(TextView)itemView.findViewById(R.id.mobileNo);
}
}
}
当我在
ussd\u code
json文件中opetor\u id
等于1的地方运行我的应用程序时,它只给我最后一个值,或者我有五个opetor\u id
,但仍然有最后一个值。不知道为什么没有出现orthers。您每次都在遍历循环并创建自定义适配器的新实例。因此,通过en-dof循环,最后一个实例将只保留
所以,您需要做的是创建一个包含变量cmd_id、cmd_name、cmd_指令和cmd_commentaire的模型。然后创建一个model类型的ArrayAdapter
遍历循环时,只需将新模型添加到该ArrayAdapter,不要每次都创建适配器的新实例
更新:
创建JSON的POJO
List<MyPojo> lstPojo = new ArrayList<~>;
for (int z = 0; z < jArrayMenu.length(); z++)
{
JSONObject MnuDetail = jArrayMenu.getJSONObject(z);
int operatorIdMenu = MnuDetail.getInt("opetor_id");
//cmd_operator_test.add(MnuDetail.getInt("opetor_id"));
if (OperaID == operatorIdMenu)
{
lstPojo.add(new MyPojo(MnuDetail.getString("cmd_id"),
MnuDetail.getString("cmd_name"),
MnuDetail.getString("cmd_instruction"),
MnuDetail.getString("cmd_commentaire")));
}
}
CustomAdapter customAdapter = new CustomAdapter(MainActivity.this,
android.R.layout.simple_spinner_item,
lstPojo);
rv.setAdapter(customAdapter);
List lstPojo=newarraylist;
对于(intz=0;z
希望这有帮助。您每次都在遍历循环并创建自定义适配器的新实例。因此,通过en-dof循环,最后一个实例将只保留 所以,你需要做的是创建一个模型