我想創建一個使用Facebook SDK登錄Facebook的應用程序。 我成功實現了使用相同的登錄功能。 (我還想提到我使用的是已棄用的函數,以後我會切換到更多的東西,我想先解決我在這裏遇到的問題)。 但是我在實現註銷功能時遇到了問題。我做了我的研究,發現我需要在AsyncTasks中實現網絡功能以獲得更好的性能。那麼,我應該使用AsyncTask來實現這個功能嗎?以下是我的代碼。 請建議所需的任何更正,並進一步閱讀和文章,以清除我的基本概念。我是Android新手,在理解AsyncTasks時遇到問題。使用AsyncTask爲Facebook使用Facebook SDK實現註銷功能
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;
}
所以在我的開關情況下,如果會話是無效的,我在我的按鈕,我得到登錄到Facebook的點擊沒有任何問題 和我的觀點(按鈕)也得到更新。 但是當會話有效,我得到了著名的例外
android.os.networkonmainthreadexception
,我應該把我的
new myAsyncClass().doInBackground(fb);
請建議我!我完全堅持。
我做了你所告訴的。但現在我的應用程序崩潰 – user2056245 2013-03-09 12:40:53
您可以請發佈LogCat? – Swayam 2013-03-09 12:43:07
我可以給你發送整個代碼嗎?在Facebook上也許? – user2056245 2013-03-09 12:49:06