2

我目前正在开发一个 Android 应用程序目标构建是 4.0 Ice-Cream Sandwich。

到目前为止,我可以使用以下代码在 Facebook 上发布普通文本:

public void postToWall() {

      // post on user's wall.

        facebook.dialog(this, "feed", new DialogListener() {

    @Override
    public void onFacebookError(FacebookError e) {
    }

    @Override
    public void onError(DialogError e) {
    }

    @Override
    public void onComplete(Bundle values) {
    }

    @Override
    public void onCancel() {
    }
        });

}

但是,我无法将带有字幕的照片发布到 Facebook。我在网上搜索,我发现的代码之一是:

public void postToWall() {
        // post on user's wall.
        byte[] data = null;

        Bitmap bi = BitmapFactory.decodeFile(photoToPost);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        data = baos.toByteArray();

        Bundle params = new Bundle();
        params.putString("method", "photos.upload");
        params.putByteArray("picture", data);

        AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);
        mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null);

    }

问题是,上面的代码不起作用,因为我不知道是什么:

1.照片发布

2. mAsyncRunner .request 不断给我一个错误,指出我不能输入“null”,因为这是一个无效的论点

3. SampleUploadListener,据说来自 FacebookSDK 不能正常工作(我不断收到创建类的错误)

这里有更简单的代码吗?或者有人可以向我解释我遇到的错误。

到目前为止,我正在使用“On Click”将普通文本发布到 Facebook 上,它指向这种方法。我的目标是将带有标题的照片上传到 Facebook。

谢谢大家的帮助!

4

5 回答 5

0

1-这是您将发送到墙上的照片,它可以是来自您的 SD 卡或其他任何地方的图像

2-这是来自 Facebook SDK 的一个类,它接受 facebook 对象(你之前创建的一个)

3-这又是来自 Facebook SDK 的一个类

您的 Facebook SDK 似乎有问题尝试使用右键单击项目 >> 属性 >> Android 再次设置它并查看库是否存在

于 2012-11-28T08:29:08.143 回答
0

请参阅此链接。这将向您展示如何在 Facebook 墙上发布图像以及如何在墙上发布文本。

它很好学。

于 2012-11-28T08:23:19.390 回答
0

问题在于以下行

mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null);

您将 null 作为图形路径传递,这应该是这样的 = "me/feed"

更新 写这行代码

mAsyncRunner.request("me/feed", params, "POST", new SampleUploadListener(), null); 

那么它应该可以工作。

于 2012-11-28T09:31:09.853 回答
0
public class CardShared extends Activity{

public static final String APP_ID = "YOUR APP ID";
private Facebook mFacebook;
private AsyncFacebookRunner mAsyncRunner ;
boolean isLoggedIn = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // setContentView(R.layout.main);
    mFacebook = new Facebook(APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(mFacebook);

    //Implementing SSO
    mFacebook.authorize(this, new String[]{"publish_stream"}, new DialogListener(){

        public void onComplete(Bundle values) {

            sharePicture(values.getString(Facebook.TOKEN));
            Toast.makeText(getApplicationContext(), "Picture Shared Successfully", Toast.LENGTH_SHORT).show();
            CardShared.this.finish();
        }


        public void onFacebookError(FacebookError e) {
            Log.d("FACEBOOK ERROR","FB ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
        }


        public void onError(DialogError e) {
            Log.e("ERROR","AUTH ERROR. MSG: "+e.getMessage()+", CAUSE: "+e.getCause());
        }


        public void onCancel() {
            Log.d("CANCELLED","AUTH CANCELLED");
        }
    });
}

//updating Status
public void sharePicture(String accessToken){

    byte[] data = null;
    try {
        Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.image_to_be_uploaded);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        data = baos.toByteArray();

        Bundle params = new Bundle();
        params.putString("method", "photos.upload");
        params
                .putString(Facebook.TOKEN, mFacebook
                        .getAccessToken());
        params.putByteArray("picture", data);
        mAsyncRunner.request(null, params, "POST",
                new SampleUploadListener(), null);

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

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d("onActivityResult","onActivityResult");
    mFacebook.authorizeCallback(requestCode, resultCode, data);
}
public class SampleUploadListener extends BaseRequestListener {

    public void onComplete(final String response, final Object state) {
        try {

            Log.d("Facebook-Example", "Response: " + response.toString());
            JSONObject json = Util.parseJson(response);
            final String f = json.getString("src");

        } catch (JSONException e) {
            Log.w("Facebook-Example", "JSON Error in response");
        } catch (FacebookError e) {
            Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
        }
    }
}

}

于 2012-11-28T10:45:50.380 回答
0

像这样放

mAsyncRunner.request("me/feed", params, "POST", new SampleUploadListener())
于 2013-02-11T13:40:55.460 回答