Java 创建从服务器填充的数据的缓存列表视图

Java 创建从服务器填充的数据的缓存列表视图,java,android,caching,Java,Android,Caching,我想创建一个缓存来存储从服务器填充的当前listview,这意味着即使用户不在线,他们也可以访问离线前加载的listview数据。这些是我的代码,包含swipelistlayout和主类Tab4 public class Tab4 extends android.support.v4.app.Fragment implements SwipeRefreshLayout.OnRefreshListener { private int index; ImageSwitcher sw

我想创建一个缓存来存储从服务器填充的当前listview,这意味着即使用户不在线,他们也可以访问离线前加载的listview数据。这些是我的代码,包含swipelistlayout和主类Tab4

public class Tab4 extends android.support.v4.app.Fragment implements SwipeRefreshLayout.OnRefreshListener {

    private int index;
    ImageSwitcher switcher;
    android.os.Handler Handler = new android.os.Handler();

    private SwipeRefreshLayout swipeRefreshLayout;
    private SwipeListAdapter adapter;
    private List<Movie> movieList;
    private ListView listView;


    private String URL_TOP_250 = "http://172.126.43.152/locator/test/refractor2.php?offset=";

    private int offSet = 0;

    private static final String TAG = Tab1.class.getSimpleName();

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View vi = inflater.inflate(R.layout.tab_4,container,false);


        listView = (ListView) vi.findViewById(R.id.list4);

        listView.setBackgroundColor(Color.WHITE);


        // Adding request to request queue
//Editted        AppController.getInstance().addToRequestQueue(movieReq);

        swipeRefreshLayout = (SwipeRefreshLayout) vi.findViewById(R.id.swipe_refresh_layout);

        movieList = new ArrayList<>();
        adapter = new SwipeListAdapter(getActivity(), movieList);
        listView.setAdapter(adapter);


        //getView().setOnClickListener();

        swipeRefreshLayout.setOnRefreshListener(this);

        swipeRefreshLayout.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        swipeRefreshLayout.setRefreshing(true);

                                        fetchMovies();
                                    }
                                }
        );



        return vi;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


                Intent intent = new Intent();
                intent.setClass(getActivity(), Newbies.class);

                //String text = String.valueOf(movieList.get(position));
                String text = movieList.get(position).getSlug();
                //Toast.makeText(getActivity().getApplicationContext(), text, Toast.LENGTH_LONG).show();

                Intent i = new Intent(getActivity(), Newbies.class);
                i.putExtra("TEXT", text);
                startActivity(i);


            }
        });




    }




    @Override
    public void onRefresh() {
        fetchMovies();
    }


    private void fetchMovies() {

        // showing refresh animation before making http call
        swipeRefreshLayout.setRefreshing(true);

        // appending offset to url
        String url = URL_TOP_250 + offSet;

        // Volley's json array request object
        JsonArrayRequest req = new JsonArrayRequest(url,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        if (response.length() > 0) {

                            // looping through json and adding to movies list
                            for (int i = 0; i < response.length(); i++) {
                                try {
                                    JSONObject movieObj = response.getJSONObject(i);
                                    // Movie m = new Movie();

                                    int rank = movieObj.getInt("rank");
                                    String title = movieObj.getString("postTitle");
                                    String author = movieObj.getString("postAuthor");
                                    String slug = movieObj.getString("postSlug");
                                    String categories = "technologies";
                                    String thumbnailUrl =  movieObj.getString("postPic");
                                    String year = movieObj.getString("postDate");


                                    Movie m = new Movie(rank, title, author, slug, categories, thumbnailUrl, year);

                                    movieList.add(0, m);

                                    // updating offset value to highest value
                                    if (rank >= offSet)
                                        offSet = rank;

                                } catch (JSONException e) {
                                    Log.e(TAG, "JSON Parsing error: " + e.getMessage());
                                }
                            }

                            adapter.notifyDataSetChanged();
                        }

                        // stopping swipe refresh
                        swipeRefreshLayout.setRefreshing(false);

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Server Error: " + error.getMessage());

                Toast.makeText(getActivity().getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();

                // stopping swipe refresh
                swipeRefreshLayout.setRefreshing(false);
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);
    }


}
public类Tab4扩展了android.support.v4.app.Fragment实现了SwipeRefreshLayout.OnRefreshListener{
私有整数索引;
图像切换器;
android.os.Handler=新的android.os.Handler();
私人SwipeRefreshLayout SwipeRefreshLayout;
专用SwipeListAdapter适配器;
私人名单电影演员;
私有列表视图列表视图;
私有字符串URL_TOP_250=”http://172.126.43.152/locator/test/refractor2.php?offset=";
私有整数偏移=0;
私有静态最终字符串标记=Tab1.class.getSimpleName();
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图vi=充气机。充气(右布局选项卡4,容器,假);
listView=(listView)vi.findViewById(R.id.list4);
listView.setBackgroundColor(Color.WHITE);
//将请求添加到请求队列
//编辑的AppController.getInstance().addToRequestQueue(movieReq);
swipeRefreshLayout=(swipeRefreshLayout)vi.findViewById(R.id.swipe\u refresh\u layout);
movieList=newarraylist();
适配器=新的SwipeListAdapter(getActivity(),movieList);
setAdapter(适配器);
//getView().setOnClickListener();
swipeRefreshLayout.setOnRefreshListener(此);
swipeRefreshLayout.post(新的Runnable(){
@凌驾
公开募捐{
swipeRefreshLayout.setRefreshing(true);
获取电影();
}
}
);
返回vi;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
super.onActivityCreated(savedInstanceState);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
意图=新意图();
setClass(getActivity(),Newbies.class);
//String text=String.valueOf(movieList.get(position));
String text=movieList.get(位置).getSlug();
//Toast.makeText(getActivity().getApplicationContext(),text,Toast.LENGTH_LONG.show();
意图i=新意图(getActivity(),Newbies.class);
i、 putExtra(“文本”,文本);
星触觉(i);
}
});
}
@凌驾
公共void onRefresh(){
获取电影();
}
私人电影(){
//在进行http调用之前显示刷新动画
swipeRefreshLayout.setRefreshing(true);
//将偏移量追加到url
字符串url=url\u TOP\u 250+偏移量;
//Volley的json数组请求对象
JsonArrayRequest req=新的JsonArrayRequest(url,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(TAG,response.toString());
if(response.length()>0){
//循环使用json并添加到电影列表
对于(int i=0;i=偏移)
偏移量=秩;
}捕获(JSONException e){
Log.e(标记“JSON解析错误:”+e.getMessage());
}
}
adapter.notifyDataSetChanged();
}
//停止刷卡刷新
swipeRefreshLayout.setRefreshing(false);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(标记“服务器错误:+Error.getMessage());
Toast.makeText(getActivity().getApplicationContext(),error.getMessage(),Toast.LENGTH\u LONG.show();
//停止刷卡刷新
swipeRefreshLayout.setRefreshing(false);
}
});
//将请求添加到请求队列
AppController.getInstance().addToRequestQueue(req);
}
}
而SwipeListAdapter类在下面

