0

我正在实现以下简单功能。我有一个简单的按钮,点击它可以登录 Facebook。我正在使用 Facebook SDK。当我单击 时,按钮(imageview)的 src 图像也会更新。到目前为止,一切正常。但是当我单击同一个按钮注销时,我得到一个

 android.os.networkonmainthreadexception

例外。谁能帮我解决这个问题?

编辑:我的代码如下:

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

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

        try{
        if(fb.isSessionValid())
        {
            try {
                fb.logout(getBaseContext());
                update_fb_buttonimage();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //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();

        }

谢谢你!

4

2 回答 2

2

这里的问题很简单,您需要在单独的线程上进行 Web 服务调用(或你有什么)。因此,很简单,您需要研究如何使用 Android 进行线程处理。不幸的是,这可能有点痛苦,因为您需要在单独的线程上进行服务调用,但您需要在主线程上更新 UI。通常这需要在线程之间传递数据,这涉及处理程序或其他复杂性。幸运的是,Android 平台提供了 Async Task 来处理这个问题,这减轻了一些复杂性,并且可以帮助您避免代码中的一些混乱。

于 2013-03-09T08:30:51.600 回答
1

当应用程序尝试在其主线程上执行网络操作时,将引发此异常。运行你的代码AsyncTask

于 2013-03-09T08:30:56.910 回答