应用程序崩溃,因为 Array 对于 ArrayAdapter 为 null
App crash as Array is null for ArrayAdapter
我是 android 编程新手,所以您需要多多包涵。
我正在尝试从解析服务器检索列并将其显示在 ListView 中。到目前为止,我已经生成了以下代码,但是我遇到了一个问题。在我的 for 循环中,它应该从 "Absences" class 的 "name" 列中获取每个项目,并将其添加到名为 "teachers" 的 ArrayList 中。
问题是应用程序崩溃,因为数组为空(在日志中打印后),因此无法将其分配给 ArrayAdapter。我相信这样做的原因是在执行 arrayadapter 代码后的某个时间在后台获取对象,这意味着它试图显示一个空数组。
我假设我需要以某种方式延迟它 - 关于我应该做什么有什么想法吗?
onCreate() 方法中受影响的代码:
final ArrayList<String> teachers = new ArrayList<String>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Absences");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if(e == null){
for(ParseObject object : objects){
String name = String.valueOf(object.get("name"));
Log.i("teacherName", name);
teachers.add(name);
}
} else {
Log.i("Get data from parse", "There was an error getting data!");
e.printStackTrace();
}
}
});
Log.i("teacherOutput", teachers.toString());
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers);
ListView lv = (ListView)findViewById(R.id.listView);
lv.setAdapter(arrayAdapter);
非常感谢!
您需要了解 asynchronous 的含义。
你的代码应该是这样的:
final ListView lv = (ListView) findViewById(R.id.listView);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
ArrayList<String> teachers = new ArrayList<String>();
for (ParseObject object : objects) {
String name = String.valueOf(object.get("name"));
Log.i("teacherName", name);
teachers.add(name);
}
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers);
lv.setAdapter(arrayAdapter);
} else {
Log.i("Get data from parse", "There was an error getting data!");
e.printStackTrace();
}
}
});
我是 android 编程新手,所以您需要多多包涵。
我正在尝试从解析服务器检索列并将其显示在 ListView 中。到目前为止,我已经生成了以下代码,但是我遇到了一个问题。在我的 for 循环中,它应该从 "Absences" class 的 "name" 列中获取每个项目,并将其添加到名为 "teachers" 的 ArrayList 中。
问题是应用程序崩溃,因为数组为空(在日志中打印后),因此无法将其分配给 ArrayAdapter。我相信这样做的原因是在执行 arrayadapter 代码后的某个时间在后台获取对象,这意味着它试图显示一个空数组。
我假设我需要以某种方式延迟它 - 关于我应该做什么有什么想法吗?
onCreate() 方法中受影响的代码:
final ArrayList<String> teachers = new ArrayList<String>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Absences");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if(e == null){
for(ParseObject object : objects){
String name = String.valueOf(object.get("name"));
Log.i("teacherName", name);
teachers.add(name);
}
} else {
Log.i("Get data from parse", "There was an error getting data!");
e.printStackTrace();
}
}
});
Log.i("teacherOutput", teachers.toString());
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers);
ListView lv = (ListView)findViewById(R.id.listView);
lv.setAdapter(arrayAdapter);
非常感谢!
您需要了解 asynchronous 的含义。
你的代码应该是这样的:
final ListView lv = (ListView) findViewById(R.id.listView);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
ArrayList<String> teachers = new ArrayList<String>();
for (ParseObject object : objects) {
String name = String.valueOf(object.get("name"));
Log.i("teacherName", name);
teachers.add(name);
}
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers);
lv.setAdapter(arrayAdapter);
} else {
Log.i("Get data from parse", "There was an error getting data!");
e.printStackTrace();
}
}
});