2012-10-03 29 views
1

我想在Facebook登錄完成時啓動一個新活動,發生在DialogListener中。登錄成功完成沒有錯誤,但活動未啓動。如果你需要logcat,我可以給你發郵件。 以下是我的代碼。想要開始新的登錄完成活動

這裏是我的HomeActivity

package com.example.faceb; 

import com.facebook.android.AsyncFacebookRunner; 
import com.facebook.android.Facebook; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class HomeActivity extends Activity implements OnClickListener{ 
    private static final String TAG = "Facebook"; 
    private Button mLogin, mLogout, mShare; 
    private Facebook facebook; 
    private AsyncFacebookRunner abRunner; 

    public boolean flag; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.activity_home); 

     facebook = new Facebook("479652662068145"); 
     abRunner = new AsyncFacebookRunner(facebook); 

     mLogin= (Button) findViewById(R.id.Login); 
     mLogout= (Button) findViewById(R.id.Logout); 

     mLogin.setOnClickListener(this); 
     mLogout.setOnClickListener(this);  
    } 

    @Override 
    public void onClick(View v){ 
     int id = v.getId(); 
     switch(id){ 
      case R.id.Login: 
       FacebookLoginDialog login = new FacebookLoginDialog(this);   
       facebook.authorize(this, login); 
       if (func()==true)   
       { 
        Intent i = new Intent(this, SearchActivity.class); 
        startActivity(i); 
       } 
       break; 
      case R.id.Logout: 
       FacebookLogoutRequest logout = new FacebookLogoutRequest(this); 
       abRunner.logout(this, logout); 
       Toast toast = Toast.makeText(this, "You Are Logged Out", Toast.LENGTH_SHORT); 
       toast.show(); 
       break; 
      default: 
       break; 
     } 
    } 

    public static boolean func() { 
     return true; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_home, menu); 
     return true; 
    } 
} 

並按照我的FacebookLoginDialog類

public class FacebookLoginDialog implements DialogListener{ 
    @Override 
    public void onComplete(Bundle values) { 
     HomeActivity.func(); 
    } 

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

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

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

此對話框啓動按鈕上點擊這是我的HomeActivity。請幫助我搜索了很多,並嘗試但無法解決這個問題。

+1

在** onComplete()**和檢查它是否觸發.. – Renjith

+1

而不是getApplicationContext()你應該嘗試你的活動上下文。 getApplicationContext()有時很棘手。 –

+0

@ Andro我也嘗試過活動上下文。 – Nadeem

回答

1

我認爲,不要在點擊按鈕時啓動對話框,您可以啓動您想要在登錄後啓動的活動。然後調用新活動的onCreate()中的對話框。這樣你就可以關閉onComplete()中的對話框並自動出現新的屏幕。只需在活動中保留一個標誌,並僅在登錄成功時將其設置爲true。這樣,如果對話框關閉後標誌爲false,你就可以完成新的活動。

+0

是的,我明白你在說什麼,但我不想這樣做。 – Nadeem

+0

好的,然後不要去下一個活動,你可以在你的主屏幕本身做同樣的邏輯。保持一個標誌,並在登錄成功時爲真。然後,在對話框關閉後,只需檢查標誌,如果它是真的,就轉到新的活動。 – Anu

+0

如果我沒有找到解決方案,我會嘗試。你能理解上面的logcat中的錯誤 – Nadeem

1

首先您是否已正確登錄?

嘗試以下方法:

1)註釋的代碼在onComplete()方法,只是把一個日誌消息。

2)你應該優選使用在authorize方法,該方法採用3個參數facebook.authorize(context,permission[],listener)

3),以檢查是否正確地記錄在使用facebook.isSessionValid() { // log a msg}

你必須能夠看到MSG在上述嵌段...然後再開始新的活動

4)此外,如果你可以張貼烏爾MainActivity,我們可以回答更好....

+0

我也分享了homeActivity你可以看看,並告訴我我在哪裏做錯了 – Nadeem

1

使用getApplicationContext在您的onComplete到獲取上下文,你的問題將得到解決。 代碼就會像

Intent i = new Intent(getApplicationContext(), SearchActivity.class); 
    context.startActivity(i); 

我已經檢查了它,它工作正常...

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

       //if(!facebook.isSessionValid()) { 

       facebook.authorize((Activity) ctx, new String[] {"publish_stream"}, new DialogListener() { 
        public void onComplete(Bundle values) { 
         SharedPreferences.Editor editor = mPrefs.edit(); 
         editor.putString("access_token", facebook.getAccessToken()); 
         editor.putLong("access_expires", facebook.getAccessExpires()); 
         editor.commit(); 

         Toast.makeText(getApplicationContext(), "Posting To Your Wall !", Toast.LENGTH_SHORT).show(); 

         Log.d("Graph Api", "Posting To Wall"); 
         try { 
          Bitmap bitmap = BitmapFactory.decodeResource(ctx.getResources(), 
           R.drawable.icon); 
          ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
          bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
          byte[] bitMapData = stream.toByteArray(); 

          String response = facebook.request("me"); 
          Bundle parameters = new Bundle(); 
          parameters.putString("message", "" + edt.getText().toString() + "..."); 
          parameters.putByteArray("picture", bitMapData); 
          response = facebook.request("photos", parameters, 
            "POST"); 
          Log.d("Tests", "got response: " + response); 
          if (response == null || response.equals("") || 
            response.equals("false")) { 
           Log.v("Post Error", "Error Occured While Posting in Facebook"); 
           Toast.makeText(getApplicationContext(), "Error Occured While Posting in Facebook !", Toast.LENGTH_SHORT).show(); 

          } 
          else { 
           Log.v("Post Success", "Posting Succesful in Facebook"); 
           Toast.makeText(getApplicationContext(), "Posting Succesful in Facebook !", Toast.LENGTH_SHORT).show(); 
           edt.setText(""); 
          } 

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

        } 

        public void onFacebookError(FacebookError error) { 
         Toast.makeText(getApplicationContext(), "Error Occured While Authenticating in Facebook !", Toast.LENGTH_SHORT).show(); 
         Log.v("FaceBook Error", ""+error);      
        } 

        public void onError(DialogError e) { 
         Toast.makeText(getApplicationContext(), "DiaLogError Occured While Authenticating in Facebook !", Toast.LENGTH_SHORT).show(); 
         Log.v("DialogError","" + e); 
        } 

        public void onCancel() { 
         Toast.makeText(getApplicationContext(), "You Have Canceled !", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       //} 
      } 
+0

感謝chinmoy當我使用getApplication上下文時,它給出了該行錯誤 – Nadeem

+0

它給錯誤getApplicationContext();未定義爲類型FacebookLoginDialog – Nadeem

+0

我編輯了我的答案男人,你現在可以檢查它。 你也可以從這裏獲得幫助 - https://github.com/chinmoy12/Experiment-Project/tree/master/Exp_Fb_Twt –

0

在nonUIThread使用意圖不能火活動。你應該在onComplete()中使用回調函數,通知該用戶註銷或登錄成功。然後在回調函數的幫助下調用Activity中的Intent之後..

+0

我已經理解了這個錯誤。但不能真正考慮如何在onComplete()中使用回調函數() – Nadeem

+0

在您的onComplete()中調用此方法之後,您應該使用接口在您的intent中激活。 – yokees

+0

嗨Rishabh我編輯了我的上面的代碼檢查它。這不是幫助 – Nadeem