0

次のコードを使用して、AndroidアプリからFacebookに画像を読み込みます。android用のfacebooksdkをインストールしました。しかし、アプリは意図したことをしていません。logcatで「無効なアプリケーションID」を取得しています。私はどのような間違いを犯していますか?

Button mButton=(Button)findViewById(R.id.button);

mButton.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             Facebook mFacebook=new Facebook(yourAppID)

    byte[] data = null;
    Bitmap bi = BitmapFactory.decodeFile(imageLink);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bi.compress(Bitmap.CompressFormat.PNG, 100, baos);
    data = baos.toByteArray();

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

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







public class SampleUploadListener extends BaseRequestListener {

    @SuppressWarnings("unused")
    public void onComplete(final String response, final Object state) {
        try {
            Log.d("Facebook-Example", "Response: " + response.toString());
            JSONObject json = Util.parseJson(response);
            String src = json.getString("src");

            PublishImage.this.runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Successfully Uploaded", Toast.LENGTH_SHORT)
                            .show();
                }
            });
        } catch (JSONException e) {
            Log.w("Facebook-Example", "JSON Error in response");
        } catch (FacebookError e) {
            Log.w("Facebook-Example", "Facebook Error: " + e.getMessage());
        }
    }
}

public abstract class BaseRequestListener implements RequestListener {

    public void onFacebookError(FacebookError e, final Object state) {
        Log.e("Facebook", e.getMessage());
        e.printStackTrace();
    }

    public void onFileNotFoundException(FileNotFoundException e,
            final Object state) {
        Log.e("Facebook", e.getMessage());
        e.printStackTrace();
    }

    public void onIOException(IOException e, final Object state) {
        Log.e("Facebook", e.getMessage());
        e.printStackTrace();
    }

    public void onMalformedURLException(MalformedURLException e,
            final Object state) {
        Log.e("Facebook", e.getMessage());
        e.printStackTrace();
    }

}

Logcat

06-15 20:00:55.398: W/KeyCharacterMap(629): No keyboard for id 0
06-15 20:00:55.398: W/KeyCharacterMap(629): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-15 20:01:02.438: D/dalvikvm(629): GC_EXTERNAL_ALLOC freed 1214K, 59% free 2755K/6599K, external 1995K/2266K, paused 630ms
06-15 20:01:08.998: D/MediaPlayer(629): getMetadata
06-15 20:01:15.529: D/Facebook-Example(629): Response: {"error_code":101,"error_msg":"Invalid application ID.","request_args":[{"key":"method","value":"photos.upload"},{"key":"format","value":"json"}]}
06-15 20:01:15.529: W/Facebook-Example(629): Facebook Error: Invalid application ID.

編集:これはうまくいった

class ButtonListener1 implements View.OnClickListener{

    Facebook facebook=new Facebook(ID);

    @Override
    public void onClick(View v) {

        facebook.authorize(Pic.this, new String[] { "publish_stream" },
                new DialogListener() {

            @Override
            public void onFacebookError(FacebookError e) {
            // TODO Auto-generated method stub
            }

            @Override
            public void onError(DialogError dialogError) {
            // TODO Auto-generated method stub
            }

            @Override
            public void onComplete(Bundle values) {
                postToWall(values.getString(Facebook.TOKEN));                                              
            }

            private  void postToWall(String accessToken) {    


                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
                byte[] data = baos.toByteArray();
                Bundle bundle = new Bundle();

                bundle.putString(Facebook.TOKEN, accessToken);
                bundle.putByteArray("facebookPictureData", data);
                // The byte array is the data of a picture.
                bundle.putByteArray("picture", getIntent().getExtras().getByteArray("data"));

                try {
                    facebook.request("me/photos", bundle, "POST");

                } catch (FileNotFoundException fileNotFoundException) {
                   // makeToast(fileNotFoundException.getMessage());
                } catch (MalformedURLException malformedURLException) {
                   // makeToast(malformedURLException.getMessage());
                } catch (IOException ioException) {
                   // makeToast(ioException.getMessage());
                }
            }


            @Override
            public void onCancel() {
            // TODO Auto-generated method stub
            }
        });



     }
}
4

1 に答える 1

1

更新: Facebook API 参照 Web サイトの Facebook.java クラスへのリンクは次のとおりです: http://developers.facebook.com/docs/reference/androidsdk/authentication/。数行下にスクロールして、authorize メソッドを見つけます。自分でスピンした可能性のあるクラスではなく、android SDK の com.facebook.android.Facebook クラスを使用していますか?

Android アプリでの基本的な認証フローは次のとおりです。 1. Facebook クラスのインスタンスを作成します (所有している)。2. 必要な権限で Facebook.authorize() を呼び出します。3. authorize メソッドの DialogListener コールバックで、後で使用するために access_token と有効期限を保存できます。4. Authorize を呼び出したアクティビティで、"onActivityResult メソッドをオーバーライドし、そのメソッドが Facebook の結果コード (Facebook.DEFAULT_AUTH_ACTIVITY_CODE) で呼び出された場合は、受け取ったインテントで Facebook.authorizeCallback を呼び出します。 5. これらの 4 つの手順が完了したら、 , You are free to make Graph API requests with Facebook.request() or AsyncFacebookRunner.request(). これらのリクエスト メソッドでは、最初のパラメーターは、必要なグラフ パスです. したがって、たとえば、パスでリクエスト メソッドを呼び出した場合"自分"、ログインしたユーザーのプロファイル情報を取得します。更新終了-------

手始めに、次の行のコードの最初のパラメーターとしてグラフ パスを必ず指定する必要があると思います。

mAsyncRunner.request("*********7618/photos", params, "POST",
new SampleUploadListener(), null);
}
});

私のコードでは、albumid/photos です。さらに、ユーザーが所有するアルバムにアップロードするには、ユーザーからのアクセス許可が必要です。そのためには、Facebook.authorize() を使用してアクセス トークンを取得する必要があります。

アプリIDが無効であることに関連するエラーが発生する理由を理解できていませんが、写真を投稿する前に写真を投稿するために必要な基本的な手順は次のとおりです.

誰かがすぐにより良い回答を投稿すると確信しています。それまでの間、これが役立つことを願っています。

于 2012-06-15T20:23:18.260 に答える