java - 在列表中显示数据时出现问题

标签 java android android-layout android-activity parse-platform

我正在尝试使用 ArrayAdapter 在列表上显示信息,并且信息是从 Parse.com 检索的。为了实现这一点,我在布局中创建了一个 ListView ,并尝试在下面的代码中关联我的 ListView 。在此过程中,我遇到了一些难以解决的错误。

特别是,我收到以下行的以下错误 “List 类型的方法 setAdapter(ArrayAdapter) 未定义”

 mUsers.setAdapter(arrayAdapter);

我已经能够检索到以下信息:

           mParseUser.getString("name");
           mParseUser.getNumber("age"); 
           mParseUser.getString("headline");

但是,我想在我的应用程序中显示它,并且最初考虑使用 ListView 。

下面是我的 Activity 代码 公共(public)类 MatchingActivity 扩展 Activity {

    protected ParseRelation<ParseUser> mFriendsRelation;
    protected ParseUser mCurrentUser;   
    protected List<ParseUser> mUsers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.matching);
        // Show the Up button in the action bar.
         //create list variable
        mUsers = (List<ParseUser>) findViewById(R.id.listView1);



    }
    @Override
    protected void onResume() {
        super.onResume();

        mCurrentUser = ParseUser.getCurrentUser();


        setProgressBarIndeterminateVisibility(true);

        ParseQuery<ParseUser> query = ParseUser.getQuery();
        query.findInBackground(new FindCallback<ParseUser>() {
            public void done(List<ParseUser> users, ParseException e) {
                if (e == null) {



                  //add all the users to your list variable 
                    mUsers.addAll(users); 



                } else {
                    // Something went wrong.
                }
            }
        });

        //check the size of your list to see how big it is before accessing it
        final int size = mUsers.size(); 

       //or use a loop to loop through each one
        for(ParseUser mParseUser : mUsers)
        {
              //skip over the current user
           if(mParseUser == ParseUser.getCurrentUser())
               continue; 

           mParseUser.getString("name");
           mParseUser.getNumber("age"); 
           mParseUser.getString("headline");

           ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                   this, 
                   android.R.layout.simple_list_item_1, Unsure what to input here, 
                   as I want to return all three items (name, age, headline) from parse into the list);
           mUsers.setAdapter(arrayAdapter);
        }

    }
    }   

下面是我的 XML 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

任何帮助将不胜感激,提前致谢。

更新 代码现在使用 ParseQueryAdapter,但我遇到了一些错误,例如:

“类型new ParseQueryAdapter.OnQueryLoadListener(){}必须实现继承的抽象方法 ParseQueryAdapter.OnQueryLoadListener.onLoaded(列表,异常)”

特别是,在以下部分中发现了上述错误:

// Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
         adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
           public void onLoading() {
             // Trigger any "loading" UI
           }

在以下几行中

  public ParseQuery create() {
                 ParseQuery query = new ParseQuery("User");

                 query.orderByDescending("name");
                 return query;
               }
             };

我已设置“User”具有类名称,“name”具有该类的字符串值。我如何将“标题”字符串值和“年龄”数值等其他项目也包含到查询列表中。

完整代码如下:

// Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
 // Adapter.
 ParseQueryAdapter.QueryFactory<ParseObject> factory =
     new ParseQueryAdapter.QueryFactory<ParseObject>() {
       public ParseQuery create() {
         ParseQuery query = new ParseQuery("Customer");
         query.whereEqualTo("activated", true);
         query.orderByDescending("moneySpent");
         return query;
       }
     };

 // Pass the factory into the ParseQueryAdapter's constructor.
 ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(this, factory);
 adapter.setTextKey("name");

 // Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
 adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
   public void onLoading() {
     // Trigger any "loading" UI
   }

   public void onLoaded(List<ParseObject> objects, ParseException e) {
     // Execute any post-loading logic, hide "loading" UI
   }
 });

 // Attach it to your ListView, as in the example above
 ListView listView = (ListView) findViewById(R.id.listview);
 listView.setAdapter(adapter);

更新2 以下是更新后的代码 我做了以下调整

1) 在 public void onloading 之上添加了 @Override 2) 更改 ParseQuery query = new ParseQuery("User"); ParseQuery 查询 = new ParseQuery("User");

