Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用改型在android中解析此嵌套JSON数组_Android_Arrays_Json_Api_Retrofit - Fatal编程技术网

使用改型在android中解析此嵌套JSON数组

使用改型在android中解析此嵌套JSON数组,android,arrays,json,api,retrofit,Android,Arrays,Json,Api,Retrofit,我有一个JSON数组对象响应 { "Exam":[ { "mock_test": [ { id: "14", option_a: "android developer", option_b: "programmer", o

我有一个JSON数组对象响应

{ "Exam":[
{

    "mock_test":
        [
            {
                id: "14",
                option_a: "android developer",
                option_b: "programmer",
                option_c: "coder",
                option_d: "developer",
                is_correct: "1",
                question_number: "14",
                questions: "hello this pavan sharma",
                            
            },
            {
                id: "14",
                option_a: "android developer",
                option_b: "programmer",
                option_c: "coder",
                option_d: "developer",
                is_correct: "1",
                question_number: "14",
                questions: "hello this pavan sharma",
                            
            },
            {
                id: "14",
                option_a: "android developer",
                option_b: "programmer",
                option_c: "coder",
                option_d: "developer",
                is_correct: "1",
                question_number: "14",
                questions: "hello this pavan sharma",
                        
            },  

        ]
},
{
    "mock_test":
    [
        {
            id: "14",
            option_a: "android developer",
            option_b: "programmer",
            option_c: "coder",
            option_d: "developer",
            is_correct: "1",
            question_number: "14",
            questions: "hello this pavan sharma",
                        
        },
        {
            id: "14",
            option_a: "android developer",
            option_b: "programmer",
            option_c: "coder",
            option_d: "developer",
            is_correct: "1",
            question_number: "14",
            questions: "hello this pavan sharma",
                    
        },
        {
            id: "14",
            option_a: "android developer",
            option_b: "programmer",
            option_c: "coder",
            option_d: "developer",
            is_correct: "1",
            question_number: "14",
            questions: "hello this pavan sharma",   
        },  

    ]

}
]}
我创建了一个模型类,比如

public class ModelClass implements Serializable {

@SerializedName("id")
@Expose
private int id;

@SerializedName("option_a")
@Expose
private String option_a;

@SerializedName("option_b")
@Expose
private String option_b;

@SerializedName("option_c")
@Expose
private String option_c;

public ModelClass(int id, String option_a, String option_b, String option_c) {
    this.id = id;
    this.option_a = option_a;
    this.option_b = option_b;
    this.option_c = option_c;
}

public int getId() {
    return id;
}

public String getOption_a() {
    return option_a;
}

public String getOption_b() {
    return option_b;
}

public String getOption_c() {
    return option_c;
}}
另一个模型类是

public class DataModelClass {

@SerializedName("mock_test")
@Expose
private ArrayList<ModelClass> mockTest=null;

public DataModelClass(ArrayList<ModelClass> mockTest) {
    this.mockTest = mockTest;
}

public ArrayList<ModelClass> getMockTest() {
    return mockTest;
}
public class MainModelClass  implements Serializable {

@SerializedName("Exam")
@Expose
private ArrayList<DataModelClass> exam=null;

public MainModelClass(ArrayList<DataModelClass> exam) {
    this.exam = exam;
}

public ArrayList<DataModelClass> getExam() {
    return exam;
}
公共类DataModelClass{
@序列化名称(“模拟测试”)
@暴露
私有ArrayList mockTest=null;
公共数据模型类(ArrayList mockTest){
this.mockTest=mockTest;
}
公共ArrayList getMockTest(){
返回模拟试验;
}
另一个模型类是

public class DataModelClass {

@SerializedName("mock_test")
@Expose
private ArrayList<ModelClass> mockTest=null;

public DataModelClass(ArrayList<ModelClass> mockTest) {
    this.mockTest = mockTest;
}

public ArrayList<ModelClass> getMockTest() {
    return mockTest;
}
public class MainModelClass  implements Serializable {

@SerializedName("Exam")
@Expose
private ArrayList<DataModelClass> exam=null;

public MainModelClass(ArrayList<DataModelClass> exam) {
    this.exam = exam;
}

public ArrayList<DataModelClass> getExam() {
    return exam;
}
public类MainModelClass实现可序列化{
@序列化名称(“考试”)
@暴露
私有ArrayList检查=null;
公共MainModelClass(ArrayList考试){
这个考试=考试;
}
公共数组列表getExam(){
复试;
}
主要活动

        apiInterface=ApiClient.getRetrofitInstance().create(API.class);
    Call<DataModelClass> call = apiInterface.getEmpData();

    call.enqueue(new Callback<DataModelClass>() {
        @Override
        public void onResponse(Call<DataModelClass> call, Response<DataModelClass> response) {
            progressDialog.dismiss();
            
            
            
            
        }

        @Override
        public void onFailure(Call<DataModelClass> call, Throwable t) {
            Toast.makeText(getApplicationContext(),""+t,Toast.LENGTH_SHORT).show();
        }
    });
apinterface=ApiClient.getRefughtInstance().create(API.class);
Call Call=apinterface.getEmpData();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
progressDialog.disclose();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getApplicationContext(),“”+t,Toast.LENGTH_SHORT).show();
}
});
请告诉我如何调用内部对象,如id、选项a、选项b、选项c等。。。
我可以为此创建recycler视图,但我只想知道如何调用这些内部对象。

使用MainModelClass作为泛型:

Call<MainModelClass> call = apiInterface.getEmpData();
现在你可以这样写你的电话:

Call<MainResponse> call = apiInterface.getEmpData();
//rest of your code
Call Call=apinterface.getEmpData();
//代码的其余部分

以下是主要活动代码

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
private API apiInterface;
ProgressDialog progressDialog;

Adapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layout.activity_main);
    getEmployeeData();
}
private void getEmployeeData() {

    /*progressDialog=new ProgressDialog(MainActivity.this);
    progressDialog.show();
    progressDialog.setContentView(layout.prgress_bar_layout);
    progressDialog.getWindow().setBackgroundDrawable(new 
    ColorDrawable(Color.TRANSPARENT)); */

    recyclerView=(RecyclerView)findViewById(id.recyclerView);
    recyclerView.setLayoutManager( new LinearLayoutManager(this));
    apiInterface=ApiClient.getRetrofitInstance().create(API.class);

    Call<MainResponse> call = apiInterface.getEmpData();
    call.enqueue(new Callback<MainResponse>() {
        @Override
        public void onResponse(Call<MainResponse> call, Response<MainResponse> 
        response) {
        //  progressDialog.dismiss();

           ArrayList<MockTest>datalist=response.body().getExam();
             adapter = new Adapter(datalist, MainActivity.this);
            recyclerView.setAdapter(adapter);
        }

        @Override
        public void onFailure(Call<MainResponse> call, Throwable t) {
            Toast.makeText(getApplicationContext(),""+t,Toast.LENGTH_SHORT).show();
        }
    });
}}
public类MainActivity扩展了AppCompatActivity{
回收视图回收视图;
专用API接口;
进行对话进行对话;
适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(layout.activity_main);
getEmployeeData();
}
私有void getEmployeeData(){
/*progressDialog=新建progressDialog(MainActivity.this);
progressDialog.show();
progressDialog.setContentView(layout.prgress\u bar\u layout);
progressDialog.getWindow().setBackgroundDrawable(新)
可着色(彩色透明)*/
recyclerView=(recyclerView)findViewById(id.recyclerView);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
apiInterface=ApiClient.getInstance().create(API.class);
Call Call=apinterface.getEmpData();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应
(答复){
//progressDialog.disclose();
ArrayListdatalist=response.body().getExam();
适配器=新适配器(datalist,MainActivity.this);
recyclerView.setAdapter(适配器);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getApplicationContext(),“”+t,Toast.LENGTH_SHORT).show();
}
});
}}
下面是适配器代码

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

