//适配器
package alice.bw.com.app2;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
/**
* Created by jj on 2017/11/16.
*/
public class FoodAdapter extends BaseAdapter{
private List<FoodEntity.DataBean> list;
private Context context;
private LayoutInflater inflater;
public FoodAdapter(List list, Context context) {
this.list = list;
this.context = context;
inflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder=null;
if (convertView==null){
holder=new ViewHolder();
//
convertView=inflater.inflate(R.layout.item_layout,parent,false);
holder.show_iv= (ImageView) convertView.findViewById(R.id.show_iv);
holder.subject_tv= (TextView) convertView.findViewById(R.id.subject_tv);
holder.summary_tv= (TextView) convertView.findViewById(R.id.summary_tv);
convertView.setTag(holder);
}else {
holder= (ViewHolder) convertView.getTag();
}
FoodEntity.DataBean dataBean=list.get(position);
holder.summary_tv.setText(dataBean.getFood_str());
holder.subject_tv.setText(dataBean.getTitle());
Picasso.with(context).with(context).load(dataBean.getPic()).into(holder.show_iv);
return convertView;
}
static class ViewHolder{
TextView subject_tv;
TextView summary_tv;
ImageView show_iv;
}
}
//MainActivity
package alice.bw.com.app2;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
import alice.bw.com.app2.db.MySQLiteDateBase;
public class MainActivity extends AppCompatActivity {
//网址
private String path="http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=";
private List<FoodEntity.DataBean> list=new ArrayList<>();
private ListView listview;
//创建一个适配器
private FoodAdapter foodAdapter;
private int pager = 1;
private ImageView img;
private MySQLiteDateBase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.show_img);
db = MySQLiteDateBase.getInstance(this);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(){
@Override
public void run() {
super.run();
final Bitmap bm = HttpUtils.getBitmap("http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg");
runOnUiThread(new Runnable() {
@Override
public void run() {
SDcardUtil.saveBitmapToSD("http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg",bm,MainActivity.this);
img.setImageBitmap(SDcardUtil.getBitmapFromSD("http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg",MainActivity.this));
}
});
}
}.start();
}
});
listview=(ListView) findViewById(R.id.listview);
//调用适配器
foodAdapter=new FoodAdapter(list,this);
//运行适配器
listview.setAdapter(foodAdapter);
getDate();
//点击修改
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
db.updateData(new FoodEntity.DataBean("猪肝","http://img3.redocn.com/tupian/20150121/bawangzhugan_3623998.jpg","猪肝"),list.get(i).getTitle());
ArrayList<FoodEntity.DataBean> dataBeens = db.queryData();
MainActivity.this.list.clear();
//添加实体类 里面所有的Data类
MainActivity.this.list.addAll(dataBeens);
//更新数据
foodAdapter.notifyDataSetChanged();
}
});
//长按删除
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
db.deletData(list.get(i).getTitle());
ArrayList<FoodEntity.DataBean> dataBeens = db.queryData();
MainActivity.this.list.clear();
//添加实体类 里面所有的Data类
MainActivity.this.list.addAll(dataBeens);
//更新数据
foodAdapter.notifyDataSetChanged();
return true;
}
});
}
//定义一个方法来表示专门的 数据处理
private void getDate(){
//todo 从数据库中查询数据 如果查询到的是空 就从网络上获取数据
//todo 如果查询的不为空就直接添加到集合中
ArrayList<FoodEntity.DataBean> list = db.queryData();
if(list.size()!=0){
//添加实体类 里面所有的Data类
MainActivity.this.list.addAll(list);
//更新数据
foodAdapter.notifyDataSetChanged();
return;
}
//异步任务
new AsyncTask<Void,Void,String>(){
@Override
protected void onPreExecute() {
super.onPreExecute();
Intent intent = new Intent("alice.bw.com.app2");
sendBroadcast(intent);
}
@Override
protected String doInBackground(Void... params) {
//调用HTTP解析从网上下载的字符串
return HttpUtils.getJsonFromNet(path+pager);
}
//s是DoInBackground返回的值
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (!s.isEmpty()){
//完成刷新 如果缺少完成刷新就会一直刷新
// listview.onRefreshComplete();
Gson gson=new Gson();
FoodEntity foodEntity=gson.fromJson(s,FoodEntity.class);
// 将数据保存到数据库中 db.addDataS(list);
db.addDatas(foodEntity.getData());
//添加实体类 里面所有的Data类
MainActivity.this.list.addAll(foodEntity.getData());
//更新数据
foodAdapter.notifyDataSetChanged();
}
}
}.execute();
}
}
//广播接收
package alice.bw.com.app2;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
/**
* @author alice
* @version 1.0
* @Date 2017/12/9 10:17
*/
public class MyBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "正在网络上下载数据", Toast.LENGTH_SHORT).show();
}
}
package alice.bw.com.app2.db;
import java.io.Serializable;
public class MySQLiteColumn implements Serializable{
public static final String TABLE_NAME="data";
public static final String _ID = "_id";
public static final String TITLE = "title";
public static final String PIC = "pic";
public static final String FOOD_STR = "food_str";
}
package alice.bw.com.app2.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import alice.bw.com.app2.FoodEntity;
/**
* ����ģʽ����ͬһ�ű�
* @author alice
*
*/
public class MySQLiteDateBase {
private static MySQLiteDateBase mydb;
private MySQliteOpenHelper openHelper;
/**
* ���췽��˽�л�
* @param context
*/
private MySQLiteDateBase(Context context) {
super();
openHelper = new MySQliteOpenHelper(context);
}
/**
* ��ȡMySQLiteDateBase
* @param context
* @return
*/
public static synchronized MySQLiteDateBase getInstance(Context context){
if(mydb == null){
mydb = new MySQLiteDateBase(context);
}
return mydb;
}
public void addData(FoodEntity.DataBean data){
SQLiteDatabase db = null;
try {
db = openHelper.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(MySQLiteColumn.PIC, data.getPic());
contentValues.put(MySQLiteColumn.TITLE, data.getTitle());
contentValues.put(MySQLiteColumn.FOOD_STR, data.getFood_str());
db.insert(MySQLiteColumn.TABLE_NAME, null, contentValues);
} catch (Exception e) {
}finally{
openHelper.closeDataBase(db);
}
}
public void addDatas(List<FoodEntity.DataBean> list){
SQLiteDatabase db = null;
try {
db = openHelper.getReadableDatabase();
for (int i = 0; i <list.size() ; i++) {
FoodEntity.DataBean data = list.get(i);
ContentValues contentValues = new ContentValues();
contentValues.put(MySQLiteColumn.PIC, data.getPic());
contentValues.put(MySQLiteColumn.TITLE, data.getTitle());
contentValues.put(MySQLiteColumn.FOOD_STR, data.getFood_str());
db.insert(MySQLiteColumn.TABLE_NAME, null, contentValues);
}
} catch (Exception e) {
}finally{
openHelper.closeDataBase(db);
}
}
public ArrayList<FoodEntity.DataBean> queryData(){
ArrayList<FoodEntity.DataBean> list = new ArrayList<FoodEntity.DataBean>();
Cursor cursor = null;
SQLiteDatabase db = null;
try {
db = openHelper.getReadableDatabase();
//��ѯ����
cursor = db.query(MySQLiteColumn.TABLE_NAME, new String[]{MySQLiteColumn.TITLE,MySQLiteColumn.PIC,MySQLiteColumn.FOOD_STR}, null, null, null, null, null, null);
int titleIndex = cursor.getColumnIndex(MySQLiteColumn.TITLE);
int picIndex = cursor.getColumnIndex(MySQLiteColumn.PIC);
int food_strIndex = cursor.getColumnIndex(MySQLiteColumn.FOOD_STR);
while (cursor.moveToNext()) {
String title = cursor.getString(titleIndex);
String pic = cursor.getString(picIndex);
String food_str = cursor.getString(food_strIndex);
FoodEntity.DataBean data = new FoodEntity.DataBean(title,pic,food_str);
list.add(data);
}
return list;
} catch (Exception e) {
}finally{
openHelper.closeDbAndCursor(db, cursor);
}
return null;
}
public boolean deletData(String name){
SQLiteDatabase db = null;
try {
db = openHelper.getReadableDatabase();
//ɾ��һ������
int i = db.delete(MySQLiteColumn.TABLE_NAME, MySQLiteColumn.TITLE+" = '"+name+"'", null);
if(i!=0){
return true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
openHelper.closeDataBase(db);
}
return false;
}
public boolean updateData(FoodEntity.DataBean data, String name){
SQLiteDatabase db = null;
try {
db = openHelper.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(MySQLiteColumn.TITLE, data.getTitle());
contentValues.put(MySQLiteColumn.PIC, data.getPic());
contentValues.put(MySQLiteColumn.FOOD_STR, data.getFood_str());
int count = db.update(MySQLiteColumn.TABLE_NAME, contentValues, MySQLiteColumn.TITLE+" = '"+ name +"'", null);
if(count > 0){
return true;
}
} catch (Exception e) {
}finally{
openHelper.closeDataBase(db);
}
return false;
}
}
package alice.bw.com.app2.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySQliteOpenHelper extends SQLiteOpenHelper{
public static final int VEISION = 1;//版本号
public static final String SQLITE_NAME = "food.db";//数据库的名字
public MySQliteOpenHelper(Context context) {
super(context, SQLITE_NAME, null, VEISION);
}
//������
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists data(_id INTEGER primary key autoincrement,title text ,pic text , food_str text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
//�ر��α�
public void closeCursor(Cursor cursor){
if(cursor == null){
return;
}
cursor.close();
}
//�ر�db
public void closeDataBase(SQLiteDatabase db){
if(db == null){
return ;
}
db.close();
}
//�ر��α��db
public void closeDbAndCursor(SQLiteDatabase db,Cursor cursor){
closeCursor(cursor);
closeDataBase(db);
}
}
package alice.bw.com.app2;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class SDcardUtil {
// 保存图片至SD卡
public static void saveBitmapToSD(String key, Bitmap bitmap, Context mContext) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = null;
String path = mContext.getExternalCacheDir().getAbsolutePath() + File.separator
// +key;
+ key.substring(key.lastIndexOf("/") + 1);
Log.d("sxl", "saveBitmapToSD: "+path);
file = new File(path);
FileOutputStream outputStream = null;
try {
file.createNewFile();
outputStream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
// 从SD卡中将图片取出来
public static Bitmap getBitmapFromSD(String key, Context mContext) {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String path = mContext.getExternalCacheDir().getAbsolutePath() + File.separator
// +key;
+ key.substring(key.lastIndexOf("/") + 1);
Bitmap bitmap = BitmapFactory.decodeFile(path);
return bitmap;
}
return null;
}
}
数据下载
package com.jj.week2; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * Created by jj on 2017/12/9. */ public class HttpUtils { public static String getJsonFromNet(String path){ try { URL url=new URL(path); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); if (conn.getResponseCode()==200){ InputStream inputStream=conn.getInputStream(); ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); byte[] b=new byte[1024]; int len=0; while ((len=inputStream.read())!=-1){ outputStream.write(b,0,len); } return outputStream.toString(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public static Bitmap getBitmap(String path){ URL url=null; HttpURLConnection huc=null; Bitmap bitmap=null; try { url=new URL(path); huc=(HttpURLConnection)url.openConnection(); huc.connect(); huc.setRequestMethod("GET"); if (huc.getResponseCode()==200){ bitmap= BitmapFactory.decodeStream(huc.getInputStream()); } return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { huc.disconnect(); } return null; } }
缺少一个实体类。