我使用 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);
}
});
}
答案 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);
}
});
}