List<MockTest> dataList;
Context context;

public Adapter(ArrayList<MockTest> dataList, Context context) {
    this.dataList = dataList;
    this.context = context;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.design_recycler_view_cell,parent,false);
    final ViewHolder holder=new ViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {

    holder.option_a.setText(dataList.get(position).getOptionA());
    holder.option_b.setText(dataList.get(position).getOptionB());
    holder.question.setText(dataList.get(position).getQuestions());
}

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

public class ViewHolder extends RecyclerView.ViewHolder{

    TextView option_a,option_b,question;
    Button button;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        option_a=itemView.findViewById(R.id.editname);
        option_a=itemView.findViewById(R.id.editAge);
        question=itemView.findViewById(R.id.editSalary);
        button=itemView.findViewById(R.id.btn);
    }
}}
公共类适配器扩展了RecyclerView.Adapter{
列表数据列表;
语境;
公共适配器(ArrayList数据列表,上下文){
this.dataList=dataList;
this.context=上下文;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.design\u recycler\u View\u单元格,parent,false);
最终视图持有者=新视图持有者(视图);
报税表持有人;
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,final int位置){
option_a.setText(dataList.get(position.getOptionA());
holder.option_b.setText(dataList.get(position.getOptionB());
holder.question.setText(dataList.get(position.getQuestions());
}
@凌驾
public int getItemCount(){
返回dataList.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
文本视图选项a、选项b、问题;
按钮;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
选项a=itemView.findViewById(R.id.editname);
选项a=itemView.findviewbyd(R.id.editAge);
问题=itemView.findViewById(R.id.editSalary);
按钮=itemView.findViewById(R.id.btn);
}
}}

还请检查MainActivity的onResponse方法,因为我在
ArrayListdatalist=response.body().getExam();

中遇到错误。请检查它不是有效的json格式,缺少键的双引号将上面的json替换为该json,因为您的json格式错误

{
 "Exam": [
        {
          "mock_test": [
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            },
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            },
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            }
          ]
        },
        {
          "mock_test": [
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            },
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            },
            {
              "id": "14",
              "option_a": "android developer",
              "option_b": "programmer",
              "option_c": "coder",
              "option_d": "developer",
              "is_correct": "1",
              "question_number": "14",
              "questions": "hello this pavan sharma"
            }
          ]
        }
      ]
    }
