我的Android应用程序需要在应用程序启动时执行初始http请求以从RESTful服务获取配置json文件。此请求由Volley完成 应用程序获取数据后,MainActivity就会启动。我还定义了一些深层链接,在我的应用程序中使用给定的URI打开WebView。 Deeplink必须由SplashActivity处理,因为配置需要首先由Volley加载。我不知道这是否是处理这个问题的正确方法。 也许在Application类中请求配置是一个选项,以便配置始终可用,无论哪个Activity首先启动?
答案 0 :(得分:1)
这是正确的方法。 在您的Splash活动中,您应该使用深层链接处理传入的意图,启动您的Volley请求,然后您应继续使用您的逻辑。
同时,BTW,你应该向用户展示一些加载器/进度并当然处理失败。答案 1 :(得分:1)
如果要在Application类中进行异步调用,可以使用回调发出请求并显示所需的活动。
public interface ConfigListener {
public void onConfigReceived(List<ofSomething> list, boolean error, String message);
}
private void requestConfig(){
final DownloadUsingVolley downloader = new DownloadUsingVolley(getActivity());
downloader.retrieveData(new ConfigListener() {
@Override
public void onConfigReceived(List<ofSomething> list, boolean error, String message) {
//Show your required activity here
}
});
}
private void retrieveData(String url, final ConfigListener configListener){
final JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>(){
@Override
public void onResponse(JSONObject response) {
try {
//parse
configListener.onConfigReceived(result,false,null);
}catch (JSONException e){
configListener.onConfigReceived(0,true,e.getMessage());
}
}
},new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError volleyError) {
configListener.onConfigReceived(0,true,volleyError.getMessage());
}
});
//adding request into the queue
ApplicationClass.getInstance().addToRequestQueue(request,"aTag");
}