Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook在android中标记照片->;facebook sdk_Android_Facebook_Api - Fatal编程技术网

Facebook在android中标记照片->;facebook sdk

Facebook在android中标记照片->;facebook sdk,android,facebook,api,Android,Facebook,Api,我正在使用facebookapi做一个android应用程序。它要求用户选择朋友以查看标记的照片。(也就是说,如果用户选择两个名称A和B->他应该能够在一张照片中看到A和B)。为了实际做到这一点,我使用GraphAPI浏览器,但发现很难提出请求调用。请参考图片: 对于我的查询,应使用上述信息。也就是说,当我提供“id(userID)”时,我需要得到“图片” 请告诉我怎么做 这涉及五个步骤: 步骤1: 登录Facebook: private void loginToFacebook()

我正在使用facebookapi做一个android应用程序。它要求用户选择朋友以查看标记的照片。(也就是说,如果用户选择两个名称A和B->他应该能够在一张照片中看到A和B)。为了实际做到这一点,我使用GraphAPI浏览器,但发现很难提出请求调用。请参考图片:

对于我的查询,应使用上述信息。也就是说,当我提供“id(userID)”时,我需要得到“图片”


请告诉我怎么做

这涉及五个步骤:

步骤1:

登录Facebook:

private void loginToFacebook()
       {
           mPrefs = activity.getPreferences(Context.MODE_PRIVATE);
           facebook = new Facebook(APP_ID);
           accessToken = mPrefs.getString("access_token", null);
           long expires = mPrefs.getLong("access_expires", 0);

           if (accessToken != null)
           {
               facebook.setAccessToken(accessToken);
               uploadPhoto(facebook, imageBitmap, null);
           }

           if (expires != 0)
           {
               facebook.setAccessExpires(expires);
           }

           if (!facebook.isSessionValid())
           {
            facebook.authorize(activity, new String[] {"publish_stream"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {

                    public void onFacebookError(FacebookError arg0) {
                        // TODO Auto-generated method stub

                    }

                    public void onError(DialogError arg0) {
                        // TODO Auto-generated method stub

                    }

                    public void onComplete(Bundle arg0) {
                            SharedPreferences.Editor editor = mPrefs.edit();
                            editor.putString("access_token", facebook.getAccessToken());
                            editor.putLong("access_expires", facebook.getAccessExpires());
                            editor.commit();                        
                            uploadPhoto(facebook, imageBitmap, null);                   
                    }

                    public void onCancel() {
                        // TODO Auto-generated method stub

                    }
                });

           }
       }
步骤2:

将图像上载到Facebook(位图已上载),请注意,此方法在登录方法中调用。以下方法返回上载图像的ID,因此在标记朋友时需要此ID:

public  String uploadPhoto(Facebook facebook, Bitmap image, String albumId)
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

            if ( albumId == null ) {
                albumId = "me";
            }

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            image.compress(CompressFormat.JPEG, 75, bos);
            byte[] photoBytes = bos.toByteArray();

            Bundle params = new Bundle();
            params.putString(facebook.TOKEN, accessToken);
            params.putByteArray("picture", photoBytes);

            try {
                @SuppressWarnings("deprecation")
                String resp = facebook.request(albumId + "/photos", params, "POST");
                JSONObject json = Util.parseJson(resp);
                if(json.getString("id") != null){
                    Toast.makeText(activity, "Image Successfully uploaded to facebook!", Toast.LENGTH_SHORT).show();

                    tagFriends();

                }else{
                    Toast.makeText(activity, "Uploading failed, please try again!", Toast.LENGTH_SHORT).show();

                }
                uploadedImageID = json.getString("id");
                return json.getString("id");

            } catch ( IOException e ) {
                Toast.makeText(activity, "Uploading failed, please try again!", Toast.LENGTH_SHORT).show();

            } catch ( FacebookError e ) {
                Toast.makeText(activity, "Uploading failed, please try again!", Toast.LENGTH_SHORT).show();

            } catch ( JSONException e ) {
                Toast.makeText(activity, "Uploading failed, please try again!", Toast.LENGTH_SHORT).show();

            }

            return null;
        }
步骤3:

获取您facebook帐户的所有好友,并将其存储在散列图中:

