java - 使用 Parse.com 从数据库获取数据以显示在 ListView 中

标签 java android database listview parse-platform

我想使用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_listR.layout.donar_aceptor_discription实际上是,所以上面的代码可能无法编译,但想法是使用 Parse 的 findInBackground()方法而不是使用 asynctask .

关于java - 使用 Parse.com 从数据库获取数据以显示在 ListView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894217/

相关文章:

java - CRUD 接口(interface)对多个子类型使用一个 Controller

java - RecyclerView 反向无限滚动

java - 在java中将一年中的某一天转换为日期

php - 将数据保存为数组或单个字段 (php/MySQL)

database - 检查表是否为空(MSAccess 数据库 + Delphi)

java - 为什么 @Deprecated 注释不触发有关方法的编译器警告?

java - 如何使用带有 EXTJS 的 Ajax HTTP GET 下载 xlsx?

java - 安卓 java.lang.IllegalArgumentException : View not attached to window manager

Android 6 - 仅在首次运行时写入外部存储失败

sql - 如何在列表框中显示多个字段?