Java 从Android Emulator连接到本地主机
我知道这个问题已经被问了很多次了,所以如果它是多余的,我很抱歉,但我似乎在任何地方都找不到我具体问题的答案 我正在尝试将Android模拟器连接到本地主机。这是我的连接代码: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
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,谢谢!我会的。