相关疑难解决方法(0)

Android Wear是否支持HttpURLConnection - 获取EOFException

我想知道,如果我们可以通过访问网络HttpURLConnection的Android Wear

我尝试在Wear代码中使用HttpURLConnection,我得到了EOFException.相同的代码适用于普通的Android手机.它只在Android Wear上有问题.

如果Wear上不支持HttpURLConnection,我们应该使用Apache Http客户端还是其他什么?

或许我推出应用程序进行开发的方式不正确?

        URL url = new URL(myurl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect(); 
        int response = conn.getResponseCode(); 
Run Code Online (Sandbox Code Playgroud)

我确实将权限添加到了android清单中.我还从AsyncTask运行上面的代码.

EOFException发生在conn.getResponseCode().

java.io.EOFException
        at com.android.okhttp.internal.Util.readAsciiLine(Util.java:342)
        at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:311)
        at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135)
        at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:353)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:297)
        at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:509)
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

android wear-os

9
推荐指数
1
解决办法
4281
查看次数

Android Wear上的直接互联网连接?

我试图构建一个显示来自互联网的图片的应用程序.

我使用了一个功能,它在我的手机(Galaxy S3 - Android 4.3)上运行良好,但在手表上我得到一个java.io.EOFException例外.

代码(在手机上工作):

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            //Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}
Run Code Online (Sandbox Code Playgroud)

其他功能抛出一个org.apache.http.NoHttpResponseException 手表配对和在线,因为我可以使用语音命令和搜索网络等.

所以问题是:我可以直接从Android Wear访问网络,还是需要在手机上处理所有这些任务?或者我的设置有问题吗?

android wear-os

7
推荐指数
1
解决办法
6223
查看次数

启用Wi-Fi的HTTPS连接Android没有电话网络共享

我找不到任何关于Android Wear的文档,它们展示了如何创建一个应用程序,利用一些手表(如我的三星Galaxy Gear)现在可以通过wi-fi直接连接到互联网的事实.

我有几个应用程序生成访问REST服务的https请求,我想知道是否可以从连接到Wi-Fi(没有手机)的Wear应用程序直接调用这些应用程序.

类似的问题似乎没有回答这个问题:

Android Wear上的直接互联网连接?

/sf/ask/1824374121/

Android:与联网设备建立"Wi-Fi Direct"连接

我在Wear模拟器上进行的测试拴在支持互联网的手机模拟器上:

java.net.UnknownHostException:无法解析主机"api.xxx.com":没有与主机名关联的地址

但当然手表模拟器上没有直接的Wi-Fi连接,所以我的下一步是尝试真正的手表和手机.

我怀疑Android Wear的数据API是否透明地处理这一点,因此直接的http请求似乎是不可能的.

最好的,提前感谢您的帮助.

android android-wifi wear-os

5
推荐指数
1
解决办法
2488
查看次数

Android HTTP请求在模拟器中工作但不在磨损设备上

我正在制作一个简单的Android Wear应用来控制我的恒温器,我正在用Volley发送POST请求来控制它们.Android Wear模拟器中的一切都运行良好(请求有效),但是,当应用程序在我的Moto 360上加载时,凌空请求被调用,但总是超时.

为什么我的截击请求会在我的手表失败但是在模拟器上工作?其他应用程序的请求在我的手表上成功(例如,内置天气应用程序可以在大约3秒内加载天气数据).而且,最奇怪的部分:我的应用程序在我的手表上工作(成功发出截击请求),并且,在我从Android Studio安装到我的手表大约一天之后,它突然停止加载数据,原因并非明显.

到目前为止我尝试过的:

  • 我已经请求了我的互联网许可manifest.xml.
  • 我已将超时时间增加到30秒(请参阅下面的代码),这并没有改变任何内容.
  • 我试过通过蓝牙将我的计算机和模拟器连接到手机的连接上(将我的物理手表的蓝牙连接复制到我的手机上),模拟器仍然成功地提出请求(虽然延迟了两秒),排除了蓝牙太慢的可能性.
  • 我确保API级别足够低,以便我的Marshmallow运行手表(我的手表和应用程序都是API级别23).
  • 在我使用恒温器数据向公司服务器发出请求之前,我尝试向Google做一个快速测试请求,当Google请求在模拟器中返回网站的HTML代码时,它会在我的手表上超时(请求启动后30秒) .
  • 我尝试将一些虚拟数据放入应该加载的回收器视图数据中,并且虚拟数据确实显示出来,排除了回收器视图被破坏.
  • 我从手表中删除了该应用并重新安装了该应用,并从手机中删除了该手机,重新安装并再次将其删除,但都无济于事.
  • 与Google支持人员进行长时间的聊天并没有产生任何意义.

这是我的代码(来自我的主视图的适配器):

public void refreshThermostatsRecyclerView(RequestQueue queue) {
    String url = "https://mobile.skyport.io:9090/login"; // login call to the thermostats server Skyport
     Log.w("myApp", "Starting /login call to Skyport"); // this gets called on simulator and watch
     // Request a string response from the provided URL.
     StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
 Response.Listener<String>() {
       @Override
       public void onResponse(String response) {
           // …
Run Code Online (Sandbox Code Playgroud)

java android android-volley wear-os

5
推荐指数
1
解决办法
1834
查看次数

标签 统计

android ×4

wear-os ×4

android-volley ×1

android-wifi ×1

java ×1