我正在尝试使用GSON反序列化JSON数据并帮助自己使用HashMap<>
但是当我将json字符串设置为java类时,我有一个错误,应用程序只是停止,并用错误的起源:
funt = gson.fromJson(String.valueOf(R.string.json), stack.class);
注意我试图将json数据放入自定义适配器,继承代码:
1问题:我正确地将json字符串设置为java类?
2问题:我正确映射标识符? (我使用“标识符”有类名,因为我不能为每个项目创建每个类,这就是我需要映射的原因)如果没有,你能告诉我怎么做吗?
我正在尝试放置json字符串的Java类:
public class stack {
private int id;
private String name;
private UserBean user;
private ItemsBean items;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public UserBean getUser() {
return user;
}
public void setUser(UserBean user) {
this.user = user;
}
public ItemsBean getItems() {
return items;
}
public void setItems(ItemsBean items) {
this.items = items;
}
public static class UserBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static class ItemsBean {
private HashMap<String, IdentifierBean> identifier;
public HashMap<String, IdentifierBean> getIdentifier(){
return identifier;
}
public void setIdentifier(HashMap<String,IdentifierBean> identifier){
this.identifier = identifier;
}
public static class IdentifierBean {
private int id;
private int strong;
private boolean active;
private String sell;
public int getId() {return id;}
public void setId(int id) {this.id = id; }
public int getStrong() {return strong;}
public void setStrong(int strong) {this.strong = strong;}
public boolean isActive() {return active;}
public void setActive(boolean active) {this.active = active;}
public String getSell() {return sell;}
public void setSell(String sell) {this.sell = sell;}
}
}
}
这是Activity类:
public class stacker extends AppCompatActivity {
stack funt;
Gson gson;
adapterstack adapter;
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stacker);
list = (ListVeew)findViewById(R.id.listss);
gson = new Gson();
funt = gson.fromJson(String.valueOf(R.string.json), stack.class);
adapter = new adapterstack(stacker.this, (List<stack.ItemsBean>) funt.getItems());
list.setAdapter(adapter);
}
}
这是适配器:
public class adapterstack extends BaseAdapter {
List<stack.ItemsBean> itemlist;
Context sContext;
public adapterstack( Context sContext, List<stack.ItemsBean> itemlist) {
this.sContext = sContext;
this.itemlist = itemlist;}
@Override
public int getCount() {return itemlist.size();}
@Override
public Object getItem(int i) {return itemlist.get(i);}
@Override
public long getItemId(int i) {return i;}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
LayoutInflater inflater = (LayoutInflater) sContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View rootView = inflater.inflate(R.layout.item_act, viewGroup, false);
final stack.ItemsBean item = (stack.ItemsBean) getItem(i);
TextView nombre = (TextView) rootView.findViewById(R.id.txt1);
TextView genero = (TextView) rootView.findViewById(R.id.txt2);
//Here i'm trying to get identifier data info from stack.class
nombre.setText(item.getIdentifier().get(i).getId());
genero.setText(item.getIdentifier().get(i).getStrong());
return rootView;
}
}
JSON:
[{
"id": 1001,
"name": "Super1",
"user": {
"name": "The Super 1"
},
"items": {
"987987M7812b163eryrt": {
"id": 1,
"strong": 456,
"active": true,
"sell": "te"
},
"90812bn120893juuh": {
"id": 2,
"strong": 4700,
"active": true,
"sell": "tt"
},
"981273jn19203nj123rg": {
"id": 3,
"strong": 3000,
"active": true,
"sell": "ti"
}
}}]
答案 0 :(得分:1)
我看到你要解析的JSON字符串表示一个数组。在这种情况下,您需要解析JSON,如下所示。
funt = gson.fromJson(String.valueOf(R.string.json), stack[].class);
希望有所帮助!