используя класс POJO с GSON - PullRequest
0 голосов
/ 31 января 2019

Я создаю проект с образцом массива Json. Я сгенерировал класс POJO и у меня есть JSON, который мне нужно проанализировать.Я выполнил все настройки, но приложение не показывает никаких ошибок и не показывает никаких данных внутри приложения.вот мой сгенерированный класс POJO.

 public class Android {

@SerializedName("ver")
@Expose
private String ver;
@SerializedName("name")
@Expose
private String name;
@SerializedName("api")
@Expose
private String api;

public String getVer() {
    return ver;
}

public void setVer(String ver) {
    this.ver = ver;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getApi() {
    return api;
}

public void setApi(String api) {
    this.api = api;
     }

     }

 public class    AndroidVersion {

@SerializedName("android")
@Expose
private List<Android> android = null;

public List<Android> getAndroid() {
    return android;
}

public void setAndroid(List<Android> android) {
    this.android = android;
}

   }

И мой Json будет как

{
  "android": [
    {
      "ver": "1.5",
      "name": "Cupcake",
      "api": "API level 3"
    },
    {
      "ver": "1.6",
      "name": "Donut",
      "api": "API level 4"
    },
    {
      "ver": "2.0 - 2.1",
      "name": "Eclair",
      "api": "API level 5 - 7"
    }
  ]
}

, и я проанализировал данные, как показано ниже

 private void getInformation(){
    StringRequest stringRequest=new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {


            Gson gson=new GsonBuilder().create();
            try {
                JSONObject jsonObject=new JSONObject(response);
                JSONArray jsonArray=jsonObject.getJSONArray("android");
                Android averion= gson.fromJson(jsonObject.toString(),Android.class);

                List<Android> verionlist=new ArrayList<>();
                verionlist.add(averion);
                adapter=new ReccyclerAdapter(verionlist);
                recyclerView.setAdapter(adapter);

            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    MySingleton.getInstance(this).addToRequestQueue(stringRequest);
}

может любойодин скажи мне, в чем проблема с моим кодом.у него не отображаются данные.если вы знаете какой-либо блог или сайт, чтобы узнать о том, как использовать POJO со всеми типами JSON в android

, то вот класс адаптера.

    public class ReccyclerAdapter extends 
  RecyclerView.Adapter<ReccyclerAdapter.MYViewHolder> {
private String TAG=getClass().getSimpleName();
private List<Android> list=new ArrayList<>();
ReccyclerAdapter(List<Android> list){
    this.list=list;

}

@NonNull
@Override
public MYViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.data_row,viewGroup,false);
    return new MYViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MYViewHolder myViewHolder, int i) {

    myViewHolder.api_level.setText(list.get(i).getApi());
    myViewHolder.name.setText(list.get(i).getName());
    myViewHolder.version.setText(list.get(i).getVer());

}


@Override
public int getItemCount() {
    return list.size();
}
public static class MYViewHolder extends RecyclerView.ViewHolder {
    TextView version,name,api_level;
    public MYViewHolder(@NonNull View itemView) {
        super(itemView);
        name=(TextView)itemView.findViewById(R.id.name);
        version=(TextView)itemView.findViewById(R.id.vesrion);
        api_level=(TextView)itemView.findViewById(R.id.api_level);

    }
}
 }

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Я нашел ответ так, как хотел. Вот решение

   Gson gson = new Gson();

    AndroidVersion generalInfoObject = gson.fromJson(response, AndroidVersion.class);

    adapter=new ReccyclerAdapter(generalInfoObject.getAndroid());
    recyclerView.setAdapter(adapter);

, и я изменил класс версии Android на

 public class  AndroidVersion {

 @SerializedName("android")
 List<Android> android;

 public List<Android> getAndroid() {
    return android;
 }

 public void setAndroid(List<Android> android) {
    this.android = android;
 }

 }

, спасибо, что дали мне советы по решению ваших решений

0 голосов
/ 31 января 2019

Попробуйте это

 Gson gson = new Gson();
            try {
                JSONObject jsonObject=new JSONObject(response);
                JSONArray jsonArray=jsonObject.getJSONArray("android");



                Android averion= gson.fromJson(jsonObject.toString(),Android.class);
                 //here jsonObject.toString() is  your AndroidVersion not Android .

                List<Android> verionlist=new ArrayList<>();
                verionlist.add(averion);
                adapter=new ReccyclerAdapter(verionlist);
                recyclerView.setAdapter(adapter);

            } catch (JSONException e) {
                e.printStackTrace();
            }
0 голосов
/ 31 января 2019

Вам не нужно проходить через боль отдельного добавления каждого объекта JSON в список.Вместо этого лучшим способом было бы напрямую преобразовать строку ответа с помощью TypeToken.Библиотека Gson позволяет вам сделать это просто следующим образом:

Gson gson = new Gson();

Type type = new TypeToken<List<Android>>() {}.getType();

List<Android> versionList = gson.fromJson(response, type);

или если вы хотите выполнить свою задачу в одной строке кода

List<Android> versionList = new Gson().fromJson(response, new TypeToken<List<Android>>() {}.getType());
0 голосов
/ 31 января 2019

Поместите этот Android averion= gson.fromJson(jsonObject.toString(),Android.class); код в цикл for, например:

Этот JSONObject jsonObject=new JSONObject(response); имеет ваш ответ не obj на 0,1 и 2 позициях obj.

 List<Android> verionlist=new ArrayList<>();

создать новый ArrayList в orcreate деятельности

и использовать цикл для добавления каждого объекта из массива Android в arraylist, например:

for(int i=0;i<jsonArray.length(); i++){
  Android averion= gson.fromJson(jsonArray.get(i).toString(),Android.class);
  verionlist.add(averion);
}

 adapter=new ReccyclerAdapter(verionlist);
 recyclerView.setAdapter(adapter);

Это будет работать для вас.

...