【问题标题】:Android emulator to real device issueAndroid模拟器到真实设备问题
【发布时间】:2013-06-25 13:15:36
【问题描述】:

我有这段代码,它从网站获取文本,并将 Android 程序上的标签更改为缓冲阅读器的最后一行

编辑 - 感谢 Mohsen Afshin 的善意建议,我已经更新了代码

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        URL url = new URL(
                                "http://webpage.php");

                        URLConnection yc = url.openConnection();
                        yc.setDoOutput(true);
                        PrintStream ps = new PrintStream(yc
                                .getOutputStream());
                        ps.print("Name=Joe");
                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(yc.getInputStream()));
                        String inputLine;
                        while ((inputLine = in.readLine()) != null)
                            display.setText(inputLine);
                        in.close();
                    } catch (IOException e) { // TODO Auto-generated catch
                                                // block
                        e.printStackTrace();
                        display.setText("failed");
                    }
                }
            });

            t.start();

现在这在模拟器上运行得非常好。但是,当我将它放到 Android 设备上时,它就崩溃了。我已更改 Android 清单以允许互联网连接 -

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

我不确定问题出在哪里。奇怪的是,它曾经奏效过!并且不会再次工作。 logcat如下-

06-25 16:18:15.918: W/dalvikvm(9047): threadid=11: 线程以未捕获的异常退出 (group=0x411432a0) 06-25 16:18:15.923:E/AndroidRuntime(9047):致命异常:线程 599 06-25 16:18:15.923: E/AndroidRuntime(9047): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸其视图。 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4925) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:950) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.widget.RelativeLayout.requestLayout(RelativeLayout.java:292) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.widget.TextView.checkForRelayout(TextView.java:6644) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.widget.TextView.setText(TextView.java:3732) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.widget.TextView.setText(TextView.java:3590) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 android.widget.TextView.setText(TextView.java:3565) 06-25 16:18:15.923: E/AndroidRuntime(9047): 在 gaz.helloworld.MainActivity$2$1.run(MainActivity.java:59) 06-25 16:18:15.923: E/AndroidRuntime(9047): at java.lang.Thread.run(Thread.java:856)

谁能帮帮我?

【问题讨论】:

  • 发布您的日志猫和堆栈跟踪,以便其他人能够帮助您
  • 嗨莫森。非常简单的问题,但我对此很陌生。如何从 Android 设备获取 LogCat?
  • @Geo1986 如果它通过 USB 连接到您的 PC 并且您正在对其进行调试,它应该会显示在 DDMS 和 eclipse 的 logcat 中。如果不知何故它没有以这种方式连接(你是如何在那里获得应用程序的?)你可以使用 CatLog play.google.com/store/apps/…
  • 如果您使用的是 Eclipse,在 Debug 透视图中您有一个“LogCat”视图(或者您可以将此视图添加到任何其他透视图...)
  • 手机已插入并作为 USB 连接,但是当我转到选择 Android 设备或 AVD Eclipse 的选项时,显示没有 Android 设备。我现在正在安装一个(巨大的!)软件更新,希望能解决

标签: android android-emulator


【解决方案1】:

正如@NinadChilap 所说,它将生成一个NetworkOnMainThreadException

因此,如果您的 URL 有效,这将起作用:

Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //To change body of implemented methods use File | Settings | File Templates.
                    URL url = new URL("http://weblink.php");

                    URLConnection yc = url.openConnection();
                    yc.setDoOutput(true);
                    PrintStream ps = new PrintStream(yc.getOutputStream());
                    ps.print("Name=Joe");
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(yc.getInputStream()));
                    String inputLine;
                    while ((inputLine = in.readLine()) != null)
                        display.setText(inputLine);
                    in.close();
                } catch (IOException e) { // TODO Auto-generated catch block
                    e.printStackTrace();
                    display.setText("failed");
                }
            }
        });

        t.start();

【讨论】:

    【解决方案2】:

    您可能会遇到 NetworkOnMainThreadException

    主界面(Activity)有时会出现网络问题

    您应该使用单独的线程,refer to this post

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多