我想使用parse.com在数据库列的 ListView 中显示特定数据,我只是不知 Prop 体如何做到这一点,下面是代码,这里有一个错误,但你可以完全更改它来解决它!
公共(public)类 Donar_Acceptor_list 扩展 ListActivity {
// Declare Variables
ListView listview;
List<ParseObject> ob;
//ProgressDialog mProgressDialog; ArrayAdapter适配器;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the view from listview_main.xml
setContentView(R.layout.donar_acceptor_list);
// Execute RemoteDataTask AsyncTask
// new RemoteDataTask().execute();
}
protected Void doInBackground(Void... params) throws com.parse.ParseException {
// Locate the class table named "Country" in Parse.com
ParseQuery<ParseObject> query = ParseQuery.getQuery("DonAcc");
query.whereEqualTo("DonAcc", "donar");
// ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
// "username");
query.orderByDescending("_created_at");
try {
ob = query.find();
} catch (ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
// Locate the listview in listview_main.xml
listview = (ListView) findViewById(R.id.list);
// Pass the results into an ArrayAdapter
adapter = new ArrayAdapter<String>(Donar_Acceptor_list.this,
R.layout.donar_aceptor_discription);
// Retrieve object "name" from Parse.com database
for (ParseObject status : ob) {
adapter.add((String) status.get("name"));
}
listview.setAdapter(adapter); } }
最佳答案
首先你不需要使用asyncTask'doInBackground
执行您的查询。您可以使用 Parse 的 findInBackground方法在后台异步查找对象,而不会阻塞主 UI 线程。
第二,不确定为什么使用 ParseQuery.getQuery("DonAcc");
,如果您尝试从表名“Country”获取数据。所以你应该使用ParseQuery<ParseObject> query = ParseQuery.getQuery("Country");
第三,您使用listView作为成员变量,因此您的类不需要扩展listActivity,相反,它应该只扩展常规Activity。所以,你应该这样做public class Donar_Acceptor_list extends Activity
因此您可以将代码更改为以下内容:
private void findName() {
listview = (ListView) findViewById(R.id.list);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Country");
query.whereEqualTo("DonAcc", "donar"); //assume you have a DonAcc column in your Country table
query.orderByDescending("createdAt"); //Parse has a built createAt
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> nameList, ParseException e) {
if (e == null) {
ArrayList<String> mylist = new ArrayList<String>();
for (ParseObject object: nameList) {
String name = object.getString("name"); //assume you have a name column in your Country table
myList.add(name);
}
adapter = new ArrayAdapter<String>(Donar_Acceptor_list.this,
R.layout.donar_aceptor_discription, myList);
listview.setAdapter(adapter);
} else {
Log.d("error", "Error: " + e.getMessage());
}
}
});
您可以在 onCreate() 方法中调用此方法。不确定你的Donar_Acceptor_list
和R.layout.donar_aceptor_discription
实际上是,所以上面的代码可能无法编译,但想法是使用 Parse 的 findInBackground()
方法而不是使用 asynctask
.
关于java - 使用 Parse.com 从数据库获取数据以显示在 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894217/