我正在创建一个Android应用程序,目前只有单个活动。此活动调用api以获取JSON响应并填充Fragments。收到JSON响应后,我正在更新数据集并通知适配器。目前,在onCreate
方法中调用JSON请求。
同样在每个片段中我需要从网络加载图像所以我想知道它是否也应该放在onCreateView
或其他地方?
我很想知道实现这一目标的最佳做法是什么。
最佳做法是在进行网络连接时使用异步事件,因为根据您的服务器响应时间和网络速度,您可能会得到较晚的响应并阻止您的用户界面并且这样做并不好。
我建议你在调用API时集成AsyncTask
。
这是一个例子
class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(String... urls) {
try {
//here you make your api call and json parsing
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
protected void onPostExecute(Boolean result) {
}
你可以在onCreate中调用你的请求
JSONAsyncTask task=new JSONAsyncTask();
task.execute();
查看文档以获取更多信息https://developer.android.com/reference/android/os/AsyncTask
在onCreate进行网络通话很好,把我的两分钱给我建议我使用这个好的做法。
- 研究网络调用,并尝试确定需要多少时间以及UI线程是否需要结果,对于长操作,不应使用AsyncTask
从文档
理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。
- 不要重新发明轮子你可以使用很多库来进行网络操作,例如:
- 总是处理错误!没有什么比一些连接错误引起的无限加载器更烦人,检查与BroadCast Receiver的互联网连接