java - Parse.com 如何将 ParseUser 添加到当前用户的好友列表

标签 java android eclipse parse-platform

在我的应用程序中,我试图创建一个与 CurrentUser 相关的好友列表,我尝试查看 Parse.com 的文档,并在 Parse.com 上提出了有关此问题的问题,解析器建议我这样做以数组列的形式。我已经这样做了,尽管它似乎与 CurrentUser 相关(我创建了 3 个帐户并使它们成为彼此的 friend ,并且这 3 个帐户具有从 ListView 检索到的不同数组列)这不是我的我正在寻找,因为它只是帐户的用户名,而不是对用户执行操作的各个“行”(如果您明白我的意思的话)。

所以我要问的问题是, 使用 Parse 后端数据库根据 CurrentUser 方法创建用户“好友列表”的最佳实践是什么?

这是我的 2 个 Activity ,其中 FindFriends 是我搜索用户并将其添加到“好友列表”的地方,而 PlayAFriend 是我在其中通过 AdapterArray ListView 加载好友用户的地方。

FindFriends 类

package com.fullfrontalgames.numberfighter;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseUser;
import com.urbanairship.UAirship;

public class Findfriends extends Activity {

    protected static final String TAG = null;

    ParseObject po;

    @Override
    public void onStart() {
        super.onStart();
        UAirship.shared().getAnalytics();

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.findfriends);

        final EditText sbar = (EditText)findViewById(R.id.PlayerSeachBar);
        Button search = (Button)findViewById(R.id.Search);
        Button Add = (Button)findViewById(R.id.Add);
        final TextView ResultText = (TextView)findViewById(R.id.ResultTextView);
        final FrameLayout ResultFrame = (FrameLayout)findViewById(R.id.ResultFrameLayout);

        ResultFrame.setVisibility(View.GONE);

        search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final String username = sbar.getText().toString();

                final ParseQuery query = ParseUser.getQuery();
                query.whereEqualTo("username", username);
                query.findInBackground(new FindCallback() {

                    @Override
                    public void done(List<ParseObject> objects, ParseException e) {
                        // TODO Auto-generated method stub
                        try {
                            ParseObject userObject = objects.get(0);
                            ResultText.setText(userObject.getString("username"));
                            ResultFrame.setVisibility(View.VISIBLE);

                            Toast.makeText(getApplicationContext(), "Player Found",
                                    Toast.LENGTH_LONG).show();
                        } catch (Exception e2) {
                            e2.printStackTrace();
                            Toast.makeText(getApplicationContext(), "Username Not Found",
                                    Toast.LENGTH_LONG).show();
                        }

                    }
                });

            }
        });

        Add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String Friends = sbar.getText().toString();
                ParseUser currentUser = ParseUser.getCurrentUser();
                if (currentUser != null) {
                    {
                        currentUser.add("friend", Friends);
                        currentUser.saveInBackground();

                        Toast.makeText(getApplicationContext(), "Player Has Been Added",
                                Toast.LENGTH_LONG).show();

                    }
                }

            }
        });

    }

    @Override
    public void onStop() {
        super.onStop();

    }
}

PlayAFriend 类

package com.fullfrontalgames.numberfighter;

import java.util.ArrayList;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.parse.ParseObject;
import com.parse.ParseUser;
import com.urbanairship.UAirship;

public class PlayAFriend extends ListActivity {
    private static final String TAG = null;

    Cursor fFriends;

    DBAdapter db;

    ParseObject objects;

    int from;

    @Override
    public void onStart() {
        super.onStart();
        UAirship.shared().getAnalytics();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playafriend);

        final ParseUser currentUser = ParseUser.getCurrentUser();
        if (currentUser != null) {
            ArrayList<String> friendslist = new ArrayList<String>();
            final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1);
            ListView friendlv = (ListView)findViewById(android.R.id.list);
            friendlv.setAdapter(listAdapter);

            String friend = currentUser.get("friend").toString();
            listAdapter.add(friend);
        }
    }
}

最佳答案

我自己使用文档中的 ParseRelation 方法解决了问题。这是我如何向当前用户添加 friend 的示例!

