Android parse.com连接错误

时间:2014-02-25 12:07:47

标签: android listview binding parse-platform

我使用 parse.com 开发了一个消息应用程序,在解析com中有几个类我的数据浏览器。

如果类类型为custom,我可以将列中的数据绑定到我的列表视图。是类型用户或安装,我无法获取我的数据并绑定到listview。我想有一个关于此的安全规则。好吧,我如何获得“用户”和“安装”类类型的值?

有我的代码,我可以添加什么?

  @Override
    protected Void doInBackground(Void... params) {
        // Locate the class table named "User" in Parse.com


        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "User");

        //query.orderByDescending("_created_at");


        try {
            ob = query.find();
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

@Override
    protected void onPostExecute(Void result) {
        // Locate the listview in listview_main.xml
        listview = (ListView) findViewById(R.id.listview);
        // Pass the results into an ArrayAdapter
        adapter = new ArrayAdapter<String>(MainActivity.this,
                R.layout.listview_item);
        // Retrieve object "name" from Parse.com database
        for (ParseObject users : ob) {
            adapter.add((String) users.get("username"));
        }
        // Binds the Adapter to the ListView
        listview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();

        // Capture button clicks on ListView items
        listview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // Send single item click data to SingleItemView Class
                Intent i = new Intent(MainActivity.this,
                        SingleItemView.class);
                // Pass data "username" followed by the position
                i.putExtra("username", ob.get(position).getString("username")
                        .toString());
                // Open SingleItemView.java Activity
                startActivity(i);
            }
        });
    }

1 个答案:

答案 0 :(得分:1)

用户对象是私密的,快速谷歌搜索给了我这个:https://parse.com/questions/how-can-i-find-parse-users-that-are-facebook-friends-with-the-current-user

此外,您只能获得自己的安装对象。

如果您只需要为Highscores的目的列出用户,您可以创建一个Highscore对象,其中包含:

username, score

保存分数时,您可以根据需要为用户或Parseinstallation添加分数列。这样,用户可以轻松获得对自己的高分的引用。确保它没有使公共场所不可读的ACL。

现在您可以自由查询Highscores对象。

长答案简短,将您希望在其自身对象中查询的内容分解出来并添加对用户/安装的引用。

或者更简单,反过来说,在高分榜上保持对所有者的引用:

username, score, owner

我非常有信心您可以获得所有者的objectId,无论是用户还是安装。所以像'find Highscores where owner.objectId.equals(myUser.objectId)'这样的查询应该有效。

这是我的应用程序的片段。我可以选择在parse.com对象中保存设置(sharedpreferences),从而在设备之间共享配置文件(解析是我已经实现了自己作为所有解析中心代码的控制器的对象,只是不要与任何来自解析库本身):

private void create() {
    cat.removeAll();
    switchPrefs = new ArrayList<SwitchPreference>();

    currentProfile = parse.getParseProfile().getProfile();

    parse.getParseProfile().getProfiles(new FindCallback<ParseObject>() {

        @Override public void done(List<ParseObject> objects,
                ParseException e) {
            if (e == null) {
                profiles = objects;
                for (ParseObject profile : profiles) {
                    addProfile(profile);
                }
            }
        }
    });
}


private void addProfile(ParseObject profile) {
    SwitchPreference switchPref = new SwitchPreference(getActivity());
    switchPref.setTitle(profile.getString(ParseObjectHelper.Profile.name));
    switchPref.setOrder(switchPrefs.size());
    // switchPref.setKey(String.valueOf(profiles.size()));
    if (currentProfile != null
            && profile.getObjectId().equals(currentProfile.getObjectId())) {
        switchPref.setChecked(true);
    } else {
        switchPref.setChecked(false);
    }

    switchPref.setOnPreferenceChangeListener(new OnProfileChanged());

    cat.addPreference(switchPref);
    switchPrefs.add(switchPref);

    if (!profiles.contains(profile)) {
        profiles.add(profile);
    }
}

因此,对于发现附加到当前用户的每个配置文件,都会添加一个SwitchPreference。

以下是getProfiles(..)的代码:

public void getProfiles(FindCallback<ParseObject> callback) {
    ParseQuery<ParseObject> query = ParseQuery
            .getQuery(ParseObjectHelper.Profile.objectname);
    query.whereEqualTo(ParseObjectHelper.Profile.owner, parseUser);
    query.findInBackground(callback);
}

要创建新配置文件,请执行以下操作:

public void createProfile(final String profilename,
        final GetCallback<ParseObject> callback) {

    final ParseObject newProfile = new ParseObject(
            ParseObjectHelper.Profile.objectname);
    newProfile.put(ParseObjectHelper.Profile.name, profilename);

    // the users ParseUser object
    newProfile.put(ParseObjectHelper.Profile.owner, parseUser); 
    Map<String, ?> preferences = PreferenceManager
            .getDefaultSharedPreferences(context).getAll();
    for (String key : preferences.keySet()) {
        if (key.startsWith("key")) {
            newProfile.put(key, preferences.get(key));
        }
    }
    newProfile.saveEventually(new SaveCallback() {

        @Override public void done(ParseException e) {
            callback.done(newProfile, e);
        }
    });
}