一、项目介绍:
这是一个简易的便签,主要就是listview和数据库sqlite
二、项目运行效果图:
三、工程目录:
四、代码:
1.Chaxun.java
package com.example.Shujvku;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yyd.view.entity.Bianqian;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class Chaxun {
private Shujvkulianjie dbHelper;
private SQLiteDatabase sqLiteDatabase;
public Chaxun(Context context){
dbHelper=new Shujvkulianjie(context);
}
//添加
//添加数据传入 标题 内容 id和时间自动获取
public void tianjia(String title ,String content){
sqLiteDatabase=dbHelper.openDatabase();
String sql="insert into notes(title,content) values(?,?)";
sqLiteDatabase.execSQL(sql, new String[]{title,content});
sqLiteDatabase.close();
}
//删除
public void shanchu(String id){ //得到id 通过id对表中的数据进行删除
sqLiteDatabase=dbHelper.openDatabase();
String sql="delete from notes where id=?";
sqLiteDatabase.execSQL(sql,new String[]{id});
sqLiteDatabase.close();
}
//修改
//通过id得到要修改的数据 把传入的标题和内容进行修改
public void xiugai(String id,String biaoti,String neirong){
sqLiteDatabase=dbHelper.openDatabase();
String sql="update notes set title=?,content=? where id=?";
sqLiteDatabase.execSQL(sql,new String[]{biaoti,neirong,id});
sqLiteDatabase.close();
}
/*yyd修改的查询方法*/
public List viewlist_bianqian(){
List<Bianqian> list=new ArrayList<Bianqian>();
Bianqian hero;
sqLiteDatabase=dbHelper.openDatabase();//打开数据库
Cursor cursor = sqLiteDatabase.rawQuery("select * from notes ",null
);//第二条数据
while(cursor.moveToNext()) {
int id=Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
String n_title=cursor.getString(cursor.getColumnIndex("title"));
String n_content=cursor.getString(cursor.getColumnIndex("content"));
String n_postdate=cursor.getString(cursor.getColumnIndex("datetime"));
hero=new Bianqian(id, n_title, n_content, 1, 1,true, n_postdate);
list.add(hero);
}
sqLiteDatabase.close();//关闭数据库
return list;
}
/*yyd修改的模糊查询代码*/
public List sousu(String title){
List<Bianqian> list=new ArrayList<Bianqian>();
Bianqian hero;
sqLiteDatabase=dbHelper.openDatabase();//打开数据库
Cursor cursor = sqLiteDatabase.rawQuery("select * from notes where title like ?",new String[]{"%" +title +"%"}
);//第二条数据
while(cursor.moveToNext()) {
int id=Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
String n_title=cursor.getString(cursor.getColumnIndex("title"));
String n_content=cursor.getString(cursor.getColumnIndex("content"));
String n_postdate=cursor.getString(cursor.getColumnIndex("datetime"));
hero=new Bianqian(id, n_title, n_content, 1, 1,true, n_postdate);
list.add(hero);
}
sqLiteDatabase.close();//关闭数据库
return list;
}
}
2.Shujvkulianjie.java
package com.example.Shujvku;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
import com.example.test.R;
public class Shujvkulianjie {
private final int BUFFER_SIZE = 400000;
public static final String DB_NAME = "windnote.db"; // 保存的数据库文件名
public static final String PACKAGE_NAME = "com.example.test";// 应用的包名
public static final String DB_PATH = "/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ PACKAGE_NAME + "/databases";
/*// SDCard 定义数据库的存放路径
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath() + "/dictionary";*/
private Context context;
public Shujvkulianjie(Context context) {
this.context = context;
}
public SQLiteDatabase openDatabase() {
try {
File myDataPath = new File(DB_PATH);
if (!myDataPath.exists()) {
myDataPath.mkdirs();// 如果没有这个目录则创建
}
String dbfile = myDataPath + "/" + DB_NAME;
if (!(new File(dbfile).exists())) {// 判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
InputStream is = context.getResources().openRawResource(
R.raw.windnote); // 欲导入的数据库
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
null);
return db;
} catch (FileNotFoundException e) {
Log.e("Database", "File not found");
e.printStackTrace();
} catch (IOException e) {
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
}
}
3.MainActivity.java
package com.example.test;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.example.Shujvku.Chaxun;
import com.example.test.R;
import com.yyd.view.dao.bianqianAdapter;
import com.yyd.view.entity.Bianqian;
/**
* @author yyd 便签列表显示的java文件
*
*/
public class MainActivity extends Activity {
private Button btn_insert;
private ListView lv;
private List<Bianqian> list_bianqian;
private Chaxun wordDao;
private bianqianAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_insert=(Button) findViewById(R.id.button1);
lv = (ListView) findViewById(R.id.listView1);// 获取控件
}
public void onResume(){
viewlist();// 显示列表的方法
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void viewlist() {
wordDao = new Chaxun(this);
list_bianqian = new ArrayList<Bianqian>();
list_bianqian = wordDao.viewlist_bianqian();// 通过查询方法获得list;
// String name=String.valueOf(list1.get(0).getN_content());//第一条数据
// Toast.makeText(MainActivity.this,
// "查询成功" + list_bianqian.get(0).getN_content().toString(),
// Toast.LENGTH_SHORT).show();// 提示查询成功
adapter = new bianqianAdapter(this, R.layout.fruit_item, list_bianqian);// 当前布局,子布局,数据源
lv.setAdapter(adapter);
onclic_edt();
onclick_select();// 长按按钮弹出选择框
}
/* yyd单击传到添加页面 */
public void onclic_add(View v) {
Intent intent=new Intent(MainActivity.this,Tianjia.class);
startActivity(intent);
}
/* yyd单击传到编辑页面 */
public void onclic_edt() {
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Bianqian bianqian1 = new Bianqian();
int n_id = list_bianqian.get(arg2).getId();
String n_title = list_bianqian.get(arg2).getN_title();
String n_content = list_bianqian.get(arg2).getN_content();
String n_postdate = list_bianqian.get(arg2).getN_postdate();
bianqian1 = new Bianqian(n_id, n_title, n_content, 1, 1, true,
n_postdate);
Intent intent = new Intent(MainActivity.this, Xiugai.class);
Bundle bundle = new Bundle();
bundle.putString("n_id", String.valueOf(n_id));
bundle.putString("n_title", String.valueOf(n_title));
bundle.putString("n_content", String.valueOf(n_content));
intent.putExtras(bundle);
// Toast.makeText(MainActivity.this,
// "id:" + n_id+"\n title"+n_title+"\n content"+n_content,
// Toast.LENGTH_SHORT).show();
startActivity(intent);// 将当前list的类传到编辑页面
}
});
}
/* yyd添加单击长按弹出菜单。 */
public void onclick_select() {
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
final int arg2, long arg3) {
// Toast.makeText(MainActivity.this, "asdf",
// Toast.LENGTH_SHORT).show();
// Toast.makeText(MainActivity.this,
// "您选择的是" + list_.get(arg2).getN_content().toString(),
// Toast.LENGTH_SHORT).show();
new AlertDialog.Builder(MainActivity.this)
.setTitle("系统提示")
.setIcon(R.drawable.ji03)
.setItems(R.array.item,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0,
int arg1) {
String[] pk = MainActivity.this
.getResources().getStringArray(
R.array.item);// 当前点击的是哪个array
if (pk[arg1].equals("删除")) {
// 删除数据库
int id = list_bianqian.get(arg2)
.getId();
String id1 = String.valueOf(id);
// 执行数据库删除语句
wordDao.shanchu(id1);//执行的删除方法
list_bianqian.remove(arg2);//在listview中删除这一行
adapter.notifyDataSetChanged();//更新listview
// Toast.makeText(getActivity(),
// "位置"+p, 1000).show();
}
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
}).show();
return true;
}
});
}
/* yyd添加一个返回按钮的监听器。 */
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 创建退出对话框
AlertDialog isExit = new AlertDialog.Builder(this).create();
// 设置对话框标题
isExit.setTitle("系统提示");
// 设置对话框消息
isExit.setMessage("确定要退出吗?");
// 添加选择按钮并注册监听
isExit.setButton("退出", listener);
isExit.setButton2("取消", listener);
// 显示对话框
isExit.show();
}
return false;
}
DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
finish();
break;
case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
break;
default:
break;
}
}
};
}
4.bianqianAdapter.java
package com.yyd.view.dao;
import java.util.List;
import com.example.test.R;
import com.yyd.view.entity.Bianqian;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
* @author yyd
* 便签显示用的自定义Adapter
*
*/
public class bianqianAdapter extends ArrayAdapter{
private int resourceId;
public bianqianAdapter(Context context, int resource, List objects) {
super(context, resource, objects);
//当前布局,子布局id,数据源
// TODO Auto-generated constructor stub
resourceId=resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Bianqian hero=(Bianqian) getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);//获取样式;
ImageView fruitImage = (ImageView) view.findViewById(R.id.img_biaoqian_title);
TextView fruitTitle = (TextView) view.findViewById(R.id.tv_biaoqian_title);
TextView fruitContent = (TextView) view.findViewById(R.id.tv_biaoqian_content);
TextView fruitTime = (TextView) view.findViewById(R.id.tv_biaoqian_time);
fruitImage.setImageResource(R.drawable.ic_launcher);//设置样式
fruitTitle.setText(hero.getN_title());
fruitContent.setText(hero.getN_content());
fruitTime.setText(hero.getN_postdate());
return view;//返回样式
}
}
5.Tianjia.java
package com.example.test;
import com.example.Shujvku.Chaxun;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Tianjia extends Activity {
private Chaxun wordDao;
private Button btnbaocun;
private EditText etbiaoti;
private EditText etneirong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tianjia);
// 获取控件
btnbaocun = (Button) findViewById(R.id.btnbaocun);
etbiaoti = (EditText) findViewById(R.id.etbiaoti);
etneirong = (EditText) findViewById(R.id.etneirong);
}
public void tianjia(View view) {
if (TextUtils.isEmpty(etbiaoti.getText().toString())) {
Toast.makeText(Tianjia.this, "请输入标题", Toast.LENGTH_SHORT).show();// 提示添加成功
} else if (TextUtils.isEmpty(etneirong.getText().toString())) {
Toast.makeText(Tianjia.this, "请输入内容", Toast.LENGTH_SHORT).show();// 提示添加成功
} else {
wordDao = new Chaxun(this);
String biaoti = etbiaoti.getText().toString().trim();// 保存一个起始结尾都被删除的文本
String neirong = etneirong.getText().toString().trim();
wordDao.tianjia(biaoti, neirong);
Toast.makeText(Tianjia.this, "添加成功", Toast.LENGTH_SHORT).show();// 提示添加成功
finish();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.tianjia, menu);
return true;
}
/* yyd添加一个返回按钮的监听器。 */
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 如果内容为空
if (TextUtils.isEmpty(etbiaoti.getText().toString())) {
if (TextUtils.isEmpty(etneirong.getText().toString())) {
finish();
}
} else {
// 创建退出对话框
AlertDialog isExit = new AlertDialog.Builder(this).create();
// 设置对话框标题
isExit.setTitle("系统提示");
// 设置对话框消息
isExit.setMessage("确定要退出吗?");
// 添加选择按钮并注册监听
isExit.setButton("退出", listener);
isExit.setButton2("取消", listener);
// 显示对话框
isExit.show();
}
}
return false;
}
DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
finish();
break;
case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
break;
default:
break;
}
}
};
<span style="font-size:14px;">}
</span>
6.
Xiugai
.java
package com.example.test;
import com.example.Shujvku.Chaxun;
import com.yyd.view.entity.Bianqian;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Xiugai extends Activity {
private Button btnquerenxiugai;
private EditText etxiugaibiaoti;
private EditText etxiugaineirong;
private Chaxun wordDao;
String id = null;
String biaoti;
String neirong;
String biaotiqian;// 刚传过来的参数
String neirongqian;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xiugai);
Bianqian bianqian = new Bianqian();// 实例化一个便签实体类
btnquerenxiugai = (Button) findViewById(R.id.btnquedingxiugai);
etxiugaibiaoti = (EditText) findViewById(R.id.etxiugaibiaoti);
etxiugaineirong = (EditText) findViewById(R.id.etxiugaineirong);// 获取控件
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
id = bundle.getString("n_id");
String title = bundle.getString("n_title");
biaotiqian = title;
String content = bundle.getString("n_content");
neirongqian = content;
etxiugaibiaoti.setText(title);
etxiugaineirong.setText(content);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.xiugai, menu);
return true;
}
/* 点击修改事件 */
public void xiugai(View view) {
if (TextUtils.isEmpty(etxiugaibiaoti.getText().toString())) {
Toast.makeText(Xiugai.this, "请输入标题", Toast.LENGTH_SHORT).show();// 提示添加成功
} else if (TextUtils.isEmpty(etxiugaineirong.getText().toString())) {
Toast.makeText(Xiugai.this, "请输入内容", Toast.LENGTH_SHORT).show();// 提示添加成功
} else {
wordDao = new Chaxun(this);
// id接收数据库中查到的id,然后点击进入到修改页面时传入id
biaoti = etxiugaibiaoti.getText().toString().trim();
neirong = etxiugaineirong.getText().toString().trim();
wordDao.xiugai(id, biaoti, neirong);
Toast.makeText(Xiugai.this, "修改成功", Toast.LENGTH_SHORT).show();// 提示添加成功
finish();
}
}
/* yyd添加一个返回按钮的监听器。 */
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 如果做出了修改
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!biaotiqian.equals(etxiugaibiaoti.getText().toString())||!neirongqian.equals(etxiugaineirong.getText().toString())) {// 标题变化
// 创建退出对话框
AlertDialog isExit = new AlertDialog.Builder(this).create();
// 设置对话框标题
isExit.setTitle("系统提示");
// 设置对话框消息
isExit.setMessage("确定要退出吗?");
// 添加选择按钮并注册监听
isExit.setButton("退出", listener);
isExit.setButton2("取消", listener);
// 显示对话框
isExit.show();
}
else{
finish();
}
}
return false;
}
DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
finish();
break;
case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
break;
default:
break;
}
}
};
}
五、总结:
这是15年暑假期间,软件大赛雏形,只有大体功能,这其中的有些功能留作以后备用。(注:本人英语太差)
六、项目下载地址:
http://download.csdn.net/download/yyd_diablo/8934725