在ViewPager + Fragment中通过FragmentPagerAdapter模式。我想知道如何为Internet加载数据。
我想实施:
1.只选择当前寻呼机可以加载数据
2.只对每个寻呼机执行一次加载数据
我搜索了一些答案: 用户使用callBack方法,我看到了生命周期。它在onCreate之后回调。之后不要回电话。如果加载数据 很快 。 onCreateVie和onActivityCreate不会回调。查看找不到。所以这个方法 不合适。
boolean isFist
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isFist&&isVisibleToUser){
// int this load data
}
}
那么,谁能给我很好的解决方案呢?请原谅我破碎的英语。
答案 0 :(得分:0)
此示例显示了如何使用AsyncTask:
AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
所以:
注意:现在我没有时间将此示例放在您的特定问题的上下文中,但AsyncTask是您的最佳选择。
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
new LoadJsonTask().execute("http://example.com/data.json");
}
private class LoadJsonTask extends AsyncTask<String, Integer, String > {
ProgressDialog dialog ;
protected void onPreExecute (){
// this happens on UI Thread
// dialog, of course, is optional.
dialog = ProgressDialog.show(getActivity() ,"Wait a moment", "Downloading...");
}
protected String doInBackground (String... params){
// this happens on background...
InputStream input = null;
HttpURLConnection connection = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
// expect HTTP 200 OK
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
return null;
}
// download the file
input = connection.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
result.append(line);
}
return result.toString();
} catch (Exception e) {
// handle exceptions :p
return null;
} finally {
// cleanup here
}
}
protected void onPostExecute(String results){
// Do something with results
dialog.dismiss();
}
}
}