(Android)如何在Fragment + Viewpager模式下请求网络数据

时间:2014-11-24 03:21:57

标签: android android-fragments android-viewpager fragmentpageradapter

在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

        }
}
那么,谁能给我很好的解决方案呢?请原谅我破碎的英语。

1 个答案:

答案 0 :(得分:0)

此示例显示了如何使用AsyncTask:

  

AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

所以:

  • onPreExecute - 在UI线程上运行。 (什么都不做,或者进行进度对话)
  • doInBackground - 在后台线程上运行。 (在这里下载数据)
  • onPostExecute - 在UI线程上运行,接收doInBackground结果。 (在此处显示/更新数据)

注意:现在我没有时间将此示例放在您的特定问题的上下文中,但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();
           }
    }
}