public class SwipeListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<Movie> movieList;
    private String[] bgColors;

    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public SwipeListAdapter(Activity tab1, List<Movie> movieList) {
        this.activity = tab1;
        this.movieList = movieList;
        bgColors = activity.getApplicationContext().getResources().getStringArray(R.array.movie_serial_bg);
    }

    @Override
    public int getCount() {
        return movieList.size();
    }

    @Override
    public Object getItem(int location) {
        return movieList.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.list_row, null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();

        NetworkImageView thumbNail = (NetworkImageView) convertView
                .findViewById(R.id.thumbnail);
        TextView title = (TextView) convertView.findViewById(R.id.title);
        TextView author = (TextView) convertView.findViewById(R.id.author);
        //String slug;
        TextView category = (TextView) convertView.findViewById(R.id.category);
        TextView year = (TextView) convertView.findViewById(R.id.releaseYear);

        // getting movie data for the row
        Movie m = movieList.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);

        // title
        title.setText(m.getTitle());

        author.setText(m.getAuthor());
       // slug.setText(m.getAuthor());

        category.setText(m.getCategories());

        // release year
        year.setText(String.valueOf(m.getYear()));

        return convertView;
    }

}
公共类SwipeListAdapter扩展BaseAdapter{
私人活动;
私人充气机;
私有列表movi