0

我想创建一个使用 Facebook SDK 登录到 facebook 的应用程序。我成功地使用相同的方法实现了登录功能。(我还要提一下我正在使用已弃用的功能,稍后我将切换到更多内容,我想先解决我在这里遇到的问题)。但是我在实现注销功能时遇到了问题。我进行了研究,发现我需要在 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,并且我的视图(按钮)也会得到更新。但是当会话有效时,我得到了著名的异常

android.os.networkonmainthreadexception

我应该把我的

new myAsyncClass().doInBackground(fb);

请建议我!我完全被困住了。

4

2 回答 2

1

doInBackground()在调用 AsyncTask 时不要直接调用。

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

因此,您应该调用 execute(),而不是调用 doInBackground()。

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

        }
于 2013-03-09T12:26:12.650 回答
0

OnClick 按钮退出但这个

new myAsyncClass().doInBackground(fb);
于 2013-03-09T12:19:14.753 回答