2012-06-04 38 views
2

我在我的android應用程序中有2個活動。首先,我要求用戶使用Facebook登錄。在用戶登錄後,我收集用戶數據,例如電子郵件,姓名並調用一個新的活動,將這些參數傳遞給它。下面是我的Facebook授權方法:在Facebook登錄後調用新活動| Android

public void loginFB(final View v) 
    {   
     facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() { 

      @Override 
      public void onComplete(Bundle values) { 
       this.getlogininfo(v); 
      } 
      private void getlogininfo(View v) { 
       // TODO Auto-generated method stub 
       logininfo(v);     
      } 

      @Override 
      public void onFacebookError(FacebookError error) {} 

      @Override 
      public void onError(DialogError e) {} 

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

下面是我的logininfo()方法:

public void logininfo(final View v){ 
    mAsyncRunner.request("me", new RequestListener(){  
     @Override 
     public void onComplete(String response, Object state) { 
      try{ 
       Log.d("Profile", response.toString()); 
       JSONObject json = Util.parseJson(response); 
       final String fname1 = json.getString("first_name"); 
       final String lname1 = json.getString("last_name"); 
       final String email = json.getString("email"); 

       Intent fbLogged = new Intent(); 
       Bundle passData = new Bundle(); 
       passData.putString("fname", fname1); 
       passData.putString("lname", lname1); 
       passData.putString("email", email); 
       fbLogged.putExtras(passData); 
       fbLogged.setClass(v.getContext(), RequestFb.class); 
       startActivity(fbLogged);  
      } 
      catch(JSONException e){ 
       Log.w("This", "eror"); 
      }    
     }  
     @Override 
     public void onIOException(IOException e, Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, 
       Object state) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onMalformedURLException(MalformedURLException e, 
       Object state) { 
      // TODO Auto-generated method stub 

     } 

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

     }   
    }); 
    }  

所以,我的新的活動開始於獲取用戶數據的OnComplete()

這很好,但是當用戶點擊登錄並登錄Facebook時,第一個活動頁面會在屏幕上停留幾秒鐘,然後調用下一個活動。有一個滯後。我該如何解決滯後問題?當用戶點擊登錄並且登錄被授權後,它應該讓用戶直接進行第二次活動。有什麼建議麼?

謝謝!

回答

2

很簡單,您正在新線程中運行fb圖形請求(使用AsyncRunner),但只有在該請求完成後纔會開始新活動,這就是爲什麼您會收到「滯後」的原因。

您應該運行在新的活動圖請求,而不是中的第一個,是這樣的:

public void loginFB(final View v) { 
    facebook.authorize(this, new String[] { "email", "read_stream" }, new DialogListener() { 
     @Override 
     public void onComplete(Bundle values) { 
      Intent fbLogged = new Intent(v.getContext(), RequestFb.class); 
      startActivity(fbLogged); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) {} 

     @Override 
     public void onError(DialogError e) {} 

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

public class RequestFb extend Activity { 
    protected void onCreate(Bundle savedInstanceState) { 
     Facebook facebook = new Facebook("YOUR_APP_ID"); 
     AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(facebook); 

     asyncRunner.request("me", new RequestListener(){ 
      try { 
       final JSONObject json = Util.parseJson(response); 
       final String fname1 = json.getString("first_name"); 
       final String lname1 = json.getString("last_name"); 
       final String email = json.getString("email"); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         // use the data 
        } 
       }); 
      } 
      catch(JSONException e) { 
       Log.w("This", "eror"); 
      } 
     }); 

    } 
} 
+0

感謝您指出了這一點。問題已經解決了。我在新的活動中調用圖形請求。謝謝。 – Nerd