相关疑难解决方法(0)

如何修复android.os.NetworkOnMainThreadException?

我在为RssReader运行我的Android项目时遇到错误.

码:

URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java android android-networking networkonmainthread

2308
推荐指数
40
解决办法
115万
查看次数

排球Android网络库

关于在我的项目中使用Volley,我几乎没有问题:

  1. 这个库可以用在任何Java项目中,还是只用于Android?
  2. 在这里看到多个分支,没有关于哪个分支开始的文档.我应该从哪个分支开始?
  3. 如何将此库集成到您自己的项目中?什么方法更好:将Volley作为一个独立的库项目并旋转一个jar并将其放入项目中或复制项目中的所有源代码?

android http android-networking android-volley

120
推荐指数
9
解决办法
9万
查看次数

当我们有OkHttp时,为什么要使用Retrofit

使用OkHttp我们可以发出HTTP请求然后从服务器获得响应

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url(url)
  .build();
Response response = client.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)

然后用Gson lib将响应转换为我们需要的对象.

这是来自Square/OkHttp doc:

它的请求/响应API设计具有流畅的构建器和不变性.它支持同步阻塞调用和带回调的异步调用

我从stackOverFlow中读取

如果可用,Retrofit会自动使用OkHTTP

.

所以我的问题是究竟是什么改造?

什么改造可以做到OkHttp不能?!

我认为OkHttp和Gson解决了请求API问题,那么Retrofit为我们解决了什么问题?

java android retrofit okhttp

89
推荐指数
4
解决办法
4万
查看次数

排球 - POST/GET参数

我看到关于Volley的Google IO 2013会议,我正在考虑转向凌空.Volley是否支持添加POST/GET参数来请求?如果是,我该怎么办?

networking android android-volley

76
推荐指数
5
解决办法
16万
查看次数

如何在Retrofit中处理Dynamic JSON?

我正在使用高效的网络库改造,但是我无法处理包含单个前缀的Dynamic JSON, responseMessage后者object随机responseMessage变化,在某些情况下(动态),相同的prefix()会更改为String.

Json格式responseMessage的对象:

{
   "applicationType":"1",
   "responseMessage":{
      "surname":"Jhon",
      "forename":" taylor",
      "dob":"17081990",
      "refNo":"3394909238490F",
      "result":"Received"
   }

}
Run Code Online (Sandbox Code Playgroud)

responseMessage Json格式动态更改为类型字符串:

 {
       "applicationType":"4",
       "responseMessage":"Success"          
 }
Run Code Online (Sandbox Code Playgroud)

对我来说问题是因为改造有内置的JSON解析我们必须为每个请求分配单个POJO!但遗憾的是,REST-API是使用动态JSON响应构建的,前缀将在成功(...)失败(...)方法中随机更改为字符串到对象!

void doTrackRef(Map<String, String> paramsref2) {
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();



    TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
    userref.login(paramsref2,
            new Callback<TrackerRefResponse>() {
                @Override
                public void success(
                        TrackerRefResponse trackdetailresponse,
                        Response response) {

                    Toast.makeText(TrackerActivity.this, "Success",
                    Toast.LENGTH_SHORT).show();

                }

                @Override
                public void failure(RetrofitError retrofitError) {


                    Toast.makeText(TrackerActivity.this, "No internet",
                        Toast.LENGTH_SHORT).show();
                }


            });
}
Run Code Online (Sandbox Code Playgroud)

POJO: …

android json gson retrofit

75
推荐指数
6
解决办法
5万
查看次数

Asynctask vs Thread vs Services vs Loader

我稍微感到困惑之间的差异Asynctask,Thread,Service,Loader在Android系统.

我知道它是如何工作的.但我仍然不明白我应该使用什么以及何时使用.

我使用Android工作了3年,并且通常仍然AsyncTask用于所有后台任务(有时候用于Thread).但是很多人说"Asynctask已经过时了",不建议使用它们.他们还建议使用robospice或Volley.

那么,AsyncTask真的很糟糕,我应该使用框架进行网络任务?我应该将什么用于后台(而不是网络)任务?

multithreading android android-service android-asynctask

32
推荐指数
2
解决办法
2万
查看次数

Android Image loading - Volley vs Picasso

我正在寻找一个开源图像加载/缓存解决方案.

我期待:

谷歌的排球,

广场的毕加索

通用图像加载器

我希望能够处理来自磁盘和网络的异步图像加载,但是我不确定Google的排球是否从磁盘加载.

Volley是否允许从磁盘加载资源?

AQuery提供了我想要做的一个例子.

android caching universal-image-loader android-volley

17
推荐指数
3
解决办法
2万
查看次数

Android(Java)HttpURLConnection静默重试'读'超时

