Java 创建从服务器填充的数据的缓存列表视图
我想创建一个缓存来存储从服务器填充的当前listview,这意味着即使用户不在线,他们也可以访问离线前加载的listview数据。这些是我的代码,包含swipelistlayout和主类Tab4Java 创建从服务器填充的数据的缓存列表视图,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
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