在 GSON 中使用 POJO Class
using POJO Class with the GSON
我正在创建一个带有 Json 样本数组的项目 我已经生成了 POJO class 并且我有一个 JSON 需要解析。我已完成所有设置,但应用程序没有显示任何错误,也没有显示应用程序内的任何数据。
这是我生成的 POJO Class。
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);
}
谁能告诉我我的代码有什么问题。 y 它没有显示数据。
如果您知道任何博客或网站可以了解如何在 android
中将 POJO 与所有类型的 JSON 一起使用
这是适配器 class。
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);
}
}
}
将此 Android averion= gson.fromJson(jsonObject.toString(),Android.class);
代码放入 for 循环中,例如:
此 JSONObject jsonObject=new JSONObject(response);
在 0,1 和 2 位置 obj 有您的回复不是 obj。
List<Android> verionlist=new ArrayList<>();
在 activity
中创建或创建新的 ArrayList
然后使用 for 循环将 android 数组中的每个对象添加到数组列表中,例如:
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);
它会为你工作。
试试这个
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();
}
您无需经历将每个 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());
我找到了答案,因为我 wanted.here 是解决方案
Gson gson = new Gson();
AndroidVersion generalInfoObject = gson.fromJson(response, AndroidVersion.class);
adapter=new ReccyclerAdapter(generalInfoObject.getAndroid());
recyclerView.setAdapter(adapter);
并且我将 Android 版本 class 更改为
public class AndroidVersion {
@SerializedName("android")
List<Android> android;
public List<Android> getAndroid() {
return android;
}
public void setAndroid(List<Android> android) {
this.android = android;
}
}
感谢您给我解决方案的提示
我正在创建一个带有 Json 样本数组的项目 我已经生成了 POJO class 并且我有一个 JSON 需要解析。我已完成所有设置,但应用程序没有显示任何错误,也没有显示应用程序内的任何数据。 这是我生成的 POJO Class。
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);
}
谁能告诉我我的代码有什么问题。 y 它没有显示数据。 如果您知道任何博客或网站可以了解如何在 android
中将 POJO 与所有类型的 JSON 一起使用这是适配器 class。
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);
}
}
}
将此 Android averion= gson.fromJson(jsonObject.toString(),Android.class);
代码放入 for 循环中,例如:
此 JSONObject jsonObject=new JSONObject(response);
在 0,1 和 2 位置 obj 有您的回复不是 obj。
List<Android> verionlist=new ArrayList<>();
在 activity
中创建或创建新的 ArrayList然后使用 for 循环将 android 数组中的每个对象添加到数组列表中,例如:
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);
它会为你工作。
试试这个
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();
}
您无需经历将每个 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());
我找到了答案,因为我 wanted.here 是解决方案
Gson gson = new Gson();
AndroidVersion generalInfoObject = gson.fromJson(response, AndroidVersion.class);
adapter=new ReccyclerAdapter(generalInfoObject.getAndroid());
recyclerView.setAdapter(adapter);
并且我将 Android 版本 class 更改为
public class AndroidVersion {
@SerializedName("android")
List<Android> android;
public List<Android> getAndroid() {
return android;
}
public void setAndroid(List<Android> android) {
this.android = android;
}
}
感谢您给我解决方案的提示