所以我Google Volley用于HTTP请求,基本上使用Java的是HttpURLConnection.

根据我的测试,问题是:
当达到'读'超时时HttpURLConnection,在连接关闭之前执行静默重试并抛出相关的异常(SocketTimeoutException).

请注意:
- 我在使用HTTP POST请求时注意到此错误.
- 'read'超时与'connect'超时不同.
- 如果未设置'read'超时(通过调用connection.setReadTimeout(int)设置)(0),或设置为大于该值connection.setConnectTimeout(int),则不会发生此错误.
- 这个问题已经在这里讨论了,但是我没有找到任何令人满意的解决方案.
- 这里可以找到一个有点相关的问题,但我不确定它是否相关(是吗?)

更多背景
我的应用程序用于付钱,所以不重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端"正确"无论如何).

设置'read'超时时,如果服务器连接已建立,但服务器在应答之前等待/ sleeps/delays-response'超时'时间(从而引发'read'异常,而不是'connect'异常) ,在引发异常之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的.

我在找什么样的解决方案?
好吧,一个能很好地解决这个问题/错误的问题,就像这里解释的解决方案一样(但我再说一遍,我认为在这种情况下它是无关紧要的).
此外,我希望保持原始流程不变,这意味着不要强制连接关闭或类似的东西.

我现在要做的是,将'read'超时设置为'connection'超时的两倍(它们同时开始计数),以确保首先引发'connection'异常.我还将尝试在服务器端克服此问题.问题是,这个"读取"超时是有原因的,我当前的实现实际上只是忽略它,并且只处理"连接"超时.

编辑Volley图书馆的RetryPolicy还没有在这个问题上的影响,因为这是一个静默重试.我在图书馆里看起来尽可能深.到处记录/断点,取消了重试的调用.我怎么知道它是99.99%的HttpURLConnection问题.

java android httpurlconnection android-volley

11
推荐指数
1
解决办法
7827
查看次数

使用Base64将Android映像上传/下载到JSON会导致内存不足错误

我目前编码和解码图像到Base64.我通过使用流将图像编码为字符串来克服OOM的初始问题.

我现在的问题是我无法理解如何通过Gson将多个分辨率图像(5620 x 3747 - 4.92MB或3264 x 1836 - 1.35MB)的多个Base64编码字符串添加到JSON对象.目前Gson仅使用来自5312 x 2988 - 4.95 MB映像的2个Base64字符串抛出OOM异常.

我知道android可能只能为每个应用程序节省16/20Mb,因此这种转换必须超过限制.

如何将流中的Base64字符串写入JSON对象,该对象将包含发布到我的服务器所需的特定值?

是否更容易更改我的服务器以接受多部件请求而不是基于JSON的POJO与多个Base64字符串?我目前使用的是Volley,并没有官方的多部分请求以及IO流.

如果是压缩问题,在编码到Base64字符串之前,我应该对图像应用多少压缩?理想情况下,我希望失去任何质量但具有最佳压缩级别.

更多信息

我正在上传多个不同分辨率的图像,因为它是兼容性的测试.例如,我发送的所有图像都是在低分辨率和极高分辨率的设备上拍摄的,因为我的应用依赖于这些图像的功能.我试图证明我的应用程序可以处理任何图像(在某种程度上,主要是在移动设备上捕获的图像).

我知道有些图像可能太大,以至于将它们加载到内存中会导致异常.这是我稍后会尝试处理的.

在某些情况下,将上传的图像可以从1到200.

我正在努力寻找能够很好地扩展的最佳解决方案.

base64 android image gson android-volley

11
推荐指数
1
解决办法
2142
查看次数

Google Volley vs Android-Async-Http

我正在研究这两个Android Http Networking库.

我想有些人使用这两个库的经验.就个人而言,我总是非常高兴地使用http://loopj.com/android-async-http/库.但最近我建议使用Volley Framework.

我可以从一个到另一个获得什么好处?
从我的阅读到目前为止,Volley在一个库中集成了许多不错的功能,如图像加载,请求缓存,请求取消.

我目前的使用案例/规格:

从我的Android应用程序中获取Web服务.

  • 从Web服务接收JSON对象
  • 易于与GUI集成
  • 原始性能的稳定性和可靠性
  • 图书馆的长期维护和支持.
  • 易于使用/易于实施

从SE上的一些阅读:

"Volley一切都很好,但从负面来看,它是一个没有文档记录,不受支持的,"将代码扔到墙上并对其进行I | O演示"库".

所以我认为它清晰的Volley可能会得到功能,但是记录和维护的程度如何呢?如果我决定使用它,4年后仍然会有它的支持吗?

android androidhttpclient android-volley android-async-http

10
推荐指数
2
解决办法
1万
查看次数