【问题标题】:Error on executing Http post in honeycomb在蜂窝中执行 Http post 时出错
【发布时间】:2011-08-29 18:47:49
【问题描述】:

我有两台 Android 移动设备,一台 v2.3 api 9 和一台 v3.1 蜂窝 我想为短信代码发布一个 http api 链接。原来我在蜂窝中遇到错误,而其他手机工作正常这是代码

public void sendSMS(String phone_num, int password)
{
try
{               
    HttpClient hc = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://www.google.com/");
    hc.execute(post); // I got an error here    
}
catch(IOException e)
{

    Log.e("error", "error");
}  
} 

【问题讨论】:

    标签: android apache http post android-3.0-honeycomb


    【解决方案1】:

    在 HoneyComb 中启用了 StrictMode,您必须禁用它以避免NetworkOnMainThreadException

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    

    但不建议这样做,请使用Asynctask,您可以在此处找到示例:

    http://developer.android.com/reference/android/os/AsyncTask.html

    【讨论】:

      【解决方案2】:

      您遇到这种情况是因为 Android Honeycomb 中的一项新功能。如果你查看你的日志,你会看到你得到一个NetworkOnMainThreadException Exception

      在 Android Honeycomb 中有一个新的应用程序策略限制在主线程上执行耗时的调用

      如果您看到以下内容,请检查您的异常堆栈:StrictMode$AndroidBlockGuardPolicy.onNetwork

      帮助我的是read this,然后修复我的代码不使用主执行线程进行 HTTP 调用。

      【讨论】:

        【解决方案3】:

        100% 有效的解决方案!

        将以下代码放在super.onCreate 上方的protected void onCreate 方法下:

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        

        Jorgesys 的创意!感谢他!希望能解决你的问题~

        【讨论】:

        • 据我了解,这几行代码允许android操作系统绕过“strictmode”限制。当您将手机升级到 android 3.0 (honeycomb) 或 android 4.0 (ICS) 及更高版本时,基于套接字的连接和 HTTP 连接等“线程”连接在 ThreadPolicy 下受到限制,这是因为新的 android 操作系统鼓励通过 AsyncTask 方法进行连接,这取代了将来使用“线程”连接。因此,使用上面的代码,您可以通过“permitAll()”强制执行忽略限制。
        【解决方案4】:

        我遇到了同样的问题并使用异步任务清除了。所以不要在主线程中调用 httppost 请求而是使用异步任务来做 http post。它还给你更多舒服.link:http://www.vogella.com/articles/AndroidPerformance/article.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 2019-10-07
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多