在Android中进行HTTP调用的最佳实践是什么?

5
所以我需要进行几个HTTP调用,返回包含单个或多个JSON对象的JSON响应。我已经完成了实际HTTP客户端调用的所有部分,并返回带有JSON响应的字符串。
那么我的问题是:最好的方法是什么来异步调用?我目前正在使用异步任务,调用在后台方法中返回字符串的方法,并通过另一个用于解析的静态方法调用解析字符串,返回包含所有数据的POJO,然后将结果发送到postExecute部分,在那里根据结果呈现给UI。这是一种好的做法还是有更好的方法?
我考虑可能引入接口来提供数据,例如onSuccess监听器和onFail监听器。对此有什么建议吗?
谢谢。
3个回答

6
我的问题是:最佳的异步调用方式是什么?我目前正在使用一个异步任务来调用方法,该方法在后台方法中返回字符串并通过另一个用于解析的静态方法解析字符串,该方法返回包含所有数据的POJO,我将其发送到postExecute部分,在那里根据结果向UI呈现结果。这是一种好的做法还是有更好的方法?
在我看来,如果AsyncTask适合您的需求,您应该使用它--它专门为帮助您避免执行异步任务时线程管理的痛苦而创建。
我在考虑可能引入接口来提供数据,例如onSuccess监听器和onFail监听器。对此有什么建议吗?
我不太确定你的意思,但当然,你要优雅地处理失败。一种处理方式就是基于AsyncTask的返回值,但是如果您有许多不同的可能的失败场景,使用监听器/回调模式将它们分开绝对是一个有效的选项。我个人会创建一个而不是两个监听器,像这样:
interface MyHttpCallListener {
  public void onSuccess(MyResult returnVal);
  public void onFailure(MyError error);
}

在我看来,这更加简洁。

谢谢。

没问题。


3

我喜欢使用Intent Service API来处理这种事情。它的好处是你可以在各个地方创建新的异步任务,并将请求排队到服务器。缺点是你一次只能发出一个请求。但实际上,我更喜欢将它们排队并逐个执行,所以这对我很有帮助。


是的,我以前使用过Intent Service,但它并没有提供一种将数据返回给调用活动的方法,除非我进行广播或类似的操作,但我真的不认为有必要让事情变得那么复杂。这样做需要我编写比在调用活动中运行异步任务或线程多5倍的代码才能实现同样的功能。 - DArkO
1
我个人更喜欢使用IntentService。它可以管理线程,因此我不会看到任何线程代码混杂在代码库中。您可以在onActivityResult中接收结果,并且它允许我优雅地处理失败。顺便说一句,我不确定您是否在代码中解析JSON对象。请查看GSON库,它对我来说非常有效。 - Ravishankar V
@DArkO,你可以使用ResultReceiver来返回数据。这基本上是一个可传递的回调,当您调用startService时,您可以将其与您的意图一起传递。请查看iosched的源代码以获取示例。 - Nathan Schwermann

1

我建议使用异步任务(Async Task)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接