2013-01-14 124 views
4

我正在嘗試使用圖形API發佈某些內容到Facebook牆上,但它不適用於我。 它沒有錯誤,但它也沒有發佈任何東西在我的牆上。使用圖形API發佈在Facebook牆上不工作

這裏是代碼:

public class ActivityName extends Activity{ 


    Dialog dialog; 
    Facebook fb; 
    SharedPreferences sp; 
    String access_token, name, email; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.success); 

      String APP_ID = "MY_ID"; 
      fb = new Facebook(APP_ID); 
      sp = getPreferences(MODE_PRIVATE); 
      access_token = sp.getString("access_token", null); 
      long expires = sp.getLong("access_expires", 0); 

      if(access_token!= null){ 
       fb.setAccessToken(access_token); 
      } 

      if(expires != 0){ 
       fb.setAccessExpires(expires); 
      } 

     ((Button) findViewById(R.id.btn_home)).setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       openContextMenu(v); 

      } 
     }); 

     ((Button) findViewById(R.id.btn_home)).setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { 

      public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 
       // TODO Auto-generated method stub 
       menu.setHeaderTitle("Tell the world!"); 
       menu.add(0, 0, 0, "Facebook"); 
       menu.add(0, 1, 0, "Twitter"); 
       menu.add(0, 2, 0, "Skip"); 
      } 
     }); 

    } 

    public boolean onContextItemSelected(MenuItem item) { 
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 

      switch (item.getItemId()) { 
      case 1: 



       break; 

      case 0: 

       fb.authorize(SuccessActivity.this, new String[]{ "photo_upload,user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener() { 
         public void onComplete(Bundle values) { 
          postToWall(); 
         } 

         public void onFacebookError(FacebookError error) { 
         } 

         public void onError(DialogError e) { 
         } 

         public void onCancel() { 
         } 
        }); 



       break; 


      case 2: 
       Intent i = new Intent(getApplicationContext(),MainActivity.class); 
       startActivity(i); 
       overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 


       break; 
      } 
      return true; 
      } 

    public void onBackPressed() { 

    } 

    @SuppressLint("SdCardPath") 
    public void postToWall() { 
     // post on user's wall. 
     try { 
       if (fb.isSessionValid()) { 
        byte[] data = null; 

        Bitmap bi = BitmapFactory.decodeFile("/sdcard/Asa.jpg"); 
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
        data = baos.toByteArray(); 


        Bundle params = new Bundle(); 
        params.putString(Facebook.TOKEN, fb.getAccessToken()); 
        params.putString("message", "Test from Android AVD"); 
        params.putByteArray("picture", data); 



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

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

    } 

    public class SampleUploadListener extends BaseRequestListener { 

     public void onComplete(final String response, final Object state) { 
      try { 
       // process the response here: (executed in background thread) 
       Log.d("Facebook-Example", "Response: " + response.toString()); 
       JSONObject json = Util.parseJson(response); 
       final String src = json.getString("src"); 

       // then post the processed result back to the UI thread 
       // if we do not do this, an runtime exception will be generated 
       // e.g. "CalledFromWrongThreadException: Only the original 
       // thread that created a view hierarchy can touch its views." 

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

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

} 

誰能品脫什麼遺漏或錯誤在此代碼? 任何想法將不勝感激。

+0

在Facebook開發人員註冊您的應用時,您是否將您的實際ID替換爲「MY_ID」? – onmyway133

+0

是的。我用真實的ID –

+0

檢查你的網絡連接 –

回答

0

下面是一些代碼,我用了一小會兒回做同樣的事情:

function publishPost(session) { 
var $title = $('#title').val(), 
    $story = $('#story').val(), 
    publish = { 
     method: 'stream.publish', 
     message: 'I just entered the Your Perfect Kent Day Competition.', 
     picture : 'http://apps.facebook.com/perfect-kent-day/', 
     link : 'http://apps.facebook.com/perfect-kent-day/', 
     name: 'Enter to win or vote for your faourite story here!', 
     caption: $title, 
     description: $story, 
     actions : { name : 'Apply for Kent Teach Jobs...', link : 'http://www.kent-  teach.com/'} 
    }; 

    FB.api('/me/feed', 'POST', publish, function(response) { 
    //alert('A post had just been published into the stream on your wall.'); 
     $('#before-submit').hide(); 
     $('#after-submit').show(); 
     $('#loading').fadeOut(); 
    }); 
}; 

然後我打電話給publishPost()函數一次與AJAX提交頁面上的表單。希望這個幫助!

+0

糾正我,如果我錯了,但這是Javascript,而問題是關於Android。 – LoungeKatt

相關問題