繁体   English   中英

使用改造在 android 中解析这个嵌套的 JSON 数组

[英]Parse this nested JSON array in android using retrofit

我有这个 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;
}

在主活动中

        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();
        }
    });

请告诉我如何调用内部对象,如 id、option_a、option_b、option_c 等...我可以为此创建回收器视图,但我只想知道如何调用这些内部对象。

改用 MainModelClass 作为泛型:

Call<MainModelClass> call = apiInterface.getEmpData();

如果您仍然无法从服务器获得正确的响应,那么您需要以下 3 个 POJO:

public class MainResponse {
@SerializedName("Exam")
ArrayList<ExamContainer> examContainers;

public ArrayList<ExamContainer> getExamContainers() {
    return examContainers;
}

public void setExamContainers(ArrayList<ExamContainer> examContainers) {
    this.examContainers = examContainers;
}
}

进而:

public class ExamContainer {

@SerializedName("mock_test")
private ArrayList<MockTest> mockTests;


public ArrayList<MockTest> getMockTests() {
    return mockTests;
}

public void setMockTests(ArrayList<MockTest> mockTests) {
    this.mockTests = mockTests;
}
}

最后:

public class MockTest
{
private String id;

private String option_a;

private String option_b;

private String option_c;

private String option_d;

private String is_correct;

private String question_number;

private String questions;

public void setId(String id){
    this.id = id;
}
public String getId(){
    return this.id;
}
public void setOption_a(String option_a){
    this.option_a = option_a;
}
public String getOption_a(){
    return this.option_a;
}
public void setOption_b(String option_b){
    this.option_b = option_b;
}
public String getOption_b(){
    return this.option_b;
}
public void setOption_c(String option_c){
    this.option_c = option_c;
}
public String getOption_c(){
    return this.option_c;
}
public void setOption_d(String option_d){
    this.option_d = option_d;
}
public String getOption_d(){
    return this.option_d;
}
public void setIs_correct(String is_correct){
    this.is_correct = is_correct;
}
public String getIs_correct(){
    return this.is_correct;
}
public void setQuestion_number(String question_number){
    this.question_number = question_number;
}
public String getQuestion_number(){
    return this.question_number;
}
public void setQuestions(String questions){
    this.questions = questions;
}
public String getQuestions(){
    return this.questions;
}
}

现在你这样写你的电话:

Call<MainResponse> call = apiInterface.getEmpData();
//rest of your code

这是 MainActivity 代码

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 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);
    }
}}

另请检查 MainActivity 的 onResponse 方法,因为我在ArrayList<MockTest>datalist=response.body().getExam();遇到错误ArrayList<MockTest>datalist=response.body().getExam();

请检查它不是有效的 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;
}

}

==============================

  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;
}

}
        
        }

现在你得到了你喜欢的解析

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM