2012-05-14 13 views
0

我試圖在我的android設備上運行Facebook應用程序。該應用程序是一個簡單的發佈按鈕。在仿真器中運行正常,但在設備中,在調試模式(eclipse)中捕獲到以下消息。當我在Android設備上運行它時,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,參數的名稱是「消息」和你插入的訪問令牌姓名的消息參數。 它應該是:

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

沒有必要添加的訪問托克,該SDK會替你。

+0

現在我正在使用正確的參數(「消息」),但在設備中仍然無法使此方法正常工作。 thx – Jas

+0

現在出現的錯誤如下: {「error」:{「message」:「必須使用活動訪問令牌來查詢有關當前用戶的信息。」,「type」:「OAuthException」, 「code」:2500}} – Jas

+0

聽起來像你有認證問題。如果用戶通過身份驗證,則不應出現該消息。 –

相關問題