在我的Android应用程序中,我必须从其余的Web服务查询一些用户/会话相关数据。现在我需要一种方法将收到的Web服务结果保存在内存中,以便多个活动/片段可以访问它们。 我不希望将数据(例如用户银行帐户的列表)保存到设备上的数据库中,因为数据会在一段时间后或用户注销时过期。 当用户导航到另一个活动时,我也不想从webservice一次又一次地请求数据。
在应用程序运行期间,是否有任何已批准的模式可以在内存中保留一组数据(某些具有更多或更少属性的pojo)?
仅供参考:我正在尝试使用dagger2,mvp,retrofit2,rxandroid
此致 马丁
答案 0 :(得分:0)
这是一个解决方案: 1-创建一个DefaultUtil类:
DefaultUtil.getInstance().getUserList();
2-完成Web服务后,请调用以下代码:
function readFile(file)
{
var f = new XMLHttpRequest();
f.open("GET", file, false);
f.onreadystatechange = function ()
{
if(f.readyState === 4)
{
if(f.status === 200 || f.status == 0)
{
var res= f.responseText;
alert(res);
}
}
}
f.send(null);
}
然后您可以通过以下方式访问任何类的用户列表:
File:\\
答案 1 :(得分:0)
如果您已经在尝试使用Dagger 2,那么您需要做的就是在Application
中实例化一个组件,并在Activities
和Fragments
中使用此组件以便注入一个范围"服务"
例如:
XyzManager
的类(其中Xyz =此经理负责的实际功能)@Provides
范围@Singleton
方法(在Dagger'模块中)
XyzManager
中实例化注入Application
的组件并将getComponent()
方法添加到自定义Appliaction
类使用相同的组件Activities
和Fragments
注入XyzManager
时((MyApplication)getApplication()).getComponent().inject(this)
如果您采取上述步骤,那么您的所有Activities
和Fragments
都将获得与XyzManager
完全相同的实例的引用,并且您在此管理器中缓存的数据将是无处不在。
您将获得的结构与this answer中描述的结构非常相似。
请注意,这种方法比解决static
事情要好得多(例如Singleton模式,或@KhalidTaha在答案中建议的内容)。
如果您需要有关框架方面的详细信息,您可能需要查看有关Dagger 2范围的at my post。
答案 2 :(得分:0)
@Vasiliy 我已经研究了相关的答案,但我没有得到它。我不直接在活动中使用我的BankingSession单例,因此调用“getComponent()。inject(this)....”将不起作用。我在其他服务类中使用单例(不是Android服务......只是业务逻辑)。
// this should be a single instance across the whole app
@Singleton
public class BankingSession {
@Inject
public BankingSession() {
}
}
public class SessionServiceImpl implements SessionService {
private final BankingSession bankingSession;
@Inject
public SessionServiceImpl(BankingSession bankingSession) {
this.bankingSession = bankingSession;
}
}
@Module
public class SessionModule {
@Provides
public SessionService provideSessionService(SessionServiceImpl sessionService) {
return sessionService;
}
}
@Singleton
@Component(modules = {AppModule.class, NetworkModule.class, SessionModule.class})
public interface AppComponent {
Application application();
LoginComponent plus(LoginModule module);
AccountComponent plus(AccountModule module);
BankingSession bankingSession();
}
无论我如何尝试,BankingSession的构造函数都被多次调用