自定义数组推送数据与循环

时间:2016-08-03 07:57:41

标签: java android

我有一个数据集User.java的自定义类

public class User {
    public int icon;
    public String title;
    public User(){
        super();
    }

    public User(int icon, String title) {
        super();
        this.icon = icon;
        this.title = title;
    }
}

还有一个自定义适配器UserAdapter.java

public class UserAdapter extends ArrayAdapter<User> {

    Context context;
    int layoutResourceId;
    User data[] = null;

    public UserAdapter(Context context, int layoutResourceId, User[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        UserHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new UserHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.list_image);
            holder.txtTitle = (TextView)row.findViewById(R.id.title);

            row.setTag(holder);
        }
        else
        {
            holder = (UserHolder)row.getTag();
        }

        User User = data[position];
        holder.txtTitle.setText(User.title);
        holder.imgIcon.setImageResource(User.icon);

        return row;
    }

    static class UserHolder
    {
        ImageView imgIcon;
        TextView txtTitle;
    }
}

我正在尝试使用代码

从webservice推送数据
public User user_data[] = new User[500];
try {
    JSONObject object_exc = response;
    JSONArray jArray = object_exc.getJSONArray("exercise");

    for (int i = 0; i < jArray.length(); i++) {
        JSONObject object = jArray.getJSONObject(i);
        user_data[i] = new User(R.drawable.nopic, object.getString("name"));

    }


}catch (Exception e){

}

但它返回null异常,而

User user_data[] = new User[]
        {
            new User(R.drawable.weather_cloudy, "Cloudy"),
            new User(R.drawable.weather_showers, "Showers"),
            new User(R.drawable.weather_snow, "Snow"),
            new User(R.drawable.weather_storm, "Storm"),
            new User(R.drawable.weather_sunny, "Sunny")
        };

这很好用。请一些帮助

2 个答案:

答案 0 :(得分:1)

尝试使用 ArrayList 而不是 User [] 数组。

ArrayList<User> list = new ArrayList<User>();

将用户添加到此列表中。

就像:

list.add(new User(xxx, yyy));

答案 1 :(得分:0)

恕我直言,您的代码中存在一些问题。

1 - Json文件来源

JSONArray jArray = object_exc.getJSONArray("exercise");

构造函数请求表示json字符串的字符串。显然,“运动”不是一个有效的json。所以你永远不会找到“名字”字段.. 所以问题就在这里!!!

<强> 改进

2 - 使用纯数组结构

也许更好的使用ArrayList是下一个操作数据的更好选择。 (例如排序!)

3 - object.getString(String abc)

我建议您使用

object.optString("name", "no_name")
通过这种方式,您可以设置默认返回值并避免其他问题。阅读这个SO线程 JSON: the difference between getString() and optString()