2 markdowneide markdowneide 于 2013.03.19 14:12 提问

如何处理 network on main thread exception 异常?

程序中设置了下面的两个类

class CallNetworkMethod extends AsyncTask<Void, Void, Void>
{
   @Override
    protected Void doInBackground(Void... params) {
        if (TwitterUtils.isAuthenticated(prefs)) {
            sendTweet();
        } else {
            Intent i = new Intent(getApplicationContext(), TwPrepareRequestTokenActivity.class);
            i.putExtra("tweet_msg",getTweetMsg());
            startActivity(i);
        }
        return null;
    }
   @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        //updateLoginStatus();
        loginStatus.setText("Logged into Twitter : " + TwitterUtils.isAuthenticated(prefs));
    }
}

public class TwitterUtils {
static ArrayList<String> friens=null;
public static boolean isAuthenticated(SharedPreferences prefs) {
    String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    AccessToken a = new AccessToken(token,secret);
    Twitter twitter = new TwitterFactory().getInstance();
    twitter.setOAuthConsumer(TwConstants.CONSUMER_KEY, TwConstants.CONSUMER_SECRET);
    twitter.setOAuthAccessToken(a);
    try {
        **twitter.getAccountSettings();**
        return true;
    } catch (TwitterException e) {
        return false;
    }
}
}

但我运行代码时,获得异常network on main thread exception。我调试代码发现出现异常的位置是twitter.getAccountSettings();。我觉得这个方法应该
在AsynTask中运行,如何运行呢?

2个回答

LiDaming_and
LiDaming_and   2013.03.19 17:10
已采纳

现在你是在 onPostExecute 中调用 TwitterUtils.isAuthenticated(prefs)。因为 onPostExecute 总是在
UI 线程中执行,然后就获得 networkonmainthreadexception 异常。
为避免这个问题,使用一个Boolean Flag 从 doInBackground 里面获得返回值,在 onPostExecute 的 TextView 里面显示:

class CallNetworkMethod extends AsyncTask<Void, Void, Void>
{
  public static boolean status=false;
    @Override
    protected Void doInBackground(Void... params) {
       status=TwitterUtils.isAuthenticated(prefs);
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        //updateLoginStatus();
        loginStatus.setText("Logged into Twitter : " + status);
    }
}
nana4ever
nana4ever   2013.03.25 15:04

class CallNetworkMethod extends AsyncTask<Void, Void, Void>
改成class CallNetworkMethod extends AsyncTask<Void, Void, Boolean>
再把protected Void doInBackground(Void... params) {
改成:

protected Boolean doInBackground(Void... params) {

   Boolean result = TwitterUtils.isAuthenticated(prefs);
        if (result) {
        sendTweet();
    } else {

        Intent i = new Intent(getApplicationContext(), TwPrepareRequestTokenActivity.class);
        i.putExtra("tweet_msg",getTweetMsg());
        startActivity(i);
    }
    return result;       
}

然后把protected void onPostExecute(Void result) {
改成:

protected void onPostExecute(Boolean result) {
    loginStatus.setText("Logged into Twitter : " + result.toString());
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
tomcat控制台错误大汇总--1---Io 异常: The Network Adapter could not establish the connection
Io 异常: The Network Adapter could not establish the connection 这个异常的出现一般是数据库和你的电脑的设置有关 这种异常的出现大致有下面几种原因: 1。IP错误。 在设置URL时错误,例如:jdbc:oracle:thin:@192.168.0.36:1521:sharp 数据库服务器不正确:ping 服务器IP是否正确。不
Exception in thread "main" java.sql.SQLException: Connections could not be acquired from the underly
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. Exception in thread "m
序列化NotSerializableException问题
 54powermanhttp://54powerman.blog.sohu.com背景:某项目中,要将某个自定义类MMessage对象,通过ObjectOutputStream和ObjectInputStream传递,该MMessage的特征描述:1 该类未继承Serializable接口;2 其父类Message的父类继承了Serializable接口;3 其父类中有一个字段类型为java
JDBC 导入MYSQL驱动方法
解决JDBC异常:Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Java菜鸟学习笔记--Exception篇(一):异常简介
什么是异常(Exception)? 简述: 在运行过程中,应用程序可能遭遇各种严重程度不同的问题.异常提供了一种在不弄乱程序的情况下检查错误的巧妙方式.它也提供了一种直接报告错误的机制. 不同类型异常在Java中被封装为不同的类,这也符合我Java里一切都是对象的原则,Java为我们提供了非常完美的异常处理机制。 异常的结构图
Java---12种常用异常产生与分析--(附异常体系图)
Java---12种常用异常产生与分析 常见运行异常(7种): ArithmeticException,ArrayStoreEcxeption,ClassCastException,IllegalArgumentException IndexOutOfBoundsException,NoSuchElementException,NullPointerException 常见编译异常(5
java 集合排序异常Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violate
报错 Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! 原因在于比较的值中有NaN,所以不能用下面的compareTo,要用Double类中的compareTo http://stackoverflow.co
UDP网络编程时出现:Exception in thread "main" java.io.EOFException异常
EOFException
异常----Exception in thread "main" java.lang.StackOverflowError
Exception in thread "main" java.lang.StackOverflowError 报错的信息是:栈溢出的意思。就是指对象之间相互引用,最终会导致栈溢出。 一个常见的例子: class Demo{ public Demo(){ Demo d = new Demo(); }} 在实例化d对象的时候,调用构造方法,然后构造方法里又
webservice中发布服务端遇到的异常
在写webservice的过程中,运行服务端的程序,遇到了一些异常,下面贴出这些异常信息,以及我的解决方法: 1、异常信息1Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: 服务器运行时错误: java.io.IOException: Unable to establish loopback c