【问题标题】:Connecting to localhost from Android Emulator [duplicate]从 Android Emulator 连接到 localhost [重复]
【发布时间】:2014-08-15 20:16:32
【问题描述】:

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

我正在尝试将我的 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 程序中运行相同的代码时,它会按预期工作。

【问题讨论】:

  • 你有堆栈跟踪吗?
  • 第一个是 Android Runtime FATAL EXCEPTION: main 还有很多,但我不确定哪些是相关的
  • 我还看到一个说 AndroidRuntime Caused by: android.os.NetworkOnMainThreadException
  • 那么您没有将代码放在 AsyncTask 或线程中。请先做。 Android 需要这样做。不是java。

标签: java android localhost


【解决方案1】:

您正在 UI 线程中打开一个连接,这会导致 NetworkOnMainThreadException 。只需将您的代码放在 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;
     }
}

【讨论】:

    【解决方案2】:

    您必须像他们说的那样使用 asynctask 从 url 获取数据。 但还有另一种方式。通常不建议这样做,但是如果您想暂时继续前进并返回并正确编写异步任务,则可以暂时使用这段代码;

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多