Bundle params = new Bundle();
                params.putString(Facebook.TOKEN, accessToken);   
                mAsyncRunner.request("me/friends" , params , "GET", new RequestListener()
                {

                    @Override
                    public void onMalformedURLException(MalformedURLException e, Object state)
                    {

                    }

                    @Override
                    public void onIOException(IOException e, Object state)
                    {

                    }

                    @Override
                    public void onFileNotFoundException(FileNotFoundException e, Object state)
                    {

                    }

                    @Override
                    public void onFacebookError(FacebookError e, Object state)
                    {

                    }

                    @Override
                    public void onComplete(String response, Object state)
                    {
                        try
                        {
                            JSONObject responseJsonObject = new JSONObject(response);
                            Log.d("InviteFriends.inviteFriends().new RequestListener() {...}:onComplete", "FB Response =>"+ responseJsonObject);
                            //event_id = event.getString("id");


                            //JSONObject responseJsonObject = new JSONObject(eventResponse);
                            JSONArray jsonArray = responseJsonObject.getJSONArray("data");


                            for (int i = 0; i < jsonArray.length(); i++)
                            {
                                HashMap<String, String> map = new HashMap<String, String>();
                                JSONObject e = jsonArray.getJSONObject(i);

                                map.put("id",    e.getString("id"));
                                map.put("name",  e.getString("name"));
                                mylist.add(map);

                                userIds = e.getString("id");
                                userName = e.getString("name");
                                Log.d("MainActivity:getAllEvents", "Friend ID, Name:" +  userIds + "," + userName);

                            }
                        }
                        catch (Exception e)
                        {
                            Log.e("log_tag", "Error parsing data "+e.toString());
                        }
Bundle参数=新Bundle();
params.putString(Facebook.TOKEN、accessToken);
request(“我/朋友”,参数,“获取”,新RequestListener()
{
@凌驾
MalformedURLException上的公共无效(MalformedURLException e,对象状态)
{
}
@凌驾
公共异常(IOE异常,对象状态)
{
}
@凌驾
公共无效onFileNotFoundException(FileNotFoundException e,对象状态)
{
}
@凌驾
public void onFacebookError(FacebookError e,对象状态)
{
}
@凌驾
public void onComplete(字符串响应、对象状态)
{
尝试
{
JSONObject responseJsonObject=新的JSONObject(响应);
Log.d(“InviteFriends.InviteFriends().newrequestlistener(){…}:onComplete”,“FB Response=>”+responseJsonObject);
//event_id=event.getString(“id”);
//JSONObject responseJsonObject=新的JSONObject(eventResponse);
JSONArray JSONArray=responseJsonObject.getJSONArray(“数据”);
for(int i=0;i
步骤4:

在列表视图中显示名称列表,并从列表中捕获用户接触的用户名的用户ID,并将其存储在数组中:

final ListView friends = (ListView)  findViewById(R.id.lst_frnds);
ListAdapter adapter = new SimpleAdapter(getApplicationContext(), mylist , R.layout.friends_main,  new String[] {"name" }, new int[] {R.id.item_title});
                                Log.d( "size","Friends->" + mylist.size());
friends.setAdapter(adapter);
friends.setOnItemClickListener(new OnItemClickListener() {
                                    public void onItemClick(final AdapterView<?> parent, View view, int position, long id) {
                                        @SuppressWarnings("unchecked")
                                        HashMap<String, String> o = (HashMap<String, String>) friends.getItemAtPosition(position);
                                        String selectedName = o.get("name");
                                        String selectedId = o.get("id");
                                        Toast.makeText(MemeList.this, "Your friend " + selectedName + "' was selected.", Toast.LENGTH_SHORT).show();

                                        selectedFriendsIDs.add(selectedId);
                                        selectedFriendsNames.add(selectedName);
}
final ListView friends=(ListView)findviewbyd(R.id.lst_frnds);
ListAdapter=new SimpleAdapter(getApplicationContext(),mylist,R.layout.friends_main,新字符串[]{“name”},新int[]{R.id.item_title});
Log.d(“size”,“Friends->”+mylist.size());
setAdapter(适配器);
friends.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(最终适配器视图父级、视图视图、整型位置、长id){
@抑制警告(“未选中”)
HashMap o=(HashMap)friends.getItemAtPosition(position);
String selectedName=o.get(“name”);
字符串selectedId=o.get(“id”);
Toast.makeText(MemeList.this,“您的朋友”+selectedName+“”已被选中。”,Toast.LENGTH_SHORT.show();
SelectedFriendsID.add(selectedId);
selectedFriendsNames.add(selectedName);
}
步骤5:

标记列表中选定的朋友:

btnSendInvites.setText(selectedFriendsIDs.size() + " selected, tag them now?");



                                        btnSendInvites.setOnClickListener(new OnClickListener() {

                                            @Override
                                            public void onClick(View v) {

                                                //Tagging friends 
                                                for(int i = 0; i < selectedFriendsIDs.size(); i++){

                                                    String inputParm = uploadedImageID + "/tags?to=" + selectedFriendsIDs.get(i);

                                                    Bundle params = new Bundle();
                                                    params.putString(Facebook.TOKEN, accessToken);   
                                                    mAsyncRunner.request(inputParm, params, "POST", new RequestListener()
                                                    {

                                                        @Override
                                                        public void onMalformedURLException(MalformedURLException e, Object state)
                                                        {

                                                        }

                                                        public void onIOException1(IOException e, Object state)
                                                        {

                                                        }

                                                        @Override
                                                        public void onFileNotFoundException(FileNotFoundException e, Object state)
                                                        {

                                                        }

                                                        @Override
                                                        public void onFacebookError(FacebookError e, Object state)
                                                        {

                                                        }

                                                        @Override
                                                        public void onComplete(String response, Object state)
                                                        {
                                                            Log.d("Selected IDs ", "" + selectedFriendsIDs);
                                                        }

                                                        @Override
                                                        public void onIOException(IOException e, Object state)
                                                        {
                                                            // TODO Auto-generated method stub

                                                        }
                                                    }, null);
                                                }


                                            }
                                        });
btnsendivites.setText(selectedFriendsIDs.size()+“selected,立即标记它们?”);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//标记朋友
对于(int i=0;i