标签: networkonmainthread

如何修复android.os.NetworkOnMainThreadException?

我在为RssReader运行我的Android项目时遇到错误.

码:

URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java android android-networking networkonmainthread

2308
推荐指数
40
解决办法
115万
查看次数

Android - android.os.NetworkOnMainThreadException

我有这个例外,我正在阅读这个问题的线程,这看起来很混乱:

如何修复android.os.NetworkOnMainThreadException?

我已将此行添加到我的清单中:

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

在讨论中,他们讨论了应用程序无法进行网络连接的主要执行线程.我想知道的是如何重构我的代码,以便它与Android良好实践一致.

这是我的Activity类:

package com.problemio;

import java.io.InputStream;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class LoginActivity extends Activity 
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        // Show form for login_email
        final EditText loginEmail = (EditText) findViewById(R.id.login_email);  
        String name = loginEmail.getText().toString();  

        // Show field for password  
        final EditText password …
Run Code Online (Sandbox Code Playgroud)

android networkonmainthread

48
推荐指数
4
解决办法
17万
查看次数

NetworkOnMainThreadException

我刚刚在官方文档中发现了NetworkOnMainThreadException

并想知道模拟器是否抛出这个.我一直在测试我的应用程序,据我所知,所有网络都是主线程(使用Roboguice RoboAsyncTask),但你永远不知道是否有人没有逃脱.

我也在使用StrictMode并且没有看到任何东西.

  1. 我的代码是干净的还是不会在模拟器上抛出?

  2. 我们应该如何为生产中的这种情况做好准备?

  3. 宽限期或其他什么?或者现在已经过去了;-) ??

networking android asynchronous android-asynctask networkonmainthread

27
推荐指数
2
解决办法
2万
查看次数

OkHttp Library - 关于简单帖子的NetworkOnMainThreadException

我想在Android中使用OkHttp库进行网络连接.我从他们网站上写的简单帖子示例开始:

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
  RequestBody body = RequestBody.create(JSON, json);
  Request request = new Request.Builder()
      .url(url)
      .post(body)
      .build();
  Response response = client.newCall(request).execute();
  return response.body().string();
}
Run Code Online (Sandbox Code Playgroud)

通过这个电话:

String response = post("http://www.roundsapp.com/post", json);
Run Code Online (Sandbox Code Playgroud)

此调用以NetworkOnMainThreadException结束.
我可以使用AsyncTask包装调用,但据我从示例中了解,OkHttp库应该已经处理过了.我做错了什么?

android android-asynctask networkonmainthread okhttp

24
推荐指数
2
解决办法
3万
查看次数

引起:android.os.NetworkOnMainThreadException

嗨所有的观众和读者,我正在使用链接.每当我在单独的包中运行此代码时,它工作正常,但每当我尝试在我的应用程序中嵌入此示例时,得到遗憾的应用程序已停止,只有当我单击选项卡时调用它的特定选项卡,并且Logcat说: -

Caused by: android.os.NetworkOnMainThreadException
10-30 15:07:35.341: E/AndroidRuntime(732):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117),
Run Code Online (Sandbox Code Playgroud)

请告诉我我需要做什么使它对我有用,除了这个特定的选项卡整个应用程序工作正常.

  10-30 15:07:26.770: D/dalvikvm(732): GC_FOR_ALLOC freed 61K, 3% free 8035K/8259K, paused 39ms, total 46ms
    10-30 15:07:26.781: I/dalvikvm-heap(732): Grow heap (frag case) to 8.481MB for 614416-byte allocation
    10-30 15:07:26.850: D/dalvikvm(732): GC_CONCURRENT freed 1K, 4% free 8634K/8903K, paused 27ms+13ms, total 71ms
    10-30 15:07:26.881: D/dalvikvm(732): GC_FOR_ALLOC freed 0K, 4% free 8634K/8903K, paused 28ms, total 28ms
    10-30 15:07:26.900: I/dalvikvm-heap(732): Grow heap (frag case) to 9.798MB for 1382416-byte allocation
    10-30 15:07:26.970: D/dalvikvm(732): GC_CONCURRENT …
Run Code Online (Sandbox Code Playgroud)

android android-emulator android-parser networkonmainthread

22
推荐指数
1
解决办法
6万
查看次数

如何在Android中修复NetworkonMainThreadException?

我正在创建一个分配项目,我是Android的新手,我想从非常常见的URL访问json http://api.androidhive.info/contacts/,

问题:我正在尝试读取url并获取并解析此url返回的json,

我已经在我的AndroidManifest.xml中添加了以下行

<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)

首选项:和我的Android首选项是

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)
  1. Api等级18
  2. Android 4.3

这就是我试图读取网址的方式

static InputStream is = null;

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
Run Code Online (Sandbox Code Playgroud)

错误消息

11-02 05:23:47.843: E/AndroidRuntime(2207): FATAL EXCEPTION: main
11-02 05:23:47.843: E/AndroidRuntime(2207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.countrypedia/com.me.countrypedia.MainActivity}: android.os.NetworkOnMainThreadException
11-02 05:23:47.843: E/AndroidRuntime(2207):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-02 05:23:47.843: E/AndroidRuntime(2207):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-02 05:23:47.843: E/AndroidRuntime(2207):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-02 05:23:47.843: E/AndroidRuntime(2207):     at …
Run Code Online (Sandbox Code Playgroud)

java android networkonmainthread

14
推荐指数
3
解决办法
3万
查看次数

在jellybean中出现NetworkOnMainThreadException错误

我一直试图在上周左右开始工作,但仍然不知道问题是什么.它适用于Android 2.1但不适用于4.1.我已经在服务中找到了这个字符串,检查我的应用程序中的更新.