并将上面的模型类替换为下面的模型类

  package com.example;

import java.util.List;

public class Exam {

private List<MockTest> mockTest = null;

public List<MockTest> getMockTest() {
return mockTest;
}

public void setMockTest(List<MockTest> mockTest) {
this.mockTest = mockTest;
}

}

现在,您可以根据自己的喜好对响应进行解析

您可以使用我的回答:您的问题到底是什么?您提供的
JSON
是API的全部响应吗?您是否成功地从改装中获得响应?或者您可能无法获得改装响应表,因为您的模型编写不正确?我正在考虑null输入response.body()。您能告诉我,我必须在onResponse方法中编写什么才能将所有数据发送到适配器请告诉我如何从onResponse发送适配器中MockTest模型类的所有数据吗method@GirrajSharma发送您的
适配器
代码,以便我可以帮助您。
  package com.example;

import java.util.List;

public class Exam {

private List<MockTest> mockTest = null;

public List<MockTest> getMockTest() {
return mockTest;
}

public void setMockTest(List<MockTest> mockTest) {
this.mockTest = mockTest;
}

}
  package com.example;
    
    import java.util.List;
    
    public class Example {
    
    private List<Exam> exam = null;
    
    public List<Exam> getExam() {
    return exam;
    }
    
    public void setExam(List<Exam> exam) {
    this.exam = exam;
    }
package com.example;
public class MockTest {

private String id;
private String optionA;
private String optionB;
private String optionC;
private String optionD;
private String isCorrect;
private String questionNumber;
private String questions;

public String getId() {
return id;
}

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

public String getOptionA() {
return optionA;
}

public void setOptionA(String optionA) {
this.optionA = optionA;
}

public String getOptionB() {
return optionB;
}

public void setOptionB(String optionB) {
this.optionB = optionB;
}

public String getOptionC() {
return optionC;
}

public void setOptionC(String optionC) {
this.optionC = optionC;
}

public String getOptionD() {
return optionD;
}

public void setOptionD(String optionD) {
this.optionD = optionD;
}

public String getIsCorrect() {
return isCorrect;
}

public void setIsCorrect(String isCorrect) {
this.isCorrect = isCorrect;
}

public String getQuestionNumber() {
return questionNumber;
}

public void setQuestionNumber(String questionNumber) {
this.questionNumber = questionNumber;
}

public String getQuestions() {
return questions;
}

public void setQuestions(String questions) {
this.questions = questions;
}

}
        
        }