2013-01-28 4 views
3

Я хотел бы опубликовать сообщение на своей стене через приложение для Android. У меня есть метод loginToFacebook() для входа в систему. При щелчке по кнопке, если пользователь вошел в систему, я хочу, чтобы сообщение было опубликовано. Я не очень хорошо знаком с API facebook, поэтому я посмотрел документацию разработчиков facebook и другие сайты в Интернете, чтобы предложить следующий код. Тем не менее, на моей стене нет сообщений. Очевидно, что я что-то пропустил, но не знаю, как у меня нет ошибки в моем LogCat.Android/Facebook: сообщение на стене

public class ShareActivity extends Activity implements OnClickListener{ 
    Facebook facebook = new Facebook("477110419013909"); 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    String FILENAME = "AndroidSSO_data"; 
    SharedPreferences mPrefs; 


    public void onClick(View arg0) { 
     loginToFacebook(); 
     if (facebook.isSessionValid()) { 
      Bundle bundle = new Bundle(); 
      bundle.putString("message","Hey Facebook!"); 
      try { 
       String strRet = facebook.request("/me/feed",bundle,"POST"); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       Log.e("Facebook", "Error: " + e.getMessage()); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       Log.e("Facebook", "Error: " + e.getMessage()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       Log.e("Facebook", "Error: " + e.getMessage()); 
      } 

} 

public void loginToFacebook() { 
    mPrefs = getPreferences(MODE_PRIVATE); 
    String access_token = mPrefs.getString("access_token", null); 
    long expires = mPrefs.getLong("access_expires", 0); 

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

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

    if (!facebook.isSessionValid()) { 
     facebook.authorize(this, 
       new String[] { "email", "publish_stream" }, 
       new DialogListener() { 

        @Override 
        public void onCancel() { 
         // Function to handle cancel event 
        } 

        @Override 
        public void onComplete(Bundle values) { 
         // Function to handle complete event 
         // Edit Preferences and update facebook acess_token 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", 
           facebook.getAccessToken()); 
         editor.putLong("access_expires", 
           facebook.getAccessExpires()); 
         editor.commit(); 
        } 

        @Override 
        public void onError(DialogError error) { 
         // Function to handle error 

        } 

        @Override 
        public void onFacebookError(FacebookError fberror) { 
         // Function to handle Facebook errors 

        } 

       }); 
    } 
} 
} 

Я пытался сделать

if (facebook.isSessionValid()) { 
      Bundle bundle = new Bundle(); 
      bundle.putString("message","Hey Facebook!"); 

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

         public void onComplete(Bundle values) { 
         } 

         public void onFacebookError(FacebookError error) {} 
         public void onError(DialogError e) {} 
         public void onCancel() {} 
      }); 
} 

Не работает либо

+0

братан, как вы решить проблему? у меня такая же проблема –

ответ

-1

меня использовать этот класс активности для почтового изображения:

public class PostStatusFBActivity extends Activity { 
private static String[] PERMISSIONS = 
      new String[] {"photo_upload","publish_stream"}; 

Bundle parems; 
//String status; 
private AsyncFacebookRunner mAsyncRunner; 
public final static String FB_APP_ID = "xxxxxxxx"; 
private Facebook fb; 
private Handler mHandler; 
//private ProgressDialog mProgressDialog; 
//private static String app_secret = "51a4b033e6cdbddf5761101d3eb09881"; 

/** 
* @see android.app.Activity#onCreate(Bundle) 
*/ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mHandler = new Handler(); 

    Intent intent=getIntent(); 
    parems=intent.getBundleExtra("params"); 
    fb= new Facebook(PostStatusFBActivity.FB_APP_ID); 

    SessionStore.restore(fb, this); 

    if (fb.isSessionValid()) 
     post_status(); 
    else 
     fb.authorize(this, PERMISSIONS,new AppLoginListener()); 

} 

private class AppLoginListener implements DialogListener { 

    public AppLoginListener() { 

    } 

    public void onCancel() { 

     Toast.makeText(getApplicationContext(), "Please accept to login", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 

    public void onComplete(Bundle values) { 
     /** 
     * We request the user's info so we can cache it locally and 
     * use it to render the new html snippets 
     * when the user updates her status or comments on a post. 
     */ 

     mAsyncRunner=new AsyncFacebookRunner(fb); 
     post_status(); 
    } 

    public void onError(DialogError e) { 
     Log.e("BTS", "dialog error: " , e);    
    } 

    public void onFacebookError(FacebookError e) { 
     Log.e("BTS ", "facebook error: " , e); 
     Toast.makeText(getApplicationContext(), "Facebook error", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
} 




protected void onActivityResult(int requestCode, int resultCode,Intent data) { 
    //Facebook fb = Session.wakeupForAuthCallback(); 
    fb.authorizeCallback(requestCode, resultCode, data); 
} 



public void post_status() { 

    Log.e("BTS ____ ", " Post satus called "); 
    mAsyncRunner.request("me/photos", parems,"POST",new mRequestListener(),null); 
} 

public class mRequestListener implements RequestListener{ 

    @Override 
    public void onMalformedURLException(MalformedURLException e, Object state) { 
     Log.d("BTS", "******************* FACEBOOK::onMalformedURLException *******************"); 
     e.printStackTrace(); 
     finish(); 
    } 

    @Override 
    public void onIOException(IOException e, Object state) { 
     Log.d("BTS", "******************* FACEBOOK::onIOException *******************"); 
     e.printStackTrace(); 
     finish(); 
    } 

    @Override 
    public void onFileNotFoundException(FileNotFoundException e, Object state) { 
     Log.d("BTS", "******************* FACEBOOK::onFileNotFoundException *******************"); 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "Image not found", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 

    @Override 
    public void onFacebookError(FacebookError e, Object state) { 
     Log.d("BTS", "******************* FACEBOOK::onFacebookError *******************"); 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "Facebook error", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 

    String msg=""; 

    @Override 
    public void onComplete(String response, Object state) { 
     Log.d("BTS", "******************* FACEBOOK::onComplete *******************"); 

     // TODO Auto-generated method stub 
     Log.d("Facebook-Example", 
       "News feed: " + response.toString()); 
     JSONObject json; 

     /*JSONObject json = Util.parseJson(response); 
      final String pictureURL = json.getString("picture"); 
      if (TextUtils.isEmpty(pictureURL)) { 
     * */ 
     try { 
      json = Util.parseJson(response); 
      Log.d("Facebook-Example", 
        "News feed: " + json.toString(2)); 

      final String post_id = json.getString("post_id"); 
      if (TextUtils.isEmpty(post_id)) { 
       msg="Error in update status"; 
      }else{ 
       msg="Status updated"; 
      } 
      mHandler.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show(); 
         //mProgressDialog.dismiss(); 
         finish(); 
        } 
      }); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (FacebookError e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

}

И здесь Параметры Bundle, которые я перейти от предыдущей деятельности byte[] data = null;
Bundle params = new Bundle();
params.putByteArray("photo", data); params.putString("caption", status);

Других значений, которые можно положить на Bundle params.putString("message", "This string will appear as the status message"); params.putString("link", "This is the URL to go to"); params.putString("name", "This will appear beside the picture"); params.putString("caption", "This will appear under the title"); params.putString("description", "This will appear under the caption"); params.putString("picture", "This is the image to appear in the post");

Смежные вопросы