2013-03-09 83 views
0

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

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(); 

     } 

三江源!

+0

运行你的代码我知道这一点,但你能提供一个很好的解释,为什么这个错误发生在简单的话?所以像我这样的初学者可以理解。我相信使用本网站的人的智慧和乐于助人! – user2056245 2013-03-09 08:29:17

回答

2

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

+0

非常感谢!你可以提供一个小教程或例子 – user2056245 2013-03-09 08:55:55

+0

如果你可以在问题中发布你的代码 – 2013-03-09 08:58:17

+0

hello sir,我已经在EDITS中添加了我的代码,这将是很好的。 我可以登录到Facebook,但我无法注销。有人建议我使用AsyncTask来达到你的目的,同时我也阅读过它。你能帮我完成这个任务吗? – user2056245 2013-03-09 11:17:12

1

当应用程序尝试在其主线程上执行联网操作时,会引发此异常。在AsyncTask

+0

一个例子将不胜感激!或一个小教程(而不是开发人员网站之一) – user2056245 2013-03-09 08:56:48

+0

你已经接受@AnandYyas的答案 – DjHacktorReborn 2013-03-09 08:57:53

相关问题