2012-05-14 7 views
0

私はアンドロイドデバイスでFacebookブックを実行しようとしています。アプリは簡単なポストボタンです。エミュレータでは正常に動作しますが、デバイスでは次のメッセージがデバッグモード(eclipse)でキャプチャされました。アンドロイドデバイスで実行すると、facebookアプリでエラーコード '100'が生成されます

error message: {"error":{"message":"(#100) Missing message or attachment","type":"OAuthException","code":100}} 

誰かが間違っていることを知っていますか? thx!

私の活動のコードは、私は、これはエミュレータで動作を確認していない

package f.b; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.net.MalformedURLException; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.facebook.android.AsyncFacebookRunner.RequestListener; 
import com.facebook.android.DialogError; 
import com.facebook.android.Facebook; 
import com.facebook.android.Facebook.DialogListener; 
import com.facebook.android.FacebookError; 
import com.facebook.android.AsyncFacebookRunner; 

public class NewFaceAppActivity extends Activity { 
     private final String id = "";//my id here 
    private final String [] permissoes = {"publish_stream"}; 
    private SharedPreferences mPrefs; 
    AsyncFacebookRunner mAsyncRunner; 
    Facebook facebook = new Facebook(id); 
    String access_token = ""; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    login(); 
} 

public void login(){ 

    /* 
    * Get existing access_token if any 
    */ 
    mPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    access_token = mPrefs.getString("access_token", "x"); 
    long expires = mPrefs.getLong("access_expires", -1); 
    if(access_token != null) { 
     facebook.setAccessToken(access_token); 
    } 
    if(expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 
    /* 
    * Only call authorize if the access_token has expired. 
    */ 
    if(facebook.isSessionValid() == false) { 

     facebook.authorize(this, permissoes, -1, new DialogListener() { 
      @Override 
      public void onComplete(Bundle values) { 
       SharedPreferences.Editor editor = mPrefs.edit(); 
       editor.putString("access_token", facebook.getAccessToken()); 
       editor.putLong("access_expires", facebook.getAccessExpires()); 
       editor.commit(); 
      } 

      @Override 
      public void onFacebookError(FacebookError error) {} 

      @Override 
      public void onError(DialogError e) {} 

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

} 

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

@Override 
public void onResume() {  
    super.onResume(); 
    facebook.extendAccessTokenIfNeeded(this, null); 
} 

public void logout(){ 
    mAsyncRunner.logout(getBaseContext(), new RequestListener() { 
      @Override 
      public void onComplete(String response, Object state) {} 

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

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

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

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

     }); 
} 

public void postar(View v){ 
    //if(facebook.isSessionValid()){ 
     EditText et = (EditText) findViewById(R.id.et); 
     Bundle parameters = new Bundle(); 
     String msg = et.getText().toString(); 
     String r = ""; 
     parameters.putString(this.access_token, msg); 
     try { 
      r = facebook.request("me/feed", parameters, "POST"); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Toast.makeText(this, r, Toast.LENGTH_LONG); 
     //}else{login();} 
    } 
} 

答えて

3

を下回っている、あなたは単にバンドルにメッセージパラメータ名を入れていません。

Post objectのマニュアルに記載されているように、パラメータの名前は"message"であり、アクセストークンを名前としてメッセージパラメータを挿入しました。 それは次のようになります。

Bundle parameters = new Bundle(); 
String msg = et.getText().toString(); 
parameters.putString("message", msg); 

アクセスTOKEを追加する必要はありません、SDKはあなたのためにそれを行います。

+0

私は現在、正しいパラメータ( "メッセージ")を使用していますが、デバイスではこのメソッドを正しく動作させることができません。 thx – Jas

+0

現在表示されているエラーは次のとおりです: {"エラー":{"メッセージ": "現在のユーザーに関する情報を照会するためにアクティブなアクセストークンを使用する必要があります。"、 "type": "OAuthException" "code":2500}} – Jas

+0

認証に問題があるようです。そのメッセージは、ユーザーが認証された場合には発生しません。 –

関連する問題