安卓 Java:来自同一HTTPClient的多个HTTP请求?
目前,在我的代码中,我有一个类SocketOperator,它在静态http客户机支持的单例模式上运行。这意味着每当我调用SocketOperator时。getInstance()。makeGetRequest()在多个位置同时执行时,请求可能会混淆(例如:A调用方法,B调用方法,B获取A的结果)
我的解决方案是什么?具体地说,我如何修改HTTPClient,以便当我从不同的源发出多个请求时,每个源都能得到相应的响应
你可以在下面搜索框中键入要查询的问题!
目前,在我的代码中,我有一个类SocketOperator,它在静态http客户机支持的单例模式上运行。这意味着每当我调用SocketOperator时。getInstance()。makeGetRequest()在多个位置同时执行时,请求可能会混淆(例如:A调用方法,B调用方法,B获取A的结果)
我的解决方案是什么?具体地说,我如何修改HTTPClient,以便当我从不同的源发出多个请求时,每个源都能得到相应的响应
# 1 楼答案
您似乎不正确地使用了单例模式,或者试图将其应用于非线程安全的API
除非您自己使用回调方法或管理线程,否则您将无法对不同的客户端使用相同的流对象。您应该只使用单例来保存整个程序所共有的数据,以确保在程序中的任何时候都只存在一个类的实例
简单一点:使用单例存储公共数据,并为每个客户机使用不同的流实例
我制作了一个简单的(但功能性的)示例,演示如何正确使用单例模式来解决连接性问题。单例仅用于保存整个系统共用的缓存信息。在本例中,您可以更改URL,但可以添加安全性和其他优化
# 2 楼答案
我猜您遇到了麻烦,因为您对这两个应用程序使用了相同的侦听器,或者您无法回忆请求是来自A还是B
因此,当您启动请求时,您可能希望提供一个回调,该回调会收到通知,并使用包含有关请求的一些元信息(如URL、状态代码等)的响应执行某些操作
此外,您应该开始考虑使用{A1}来代替默认的HTTPcli客户。原因是,从姜饼开始,前一种解决方案将得到更新,而且它肯定更灵活
如果你不想自己花时间做每件事,有其他的选择,如广场改造,凌空