由于以下消息“ ParseQuery 是原始类型。对泛型类型 ParseQuery 的引用应该参数化”

下面是更新后的代码

public class MatchingActivity extends Activity {


    protected ParseRelation<ParseUser> mFriendsRelation;
    protected ParseUser mCurrentUser;   
    protected List<ParseUser> mUsers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.matching);
        // Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
         // Adapter.
         ParseQueryAdapter.QueryFactory<ParseObject> factory =
             new ParseQueryAdapter.QueryFactory<ParseObject>() {
               public ParseQuery create() {
                 ParseQuery<ParseUser> query = new ParseQuery<ParseUser>("User");

                 query.orderByDescending("name");
                 return query;
               }
             };

         // Pass the factory into the ParseQueryAdapter's constructor.
         ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(this, factory);
         adapter.setTextKey("name");

         // callback to be fired upon successful loading of a new set of ParseObjects.
         adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
             @Override 
             public void onLoading() {
             // Trigger any "loading" UI
           }

           public void onLoaded(List<ParseObject> objects, ParseException e) {
             // Execute any post-loading logic, hide "loading" UI
           }

        @Override
        public void onLoaded(List<ParseObject> objects, Exception e) {
            // TODO Auto-generated method stub

        }
         });

         // Attach it to your ListView, as in the example above
         ListView listView = (ListView) findViewById(R.id.listViewSingleClick);
         listView.setAdapter(adapter);


    }
        }   

更新3

public class MatchingActivity extends Activity {


    protected ParseRelation<ParseUser> mFriendsRelation;
    protected ParseUser mCurrentUser;   
    protected List<ParseUser> mUsers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.matching);
        // Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
         // Adapter.
         ParseQueryAdapter.QueryFactory<ParseObject> factory =
             new ParseQueryAdapter.QueryFactory<ParseObject>() {
               public ParseQuery create() {
                 ParseQuery<ParseUser> query = new ParseQuery<ParseUser>("User");
                query.setLimit(5);
                 query.orderByDescending("name");
                 return query;
               }
             };

         // Pass the factory into the ParseQueryAdapter's constructor.
         ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(this, factory);
         adapter.setTextKey("name");

         // callback to be fired upon successful loading of a new set of ParseObjects.
         adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
             @Override 
             public void onLoading() {
             // Trigger any "loading" UI
           }



        @Override
        public void onLoaded(List<ParseObject> objects, Exception e) {
            // TODO Auto-generated method stub

        }
         });

         // Attach it to your ListView, as in the example above
         ListView listView = (ListView) findViewById(R.id.listViewSingleClick);
         listView.setAdapter(adapter);


    }
        }

最佳答案

为什么不使用 ParseQueryAdapter https://www.parse.com/docs/android/api/?com/parse/ParseObject.html ? 我认为这是从 Parse 获取数据并将其显示为列表的最佳方式。 如果您想在列表中的数据和列表的可视化表示之间使用一些简单的映射,只需创建新的 ParseQueryAdapter 并从中选择列,您将获取数据到 ListView 项目的图像和文本字段。

   ParseQueryAdapter<ParseUser> adapter = new ParseQueryAdapter<>(this, ParseUser.class);
   adapter.setTextKey("username");
   adapter.setImageKey("userpic");
   mListView.setAdapter(adapter);

查看本教程 https://www.parse.com/tutorials/mealspotting它会对你有帮助

关于java - 在列表中显示数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25121726/

相关文章:

android - 用 00 格式化倒数计时器 :00:00 not working. 显示 00:00:00 直到暂停然后显示剩余时间

android - setOnKeyListener 没有响应

java - 使用 Jackson 对 Scala 案例类进行(反)序列化

java - XAMPP Tomcat/启动 Tomcat 时出错

java - ContentProvider.Query - 如何使用 URI 选择我想要的表?

android - 是否需要为不同的 DPI 创建 Android 布局文件?

css - ionic 框架如何在 ionic 内容图下方放置一个 div 或按钮

android - 在另一个android布局中调用一个android布局来制作嵌套布局

java - 如何从网络项目创建 war 和 jar ?

java - 什么是NullPointerException,我该如何解决?