在将json字符串反序列化为textview gson时获取空值

时间:2015-03-26 14:59:55

标签: java json web-services

我是新手,我在java中创建了webservice,从MySQL数据库获取所有餐厅类别并在android studio中访问  ,

我的json回复如下,

[
{
    "restro": {
        "categoryid": 1,
        "categoryname": "Restaurant (Vegetarian)"
    }
},
{
    "restro": {
        "categoryid": 2,
        "categoryname": "Restaurant (Non-Vegetarian)"
    }
}
]  

反序列化代码gson库

Gson gson=new Gson();
        Type RestroTypeListType=new TypeToken<Collection<Category>>(){}.getType();
        List<Category> categories=(List<Category>)gson.fromJson(jsonstring,RestroTypeListType);
        tv1.setText("");
        for(Category category : categories)
        {
              tv1.append(category.getCategoryName()+"\n");
        }

我的实体类是

public class Category {

private int categoryID;
private String categoryName;

public Category() {

}

public int getCategoryID() {
    return categoryID;
}

public void setCategoryID(int categoryID) {
    this.categoryID = categoryID;
}

public String getCategoryName() {
    return categoryName;
}

public void setCategoryName(String categoryName) {
    this.categoryName = categoryName;
}

@Override
public String toString() {
    return "Category{" +
            ", categoryName='" + categoryName + '\'' +
            '}';
}

}

我在textview中得到null。

2 个答案:

答案 0 :(得分:0)

您的问题是您期望收集一些类别,但您正在返回一组restro。

您能否在json响应中提供有关restro属性的更多详细信息。

但我想,引入一个名为(restro)类型为Category的新类将解决您的问题。

并改变

Type RestroTypeListType=new TypeToken<Collection<Category>>(){}.getType();

有关

Type RestroTypeListType=new TypeToken<Collection<Restro>>(){}.getType();

答案 1 :(得分:0)

是的,我得到了答案

不添加任何外部库,

JSONArray jsonArray = new JSONArray(jsonstring);
        String OuterstringArray;
        tv1.setText("");
        for (int outer = 0; outer < jsonArray.length(); outer++) {
            OuterstringArray=jsonArray.getJSONObject(outer).getString("restro");
            JSONObject jsonObject=new JSONObject(OuterstringArray);

            arrayListRestro.add(jsonObject.getString("categoryname"));
        }
        ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,arrayListRestro);
        listRestros.setAdapter(arrayAdapter);