在Android应用程序中为Facebook注销功能
我正在实现以下简单功能。 我有一个简单的按钮,点击我可以登录到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();
}
三江源!
这里的问题很简单,你需要在一个单独的线程上调用Web服务调用(或者你所拥有的)。所以,很简单,您需要研究如何使用Android进行线程化。不幸的是,这可能有点痛苦,因为你需要在一个单独的线程上进行服务调用,但是你需要更新主线程上的UI。通常这需要在线程之间传递数据,这涉及到处理程序或其他复杂性。幸运的是,Android平台提供了异步任务来处理这个问题,这可以减轻一些复杂性,并且可以帮助您避免代码中的混乱。
非常感谢!你可以提供一个小教程或例子 – user2056245 2013-03-09 08:55:55
如果你可以在问题中发布你的代码 – 2013-03-09 08:58:17
hello sir,我已经在EDITS中添加了我的代码,这将是很好的。 我可以登录到Facebook,但我无法注销。有人建议我使用AsyncTask来达到你的目的,同时我也阅读过它。你能帮我完成这个任务吗? – user2056245 2013-03-09 11:17:12
当应用程序尝试在其主线程上执行联网操作时,会引发此异常。在AsyncTask
一个例子将不胜感激!或一个小教程(而不是开发人员网站之一) – user2056245 2013-03-09 08:56:48
你已经接受@AnandYyas的答案 – DjHacktorReborn 2013-03-09 08:57:53
运行你的代码我知道这一点,但你能提供一个很好的解释,为什么这个错误发生在简单的话?所以像我这样的初学者可以理解。我相信使用本网站的人的智慧和乐于助人! – user2056245 2013-03-09 08:29:17