202.m1-App的界面的实现

App的界面的实现和HomeFragment,其中的javaBean都是一样的,因此ListView的实现ViewHolder的实现,和AppProtocal的解析也是一样的。

AppFragment.java

package com.ldw.market.fragment;

import java.util.List;

import android.text.format.Formatter;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import com.ldw.market.R;
import com.ldw.market.Adapter.DefaultAdapter;
import com.ldw.market.domain.AppInfo;
import com.ldw.market.holder.BaseHolder;
import com.ldw.market.http.HttpHelper;
import com.ldw.market.protocol.AppProtocol;
import com.ldw.market.utils.UiUtils;
import com.ldw.market.view.BaseListView;
import com.lidroid.xutils.bitmap.PauseOnScrollListener;

public class AppFragment extends BaseFragment {

	List<AppInfo> datas;
	
	//加载成功,显示ListView
	@Override
	public View createSuccessView() {
		BaseListView  listView=new BaseListView(UiUtils.getContext());
		listView.setAdapter(new AppAdapter(datas));
		// 第二个参数 慢慢滑动的时候是否加载图片 false  加载   true 不加载
		//  第三个参数  飞速滑动的时候是否加载图片  true 不加载 
		listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
		bitmapUtils.configDefaultLoadingImage(R.drawable.ic_default);  // 设置如果图片加载中显示的图片
        bitmapUtils.configDefaultLoadFailedImage(R.drawable.ic_default);// 加载失败显示的图片
		return listView;
	}
	
	public class AppAdapter extends DefaultAdapter<AppInfo>{

		public AppAdapter(List<AppInfo> datas) {
			super(datas);
			// TODO Auto-generated constructor stub
		}

		@Override
		protected BaseHolder<AppInfo> getHolder() {
			return new ViewHolder();
		}
		
	}
	
	static class ViewHolder extends BaseHolder<AppInfo>{
		ImageView item_icon;
		TextView item_title,item_size,item_bottom;
		RatingBar item_rating;

		
		//更新界面
		@Override
		public void refreshView(AppInfo data){
			this.item_title.setText(data.getName());// 设置应用程序的名字
			String size = Formatter.formatFileSize(UiUtils.getContext(), data.getSize());
			this.item_size.setText(size);
			this.item_bottom.setText(data.getDes());
			float stars = data.getStars();
			this.item_rating.setRating(stars); // 设置ratingBar的值
			String iconUrl = data.getIconUrl(); //这个地址不全,需要加上apache地址"iconUrl": "app/com.youyuan.yyhl/icon.jpg",
			//http://127.0.0.1:8090/image?name=app/com.youyuan.yyhl/icon.jpg
			
			
			//第一个参数是显示图片的控件,第二个参数是显示图片的url
			bitmapUtils.display(this.item_icon, HttpHelper.URL+"image?name="+iconUrl);
			// 显示图片的控件
			//bitmapUtils.display(holder.item_icon, HttpHelper.URL+"image?name="+iconUrl);
		}

		@Override
		public View initView() {
			View contentView = View.inflate(UiUtils.getContext(), R.layout.item_app, null);
			this.item_icon = (ImageView) contentView.findViewById(R.id.item_icon);
			this.item_title = (TextView) contentView.findViewById(R.id.item_title);
			this.item_size = (TextView) contentView.findViewById(R.id.item_size);
			this.item_bottom = (TextView) contentView.findViewById(R.id.item_bottom);
			this.item_rating = (RatingBar) contentView.findViewById(R.id.item_rating);
			return contentView;
		}

	}

	/*
	 * 请求服务器获取服务器的数据(non-Javadoc)
	 * @see com.ldw.market.fragment.BaseFragment#load()
	 */
	@Override
	protected LoadResult load() {
		AppProtocol protocol = new AppProtocol();
		datas = protocol.load(0);
		return checkData(datas);
	}

}

AppProtocol.java

package com.ldw.market.protocol;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.ldw.market.domain.AppInfo;

public class AppProtocol extends BaseProtocol<List<AppInfo>>{

