[英]Parse this nested JSON array in android using retrofit
I have this JSON array object response我有这个 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",
},
]
}
]}
I have created model class like我已经创建了模型类
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;
}}
another model class is另一个模型类是
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;
}
another model class is另一个模型类是
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;
}
In MainActivity在主活动中
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();
}
});
please tell me how can i call inner object like id,option_a, option_b, option_c etc... i can create recycler view for this but i just want to know how to call these inner objects.请告诉我如何调用内部对象,如 id、option_a、option_b、option_c 等...我可以为此创建回收器视图,但我只想知道如何调用这些内部对象。
Use MainModelClass as Generics instead:改用 MainModelClass 作为泛型:
Call<MainModelClass> call = apiInterface.getEmpData();
If you still have trouble getting the right response from server, then you need these 3 POJOs:如果您仍然无法从服务器获得正确的响应,那么您需要以下 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;
}
}
And then:进而:
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;
}
}
And finally :最后:
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;
}
}
Now you write your call like this:现在你这样写你的电话:
Call<MainResponse> call = apiInterface.getEmpData();
//rest of your code
Here is the MainActivity 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();
}
});
}}
And here is the Adapter code这是适配器代码
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);
}
}}
Please also check the onResponse Method of MainActivity because i am getting error in ArrayList<MockTest>datalist=response.body().getExam();
另请检查 MainActivity 的 onResponse 方法,因为我在ArrayList<MockTest>datalist=response.body().getExam();
遇到错误ArrayList<MockTest>datalist=response.body().getExam();
请检查它不是有效的 json 格式,缺少键的双引号
replace above Json with this because your Json format is wrong用这个替换上面的 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"
}
]
}
]
}
and replace above model classes with below model classes并用下面的模型类替换上面的模型类
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;
}
}
}
Now u get response make to parse as you like现在你得到了你喜欢的解析
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.