FindFriends 类

public class Findfriends extends Activity {

    protected static final String TAG = null;

    ParseObject po;

    @Override
    public void onStart() {
        super.onStart();
        UAirship.shared().getAnalytics();

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.findfriends);

        final EditText sbar = (EditText)findViewById(R.id.PlayerSeachBar);
        Button search = (Button)findViewById(R.id.Search);
        Button Add = (Button)findViewById(R.id.Add);
        final TextView ResultText = (TextView)findViewById(R.id.ResultTextView);
        final FrameLayout ResultFrame = (FrameLayout)findViewById(R.id.ResultFrameLayout);

        ResultFrame.setVisibility(View.GONE);

        search.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final String username = sbar.getText().toString();

                final ParseQuery query = ParseUser.getQuery();
                query.whereEqualTo("username", username);
                query.findInBackground(new FindCallback() {

                    @Override
                    public void done(List<ParseObject> objects, ParseException e) {
                        // TODO Auto-generated method stub
                        try {
                            ParseObject userObject = objects.get(0);
                            ResultText.setText(userObject.getString("username"));
                            ResultFrame.setVisibility(View.VISIBLE);

                            Toast.makeText(getApplicationContext(), "Player Found",
                                    Toast.LENGTH_LONG).show();
                        } catch (Exception e2) {
                            e2.printStackTrace();
                            Toast.makeText(getApplicationContext(), "Username Not Found",
                                    Toast.LENGTH_LONG).show();
                        }

                    }
                });

            }
        });

        Add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String Friends = sbar.getText().toString();
                final ParseUser currentUser = ParseUser.getCurrentUser();
                if (currentUser != null) {
                    {

                        final ParseObject friend = new ParseObject("Friends");
                        friend.put("username", Friends);

                        friend.saveInBackground(new SaveCallback() {

                            @Override
                            public void done(ParseException e) {
                                // TODO Auto-generated method stub
                                ParseRelation relation = currentUser.getRelation("Friends");
                                relation.add(friend);
                                currentUser.saveInBackground();
                            }

                        });

                        Toast.makeText(getApplicationContext(), "Player Has Been Added",
                                Toast.LENGTH_LONG).show();

                    }
                }

            }
        });

    }

    @Override
    public void onStop() {
        super.onStop();

    }
}

PlayAFriend 类

public class PlayAFriend extends ListActivity {
    private static final String TAG = null;



    ParseObject objects;



    @Override
    public void onStart() {
        super.onStart();
        UAirship.shared().getAnalytics();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playafriend);

        final ParseUser currentUser = ParseUser.getCurrentUser();
        if (currentUser != null) {

            final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1);
            ListView friendlv = (ListView)findViewById(android.R.id.list);

            Button play = (Button)findViewById(android.R.id.button1);
            play.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                }
            });
            friendlv.setAdapter(listAdapter);

            ParseRelation relation = currentUser.getRelation("Friends");

            ParseQuery query = relation.getQuery();

            query.whereEqualTo("username", null);

            query.findInBackground(new FindCallback() {

                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    // TODO Auto-generated method stub
                    for (int i = 0; i < objects.size(); i++) {
                        ParseObject r = objects.get(i);
                        String name = r.getString("username").toString();

                        listAdapter.add(name);
                    }

                }
            });
        }

    }

}

关于java - Parse.com 如何将 ParseUser 添加到当前用户的好友列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004035/

相关文章:

java - 使用温和的传输

java - 在 Eclipse Debugger (for Java) 中,有没有办法检查任意值?

java - Java 安全对话框的外观

java - Spring 启动 : Cannot determine embedded database driver class for database type NONE

android - AlertDialog 这是一个错误吗?

Android:我应该使用什么来运行后台长期 Activity ?

java - 如何在 iText 7 中创建/设置表格单元格和边框的自定义颜色?

java - 如何将 native 数据库运算符 (postgres ~) 与 JPA 条件生成器一起使用?

java - Maven 对于我的应用程序来说是一个好的解决方案吗

java - 无论如何在未连接时关闭 Eclipse Subversion 中的 "show history"任务?