0

我想在我的 Android 应用程序中打开一个 Socket,它从服务器读取文件。

我的服务器与模拟器在同一台计算机上运行,​​并且我已经在 Android 之外对其进行了测试,以确保我没有防火墙问题或其他连接问题。

下面是我有问题的代码。它将打印 IP 地址,后跟streamm000。此时它抛出一个android.os.NetworkOnMainThreadException.

此外,另一个toast给了我NULL

这是我的代码...

    toast("IP="+getIP());

    try {
        toast("created stream00000");
        so=new Socket("10.50.1.25", 80);
        toast("created stream111111");
        oos=new ObjectOutputStream(so.getOutputStream());
        toast("created stream2222");
        dos=new DataOutputStream(so.getOutputStream());
        //oos.close();
        toast("created stream33333");
    }
    catch(Exception e){
        toast(e.getCause() +"problem with this bla bla is opensteam");
        toast(e.getMessage()+"problem with this bla bla is opensteam");
        Log.v(e+"problem ","with this bla bla is opensteam");
    }
4

2 回答 2

0

您的代码能够回答您的问题没有多大意义。但看起来您正在主 UI 线程上执行网络操作。这在较新的 API 级别中是不允许的。当您尝试执行此操作时,它将引发此异常。

您将需要生成一个不同的线程,并在那里进行网络操作。

于 2012-04-12T13:55:37.817 回答
0

NetworkOnMainThreadException抛出是因为在 Honeycomb 及更高版本中,您被迫在与主显示分开的线程上执行网络操作Thread

请参阅此处的描述... http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

因此,我的建议是将您的代码移动到一个新Runnable类中,然后创建一个Thread来执行它。

于 2012-04-12T13:54:45.333 回答