Java 从Android Emulator连接到本地主机

Java 从Android Emulator连接到本地主机,java,android,localhost,Java,Android,Localhost,我知道这个问题已经被问了很多次了,所以如果它是多余的,我很抱歉,但我似乎在任何地方都找不到我具体问题的答案 我正在尝试将Android模拟器连接到本地主机。这是我的连接代码: public void readPHP(String filename) throws IOException { url = new URL("http://10.0.2.2:8000/" + filename); URLConnection conn = url.openConnecti

我知道这个问题已经被问了很多次了,所以如果它是多余的,我很抱歉,但我似乎在任何地方都找不到我具体问题的答案

我正在尝试将Android模拟器连接到本地主机。这是我的连接代码:

public void readPHP(String filename) throws IOException {
        url = new URL("http://10.0.2.2:8000/" + filename);
        URLConnection conn = url.openConnection();
        InputStream stream = null;
        try {
            stream = conn.getInputStream();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }

        // more code....

        stream.close();
    }
我还在我的宣言中添加了以下内容:

<uses-permission android:name="android.permission.INTERNET"/>


该应用程序安装正确,没有错误消息,但当我试图从手机上运行它时,它崩溃了,模糊的消息“不幸的是,CodeGlass GDK已停止。”我确信这是Android的一个问题,因为当我尝试在一个简单的Java程序中运行相同的代码时,它会按预期工作。

您正在UI线程中打开一个连接,这会导致
NetworkMainThreadException
。只需将代码放在
AsyncTask
中,放在
doInBackground()
方法中,如下所示:

public class MyAsyncTask extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(String fileName) {
      url = new URL("http://10.0.2.2:8000/" + filename);
        URLConnection conn = url.openConnection();
        InputStream stream = null;
        try {
            stream = conn.getInputStream();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }

        // more code....

        stream.close();
        return null;
     }
}
公共类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(字符串文件名){
url=新url(“http://10.0.2.2:8000/“+文件名);
URLConnection conn=url.openConnection();
InputStream=null;
试一试{
stream=conn.getInputStream();
}捕获(IOE异常){
System.out.println(e.getMessage());
}
//更多代码。。。。
stream.close();
返回null;
}
}

您必须使用asynctask从url获取数据,就像他们说的那样。 但还有另一种方法。İt通常是不可取的,但是如果您现在想继续前进并返回并正确地编写异步任务,您现在可以使用这段代码

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


希望这能有所帮助。

你得到stacktrace了吗?第一个是Android Runtime致命异常:main还有很多,但我不确定它们中的哪一个是相关的。我还看到一个说AndroidRuntime是由以下原因引起的:Android.os.NetworkOnMainThreadException那么你没有将代码放入异步任务或线程中。请先做。Android需要这样做。不是java,谢谢!我会的。