latestVersion = Integer.parseInt(getHttpString(urlLatestVersion));
Run Code Online (Sandbox Code Playgroud)

它在checkForUpdate()中调用; 在onStart中调用(Intent intent,int startId);.

private String getHttpString(String urlString) throws IOException {
            InputStream in = null;
            int response = -1;

            URL url = new URL(urlString);
            URLConnection conn = url.openConnection();

            if (!(conn instanceof HttpURLConnection))
                    throw new IOException("Not an HTTP connection");

            try {
                    HttpURLConnection httpConn = (HttpURLConnection) conn;
                    httpConn.setAllowUserInteraction(false);
                    httpConn.setInstanceFollowRedirects(true);
                    httpConn.setRequestMethod("GET");
                    httpConn.connect();

                    response = httpConn.getResponseCode();
                    if (response == HttpURLConnection.HTTP_OK) {
                            in = httpConn.getInputStream();
                    }
            } catch (Exception ex) {
                    ex.printStackTrace();
                    //
                    //main error currently lies here
                    // TODO …
Run Code Online (Sandbox Code Playgroud)

android onstart httpurlconnection android-asynctask networkonmainthread

8
推荐指数
1
解决办法
7518
查看次数

快速修复NetworkOnMainThreadException

我需要执行第三方开源程序,它抛出NetworkOnMainThreadException.根据SDK参考,仅针对Honeycomb SDK或更高版本的应用程序进行此操作.针对早期SDK版本的应用程序可以在其主要事件循环线程上进行联网.

在第一阶段,我只想运行程序,而不更改源.所以,我改变了AndroidManifesr.xml中的行:

    android:targetSdkVersion="15"

至:

    android:targetSdkVersion="10"

但是,这没有用,程序仍然会抛出NetworkOnMainThreadException.我怎样才能使这个工作?我正在尝试在Android Emulation Google API上执行该程序(级别16).

android network-programming networkonmainthread

8
推荐指数
1
解决办法
2万
查看次数

Facebook上的NetworkOnMainThreadException使用Phonegap 1.6.0登录

我目前正在使用Phonegap 1.6.0和Sencha Touch 1.1创建一个应用程序.最近,在使用Android 4.0.4的智能手机上进行测试时,我们发现Facebook登录并没有像预期的那样完全正常工作.我们正在使用位于此处的Phonegap Facebook插件和Cordova补丁.会发生的是,一旦我们尝试使用Android Honeycomb或更高版本的智能手机登录Facebook,该应用程序就会启动NetworkOnMainThreadException,因为主线程上不允许进行网络操作.此异常仅在Android Honeycomb或更高版本上引发,这就是我们在2.3.3上没有注意到的原因.调用FB.login()并且未达到回调时抛出异常.

我检查了各种线程和主题,但都非常模糊.我知道我必须在一个单独的线程中运行网络操作,但我不确定应该怎么做.线程似乎发生在Java中,但我根本就没有使用任何Java,所以在使用非我编写的代码进行修改之前,我想要一些帮助.

我将稍后尝试缩小导致异常的部分.任何帮助,将不胜感激.

错误堆栈:

05-25 15:42:29.018: I/Web Console(3785): Cordova Facebook Connect plugin initialized successfully. at file:///android_asset/www/cdv-plugin-fb-connect.js:24
05-25 15:42:29.120: D/OpenGLRenderer(3785): Flushing caches (mode 0)
05-25 15:42:30.479: D/ConnectPlugin(3785): authorized
05-25 15:42:30.479: D/ConnectPlugin(3785): Bundle[{expires_in=5177550, access_token=censored, code=censored}]
05-25 15:42:30.503: D/AndroidRuntime(3785): Shutting down VM
05-25 15:42:30.503: W/dalvikvm(3785): threadid=1: thread exiting with uncaught exception (group=0x40a671f8)
05-25 15:42:30.511: E/AndroidRuntime(3785): FATAL EXCEPTION: main
05-25 15:42:30.511: E/AndroidRuntime(3785): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=32665, result=-1, data=Intent { (has extras) …
Run Code Online (Sandbox Code Playgroud)

facebook exception cordova networkonmainthread

7
推荐指数
1
解决办法
6030
查看次数

Android上的服务启动android.os.NetworkOnMainThreadException

在Android上尝试我的全新服务之后我得到了这个:

我猜是与清单文件和权限相关的东西,服务在最后一个活动之后启动,更新服务器上的数据并检索新数据并在android上的sqlite上保存id:

这里还有清单文件:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.ggservice.democracy"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
        <uses-permission android:name="android.permission.INTERNET"/>

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.ggservice.democracy.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:label="@string/app_name" android:name="com.ggservice.democracy.sondaggioActivity"/>
            <activity android:label="@string/app_name" android:name="com.ggservice.democracy.domandeDiCategoria"/>
            <service android:name="com.ggservice.democracy.updateDemocracyService" />
        </application>

    </manifest>
Run Code Online (Sandbox Code Playgroud)

logcat:

01-02 15:33:30.960: W/dalvikvm(2570): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
01-02 15:33:31.160: E/AndroidRuntime(2570): FATAL EXCEPTION: main
01-02 15:33:31.160: E/AndroidRuntime(2570): java.lang.RuntimeException: Unable to start service com.ggservice.democracy.updateDemocracyService@412f0c60 with Intent { cmp=com.ggservice.democracy/.updateDemocracyService }: android.os.NetworkOnMainThreadException
01-02 15:33:31.160: E/AndroidRuntime(2570): …
Run Code Online (Sandbox Code Playgroud)

service android onstart logcat networkonmainthread

7
推荐指数
2
解决办法
2万
查看次数