	@Override
	public List<AppInfo> parseJson(String json) {
		List<AppInfo> appInfos = new ArrayList<AppInfo>();
		//获取到中括号的内容
		try {
			JSONArray jsonArray = new JSONArray(json);
			for(int i = 0; i< jsonArray.length();i ++){
				//获取到array里面的Object
				JSONObject jsonObj = jsonArray.getJSONObject(i);
				//解析Object里面的条目
				long id = jsonObj.getLong("id");
				String name = jsonObj.getString("name");
				String packageName = jsonObj.getString("packageName");
				String iconUrl = jsonObj.getString("iconUrl");
				float stars = Float.parseFloat(jsonObj.getString("stars"));
				long size = jsonObj.getLong("size");
				String downloadUrl = jsonObj.getString("downloadUrl");
				String des = jsonObj.getString("des");
				
				//构造函数,创建一个appInfo
				AppInfo appInfo = new AppInfo(id, name, packageName, iconUrl,
						stars, size, downloadUrl, des);
				//往集合中添加对象
				appInfos.add(appInfo);
			}
			return appInfos;
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}

	@Override
	public String getKey() {
		// TODO Auto-generated method stub
		return "app";
	}

}

BaseProtocal.java

package com.ldw.market.protocol;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.StringWriter;

import com.ldw.market.http.HttpHelper;
import com.ldw.market.http.HttpHelper.HttpResult;
import com.ldw.market.utils.FileUtils;
import com.lidroid.xutils.util.IOUtils;

public abstract class BaseProtocol<T> {

	public T load(int index) {
		// 加载本地数据
		String json = loadLocal(index);
		if (json == null) {
			// 请求服务器
			json = loadServer(index);
			if (json != null) {
				saveLocal(json, index);
			}
		}
		if (json != null) {
			return parseJson(json);
		} else {
			return null;
		}
	}
	
	//从服务器请求json数据
	private String loadServer(int index) {
		//请求地址http://127.0.0.1:8090/home?index=1
		HttpResult httpResult = HttpHelper.get(HttpHelper.URL + getKey()
				+ "?index=" + index); 
		//得到结果
		String json = httpResult.getString();
		//System.out.println(json);
		return json;
	}

	
	//将json保存在本地:方法1把整个json文件写到一个本地文件中,方法2吧每条数据都摘出来保存在数据库中
	private void saveLocal(String json, int index) {
		//创建一个buffer
		BufferedWriter bw = null;
		try {
			File dir=FileUtils.getCacheDir();
			//创建一个文件
			File file = new File(dir, getKey() + "_" + index); // /mnt/sdcard/market/cache/home_0
			FileWriter fw = new FileWriter(file);
			 bw = new BufferedWriter(fw);
			//在第一行写一个过期时间 
			bw.write(System.currentTimeMillis() + 1000 * 100 + "");
			bw.newLine();// 换行
			bw.write(json);// 把整个json文件保存起来
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			IOUtils.closeQuietly(bw);
		}
		
	}

	//加载本地保存的数据
	private String loadLocal(int index) {
		// 如果发现时间过期了,就不用本地的缓存
		File dir=FileUtils.getCacheDir();// 获取缓存所在的文件夹
		//得到缓存文件
		File file = new File(dir, getKey() + "_" + index); 
		try {
			FileReader fr=new FileReader(file);
			BufferedReader br=new BufferedReader(fr);
			//获取过期时间
			long outOfDate = Long.parseLong(br.readLine());
			//判断是否过期,
			if(System.currentTimeMillis()>outOfDate){
				return null;
			}else{
				String str=null;
				StringWriter sw=new StringWriter();
				while((str=br.readLine())!=null){
				
					sw.write(str);
				}
				return sw.toString();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 解析json
	 * @param json
	 * @return
	 */
	public abstract T parseJson(String json);
	
	/**
	 * 说明了关键字home,subject....
	 */
	public abstract String getKey();
}

BaseHolder.java

package com.ldw.market.holder;

import android.view.View;

import com.ldw.market.utils.BitmapHelper;
import com.lidroid.xutils.BitmapUtils;

/*
 * ViewHolder共性的抽取
 */
public abstract class BaseHolder<Data>  {
	private View contentView;
	private Data data;
	protected BitmapUtils bitmapUtils;
	//构造方法
	public BaseHolder(){
		bitmapUtils = BitmapHelper.getBitmapUtils();
		contentView=initView();
		contentView.setTag(this);
	}
	/** 创建界面*/
	public  abstract View initView();
	
	public View getContentView() {
		return contentView;
	}
	public void setData(Data data){
		this.data=data;
		refreshView(data);
	}
	/** 根据数据刷新界面*/
	public abstract void refreshView(Data data);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值