从HTTP一点一点地加载JSON(片上)

时间:2013-12-26 16:13:53

标签: android json listview download

我认为这篇文章不是针对Android主题的StackOverflow,所以如果是,我很抱歉,但我已经搜索了很多。

我的问题

我一直在寻找一个无穷无尽的listview填充方法,比如Android Market和我found it, which is great

问题是:我正在下载一个5 MB的JSON文件,该文件只包含我的ListView

的字符串和条目

我不想让用户等到下载JSON文件,所以我想显示第一个条目,所以我必须下载我的JSON文件的片段或部分... 如何我能做到吗?

  1. 这是我下载文件的方式:     public class lista扩展了AsyncTask {

        @Override
        protected void onPreExecute() {
        pd = new ProgressDialog(inscritos.this);
        pd.setTitle("Procesando...");
        pd.setMessage("Espera hasta que se termine.");
        pd.setCancelable(false);
        pd.setIndeterminate(true);
        pd.show();
        }
    
        @SuppressWarnings("unchecked")
        @Override
        protected Void doInBackground(final String... params) {
            InputStream source = f.retrieveStream(params[0]);
            Gson gson = new Gson();
            Reader reader = new InputStreamReader(source);
    
            Respuesta response = gson.fromJson(reader, Respuesta.class);
            Socio[] socios = response.getSocio();
    
            lista = new ArrayList<Socio>();
            for (Socio o : socios) {
                lista.add(o);
            }
            return null;
    
        }
    
    
        @Override
        protected void onPostExecute(final Void result) {
            pd.dismiss();
        }
    }
    
  2. 这就是我* 检索我的 f.retrieveStream(params[0])) *

    的方式
        @SuppressLint("NewApi")
    
    public static InputStream retrieveStream(String url) {
    
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    
    DefaultHttpClient client = new DefaultHttpClient();
    
    HttpGet getRequest = new HttpGet(url);
    
    try {
    
        HttpResponse getResponse = client.execute(getRequest);
        final int statusCode = getResponse.getStatusLine().getStatusCode();
    
        if (statusCode != HttpStatus.SC_OK) {
            Log.w("ERROR", "Error " + statusCode + " for URL " + url);
            return null;
        }
    
        HttpEntity getResponseEntity = getResponse.getEntity();
        return getResponseEntity.getContent();
    
    } catch (IOException e) {
        getRequest.abort();
        Log.w("ERROR", "Error for URL " + url, e);
    } catch (Exception e) {
        getRequest.abort();
        Log.w("ERROR", "Error for URL " + url, e);
    }
    return null;}
    
  3. 谢谢

1 个答案:

答案 0 :(得分:0)

那么它应该在服务器端(例如:你的php脚本)实现,而不是在客户端实现。编写您的php脚本,使其根据客户端请求的偏移限制给出响应。假设您想要从index 0开始的10个条目,那么offset应该是0limit应该是10。基于offsetlimit,您的json响应应该只包含这么多数据。

如果您在服务器端使用php,这是一个关于通过php使用分页的很好的教程

http://www.tutorialspoint.com/php/mysql_paging_php.htm