我有一个数据集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")
};
这很好用。请一些帮助
答案 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()