使用AsyncTask实现注销功能的Facebook使用Facebook SDK



我想创建一个使用Facebook SDK登录到Facebook的应用程序。我成功地实现了登录功能使用相同的。(我还想提一下,我正在使用已弃用的函数,稍后我会切换到进一步的事情,我想先解决我在这里遇到的问题)。但是我在实现Logout功能时遇到了问题。我进行了研究,发现我需要在AsyncTasks中实现网络功能以获得更好的性能。那么,我应该使用AsyncTask实现这个功能吗?以下是我的代码。请建议任何需要的更正,以及进一步的阅读和文章,以澄清我的基本概念。我是Android的新手,在理解AsyncTasks时遇到了一些问题。

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没有任何问题我的view (button)也会更新。但是当session有效时,我得到了著名的异常

android.os.networkonmainthreadexception

我应该把

放在哪里?
new myAsyncClass().doInBackground(fb);

请推荐我!!我太自负了。

在调用AsyncTask时不能直接调用doInBackground()

您只需 execute() AsyncTask,它遵循一定的执行顺序,如onPreExecute(), doInBackground(), onProgressUpdate()和onPostExecute()。

所以,你应该调用execute()而不是doInBackground()。

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

OnClick按钮退出,但这

new myAsyncClass().doInBackground(fb);

最新更新