【问题标题】:Fetch data from database to display in a listview using Parse.com使用 Parse.com 从数据库中获取数据以显示在列表视图中
【发布时间】:2014-11-12 18:43:52
【问题描述】:

我想使用 parse.com 在数据库列中的列表视图中显示特定数据,我只是不知道具体怎么做,下面是代码,这里有一个错误,但你可以完全改变它来解决它!

公共类 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); } }

【问题讨论】:

  • 检查我的答案以获得完整的程序:stackoverflow.com/a/26892496/4232337
  • 谢谢,但你能给我一个代码吗?因为我是新手,这可能很愚蠢,但如果你这样做,我会非常感激。
  • 我在其他解决方案中提供的链接为您提供了大量代码解释。我相信您将能够轻松理解它并使其适应您的特定解决方案
  • stackoverflow.com/questions/12821759/…这里说的更清楚了!

标签: java android database listview parse-platform


【解决方案1】:

首先你不需要使用 asyncTask' doInBackground 来执行你的查询。您可以使用 Parse 的 findInBackground 方法在后台异步查找对象,而不会阻塞您的主 UI 线程。

其次,如果您尝试从表名“Country”中获取数据,不确定您为什么使用ParseQuery.getQuery("DonAcc");。所以你应该使用ParseQuery&lt;ParseObject&gt; 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。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2013-02-15
  • 2018-10-25
  • 1970-01-01
  • 2021-08-11
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多