2013-03-09 1 views
0

Facebook SDK를 사용하여 페이스 북에 로그온하는 응용 프로그램을 만들고 싶습니다. 동일한 기능을 사용하여 로그인 기능을 구현하는 데 성공했습니다. (나는 또한 deprecated 함수를 사용하고 있음을 언급하고자한다. 나중에 더 많은 것들로 넘어갈 것이고, 나는 여기서 내가 마주 치고있는 문제를 먼저 고치고 싶다.) 하지만 로그 아웃 기능을 구현하는 데 문제가 있습니다. 저의 연구를 통해 성능 향상을 위해 AsyncTasks에 네트워크 기능을 구현해야한다는 것을 알았습니다. 그래서, AsyncTask를 사용하여이 기능을 구현해야합니까? 다음은 내 코드입니다. 기본 개념을 정리하기 위해 필요한 수정 사항과 추가 판독 값 및 조항을 제안하십시오. 나는 Android에 익숙하지 않고 AsyncTasks를 이해하는 데 문제가 있습니다. 다음과 같이 세션이 무효가되어, 내가 아무 문제없이 내가 페이스 북에 로그온 구독하기 버튼을 클릭 하고있는 경우Facebook SDK를 사용하여 페이스 북을위한 로그 아웃 기능을 구현하기 위해 AsyncTask 사용

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

    switch(v.getId()){ 
    case R.id.fb_button: 

     try{ 
     if(fb.isSessionValid()) 
     { 
new myAsyncClass().doInBackground(fb); 
      //button close session 
     } 

     else 
     { 
      fb.authorize(LoginPage.this, new DialogListener(){ 

       @Override 
       public void onFacebookError(FacebookError e) 
       { 
        Toast.makeText(LoginPage.this, "on Facebook error", Toast.LENGTH_SHORT).show(); 
       } 
       @Override 
       public void onError(DialogError e) 
       { 
        Toast.makeText(LoginPage.this, "on error", Toast.LENGTH_SHORT).show(); 
       } 
       @Override 
       public void onComplete(Bundle values) 
       { 
        update_fb_buttonimage(); 

        Toast.makeText(getBaseContext(), "onComplete works",Toast.LENGTH_LONG).show(); 
       } 
       @Override 
       public void onCancel() 
       { 

       } 
      }); 
      //login in to facebook 
     } 

     }catch(Exception e){ 

      Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); 

     } 

내 AsyncTask를 클래스는 .... 내 스위치 경우에 따라서

private class myAsyncClass extends AsyncTask<Facebook, Void, Void>{ 

    protected void onPreExecute() { 
      // update the UI immediately after the task is executed 
      super.onPreExecute(); 



      } 

    @Override 

    protected Void doInBackground(Facebook... arg0) { 
     // TODO Auto-generated method stub 
     Facebook fb=arg0[0]; 
     try { 
      fb.logout(getApplicationContext()); 
      update_fb_buttonimage(); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



     return null; 
    } 

입니다 내보기 (버튼)도 업데이트됩니다. 세션이 유효한 때 하지만, 난 내가

new myAsyncClass().doInBackground(fb); 

저를 제안 해주십시오 내 배치해야합니다 유명한 예외

android.os.networkonmainthreadexception 

를 얻을! 나는 완전히 붙어있다. AsyncTask를 호출하면서

답변

1

사용자가 직접 doInBackground()를 호출하지 않습니다.

하면 단순히 execute() AsyncTask를하고 onPreExecute (AS 실행의 특정 순서를 따른다), doInBackground() onProgressUpdate() 및 onPostExecute().

그래서 doInBackground()를 호출하는 대신 execute()를 호출해야합니다.

if(fb.isSessionValid()) 
     { 
      new myAsyncClass().execute(fb); 

     } 
+0

나는 무엇을 말 했는가. 하지만 지금은 내 응용 프로그램이 충돌하고있다 – user2056245

+0

LogCat을 올리시겠습니까? – Swayam

+0

전체 코드를 보낼 수 있습니까? 아마 Facebook에? – user2056245

0
로그 아웃 버튼을

의 OnClick하지만이

new myAsyncClass().doInBackground(fb); 
+0

죄송합니다. 귀하를 찾으실 수 없습니다. 정교하게 주시겠습니까? 그것은 위대 할 것이다. 감사합니다 – user2056245

+0

@ user2056245 어디에서 로그 아웃 하시겠습니까? fb는 아무 버튼이 있습니까? – DjHacktorReborn

+0

예, 기본 UI 스레드 인 로그인 할 때 사용하는 동일한 버튼 – user2056245