Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANDROID帮助!错误:android.os.NetworkOnMainThreadException_Java_Android_Sockets_Client - Fatal编程技术网

Java ANDROID帮助!错误:android.os.NetworkOnMainThreadException

Java ANDROID帮助!错误:android.os.NetworkOnMainThreadException,java,android,sockets,client,Java,Android,Sockets,Client,我用一个例子来学习android中套接字的使用。我对这有点陌生,我正在用一本书来学习。 我真的不知道问题出在哪里,因为这个例子是从书中照搬过来的,除了我的电脑的IP。android应用程序不断抛出此错误: 错误:android.os.NetworkOnMainThreadException 我发布代码: 由于有些单词是西班牙语,我将为您翻译,以防更容易理解: PUERTO->port,ENTRADA->input,SALIDA->output,ENVIANDO->sending,HOLA MUN

我用一个例子来学习android中套接字的使用。我对这有点陌生,我正在用一本书来学习。 我真的不知道问题出在哪里,因为这个例子是从书中照搬过来的,除了我的电脑的IP。android应用程序不断抛出此错误:

错误:android.os.NetworkOnMainThreadException

我发布代码:

由于有些单词是西班牙语,我将为您翻译,以防更容易理解:

PUERTO->port,ENTRADA->input,SALIDA->output,ENVIANDO->sending,HOLA MUNDO->hello world,RECIBIENDO->receiving,DATOS->data,CLIENTE->client

安卓客户端

    package com.jacho981.clienteecho;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ClienteECHO extends Activity {

    private TextView output;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cliente_echo);

        output = (TextView) findViewById(R.id.TextView01);
        ejecutaCliente();
    }

    private void ejecutaCliente() {
        // String ip = "158.42.146.127";
        String ip = "192.168.1.3";
        int puerto = 7;

        log(" socket " + ip + " " + puerto);

        try {
            Socket sk = new Socket(ip, puerto);
            BufferedReader entrada = new BufferedReader(new InputStreamReader(
                    sk.getInputStream()));
            PrintWriter salida = new PrintWriter(new OutputStreamWriter(
                    sk.getOutputStream()), true);

            log("enviando...");

            salida.println("Hola Mundo");

            log("recibiendo..." + entrada.readLine());

            sk.close();
        } catch (Exception e) {
            log("error: " + e.toString());
        }

    }

    private void log(String string) {
        output.append(string + "\n");
    }

}
JAVA服务器

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServidorECHO {

    public static void main(String args[]) {
        try {
            ServerSocket sk = new ServerSocket(7);
            while (true) {
                Socket cliente = sk.accept();
                BufferedReader entrada = new BufferedReader(
                        new InputStreamReader(cliente.getInputStream()));
                PrintWriter salida = new PrintWriter(new OutputStreamWriter(
                        cliente.getOutputStream()), true);
                String datos = entrada.readLine();
                salida.println(datos);
                cliente.close();
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

这是Android Jellybean中的一个例外,人们说,相同的代码在较低版本中工作,但在Jellybean中不工作

解决方案是,您必须将您的网络操作从主线程移动到地面线程。 这是一个很好的解决方案。 这是一个漂亮的头饰

您正在主gui上执行耗时操作,这可能会卡住用户,甚至挂起ui,您需要一个AsyncTask在主线程中执行网络操作

有关异步任务的详细信息,请参见

在Android Honeycomb及以上版本上,应用程序将因NetworkOnMainThreadException崩溃,但将在早期版本上运行

从开发者参考

这仅适用于针对蜂巢SDK或 较高的。允许针对早期SDK版本的应用程序执行以下操作 在他们的主事件循环线程上建立网络,但它非常复杂 气馁


在你用感叹号提问之前,我希望你后退一步,看看你得到的错误,网络主线程异常。谷歌搜索此错误将显示多个结果,帮助您修复此错误。你需要将你的网络代码从主线程中删除。看这个!标题中包含networkonmainthreadexception的任何问题的副本。
android.os.NetworkOnMainThreadException