繁体   English   中英

在用户的Facebook墙上张贴照片

[英]Posting a photo on user's facebook wall

下面是我的代码,我将Facebook集成到了我的应用程序中。 我试图使用户能够在登录后将图像张贴在他的墙上。但是我已经三天没做过了。 见过几个帖子喜欢这样 ,但我不明白(只是它导致空数据的数据data[] 我什至在维护会话方面也遇到麻烦。 能否有人可以发布工作代码,或者至少可以发布一些我可以在Facebook墙上张贴图片的资源? 希望下面的代码清楚,并且对下面的代码所做的解释清楚。

活动的onCreate():-

public class FacebookActivity extends BaseActivity {
private static String APP_ID = "1303786178"; 


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fb_screen);

        btnFbLogin = (Button) findViewById(R.id.fbloginbtn);
        btnFbLogout = (Button) findViewById(R.id.fblogoutbtn);
        btnPostToWall = (Button) findViewById(R.id.fbpostbtn);
        msget = (EditText)findViewById(R.id.fbmsget);
        mAsyncRunner = new AsyncFacebookRunner(facebook);
         mHandler = new Handler();
        String passedpath = getIntent().getStringExtra("imagepath").toString();

        imageuri = Uri.parse(passedpath);

        /**
         * Login button Click event
         * */
        btnFbLogin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("Image Button", "button Clicked");
                loginToFacebook();
            }
        });

        btnFbLogout.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("Image Button", "button Clicked");
                logoutFromFacebook();
            }
        });


        /**
         * Posting to Facebook Wall
         * */
        btnPostToWall.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                //postToWall(imageuri);

                getAlbumId();
            }
        });


           }

在我的代码中在Wall上发布包含两个函数,一个是getAlbumId(),另一个是posttowall(),它将从getAlbumId()调用:

public void getAlbumId()
     {

         dialog = ProgressDialog.show(FacebookActivity.this, "","Please Wait...", true, true);

         //String wallAlbumID = null;
         mAsyncRunner.request("me/albums", new BaseRequestListener(){

            @Override
            public void onComplete(String response, Object state) {
                // TODO Auto-generated method stub
                try{
                Log.d("response in album"," "+response);
                JSONObject json = Util.parseJson(response);
                 JSONArray albums = json.getJSONArray("data");
                 for (int i =0; i < albums.length(); i++) {
                     JSONObject album = albums.getJSONObject(i);
                     if (album.getString("type").equalsIgnoreCase("wall")) {
                        final String wallAlbumID = album.getString("id");
                        globalalbid = wallAlbumID;
                         Log.d("JSON", wallAlbumID);
                         break;
                     }

                 }

                 dialog.dismiss();
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "id: " + globalalbid, Toast.LENGTH_LONG).show();
                            if(globalalbid != "")
                            postToWall(imageuri, globalalbid);
                        }
                    });

                }catch (JSONException e) {
                    e.printStackTrace();
                }

            }

         });

          }

在墙上张贴的功能:

public void postToWall(Uri locuri, String wallid) {

        if (facebook.isSessionValid()) {
            Util.showAlert(this, "Warning", "You must first log in.");
        } else {
            dialog = ProgressDialog.show(FacebookActivity.this, "","Please Wait...", true, true);


        // post on user's wall.
         Uri photoUri = locuri;
         if (photoUri != null) {
             Bundle params = new Bundle();
             try {
                 params.putByteArray("photo",
                         Utility.scaleImage(getApplicationContext(), photoUri));
             } catch (IOException e) {
                 e.printStackTrace();
             }
             String imagecaption = msget.getText().toString();
             if(imagecaption != "")
             params.putString("caption", imagecaption);
             mAsyncRunner.request(wallid+"/photos", params, "POST", new PhotoUploadListener(), null);
         } else {
             Toast.makeText(getApplicationContext(),
                     "Error from the pic", Toast.LENGTH_SHORT)
                     .show();
         }
        }
     } 


}

我总是将专辑ID清空。 我尝试获取专辑ID的方式有问题吗? 因为我在某些帖子上看到过那些尝试访问相册ID,然后将图像发布到相册上的人。 他们似乎把墙作为专辑名称中的常见发现。 如果是这样,那么一些新照片中将包含时间轴照片名称,那么我们如何才能找到相册ID。 请提出建议。

注意:我希望图像不仅在相册上显示在墙上。

不要将照片上传到用户的相册,而是将图像发布到/me/feed 确保您正在询问用户publish_stream权限。 这会将照片直接上传到用户的墙上,而不是相册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM