实验内容
使用sqlite 给备忘录app增加数据保存功能
实验步骤
活动1:
Xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="left"
>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加备忘录内容"
android:onClick="onMyClick"
/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ListView>
</LinearLayout>
JAVA:
package com.example.administrator.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDatabaseOpenHelper myDatabaseOpenHelper=new MyDatabaseOpenHelper(this);
db=myDatabaseOpenHelper.getWritableDatabase();
updatelistview();
db.close();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1) {
int year = data.getIntExtra("year", 0);
int month = data.getIntExtra("month", 0);
int day = data.getIntExtra("day", 0);
int hour = data.getIntExtra("hour", 0);
int minute = data.getIntExtra("minute", 0);
byte[] bitmapBytes = data.getByteArrayExtra("bitmap");
String memoText = data.getStringExtra("memoText");
String text = makeTimeString(year, month, day, hour, minute, memoText);
MyDatabaseOpenHelper myDatabaseOpenHelper=new MyDatabaseOpenHelper(this);
db=myDatabaseOpenHelper.getWritableDatabase();
final ContentValues cv=new ContentValues();
cv.put("text",text);
cv.put("bmp",bitmapBytes);
db.insert("tm",null,cv);
updatelistview();
db.close();
}
}
public String makeTimeString(int year, int month, int day, int hour, int minute, String memoText) {
return "日期:" + year + "年"
+ (month + 1) + "月" + day + "日 时间:" + hour + "时" + minute + "分 ---" + memoText;
}
public void onMyClick(View view) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivityForResult(intent, 1);
}
public void updatelistview() {
List<TM> list=new ArrayList<TM>();
ListView listView = (ListView) findViewById(R.id.list_view);
final Cursor cursor = db.query("tm", null, null, null, null,
null, null);
while (cursor.moveToNext())
{
String text1 = cursor.getString(cursor.getColumnIndex("text"));
byte[] bitmapBytes = cursor.getBlob(cursor.getColumnIndex("bmp"));
TM tm1=new TM();
tm1.text=text1;
Bitmap bmp = null;
if (bitmapBytes != null)
{
bmp = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);
}
tm1.bmp=bmp;
list.add(tm1);
}
BaseAdapter baseAdapter=new MyBaseAdapter(list,getApplicationContext());
listView.setAdapter(baseAdapter);
}
}
class MyBaseAdapter extends BaseAdapter {
private List<TM> list;
private Context mcontext;
public MyBaseAdapter(List list, Context mcontext) {
super();
this.list = list;
this.mcontext = mcontext;
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(mcontext);
View v1 = inflater.inflate(R.layout.item, null);
TextView textView = (TextView) v1.findViewById(R.id.textView);
ImageView imageView = (ImageView) v1.findViewById(R.id.im);
textView.setText(list.get(position).text);
imageView.setImageBitmap(list.get(position).bmp);
return v1;
}
}
活动2:
Xml:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请选择日期和时间"
/>
<!-- 定义一个DatePicker组件 -->
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:calendarViewShown="true"
android:endYear="2050"
android:spinnersShown="true"
android:startYear="2000" />
<TimePicker
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<!-- 定义一个TimePicker组件 -->
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加图片"
android:onClick="MyClick2"
android:layout_gravity="left"
/>
<EditText
android:id="@+id/edt1"
android:layout_width="match_parent"
android:layout_height="100dp"
android:maxLines="3"
android:hint="在这里写备忘记录"
/>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="完成"
android:onClick="MyClick"
android:layout_gravity="center"
/>
</LinearLayout>
</ScrollView>
JAVA:
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.icu.util.Calendar;
import android.support.v4.content.SharedPreferencesCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TimePicker;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class Main2Activity extends AppCompatActivity {
private int year;
private int month;
private int day;
private int hour;
private int minute;
private Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
TimePicker timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
// 初始化DatePicker,初始化时指定监听器
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year,int month, int day)
{
//在这里保存用户选择的日期:
Main2Activity.this.year=year;
Main2Activity.this.month=month;
Main2Activity.this.day=day;
}
});
// 为TimePicker指定监听器
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
{
Main2Activity.this.hour=hourOfDay;
Main2Activity.this.minute=minute;
}
});
}
public static Bitmap getBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
// Draw background
Drawable bgDrawable = v.getBackground();
if (bgDrawable != null)
bgDrawable.draw(c);
else
c.drawColor(Color.WHITE);
// Draw view to canvas
v.draw(c);
return b;
}
public void MyClick2(View view)
{
AlertDialog.Builder b = new AlertDialog.Builder(Main2Activity.this);
//设置对话框标题:
b.setTitle("test");
//创建出我们的自定义控件:
final View myview = new MyView(Main2Activity.this);
//添加到对话框中
b.setView(myview);
//设置对话框的确定按钮
b.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bmp=Main2Activity.getBitmapFromView(myview);
ImageView img=(ImageView)findViewById(R.id.img);
img.setImageBitmap(bmp);
}
});
//显示对话框
b.show();
}
public void MyClick(View view)
{
EditText text=(EditText)findViewById(R.id.edt1);
String memoText=text.getText().toString();
Intent data = new Intent();
// 之前需要定义5个记录当前时间的变量
data.putExtra("year",year);
data.putExtra("month",month);
data.putExtra("day",day);
data.putExtra("hour",hour);
data.putExtra("minute",minute);
data.putExtra("memoText",memoText);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
data.putExtra("bitmap", baos.toByteArray());
setResult(1,data);
//关闭当前Activity:
finish();
}
}
自定义控件MyView java代码:
package com.example.administrator.myapplication;
/**
* Created by Administrator on 2017/11/26.
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
public class MyView extends View {
float firstX;
float firstY;
Path path;
MyView(Context context)
{
super(context);
path = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStrokeWidth(10);
//让画出的图形是空心的
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int act = event.getAction();
if (act == MotionEvent.ACTION_DOWN)
{
float x = event.getX();
float y = event.getY();
firstX = x;
firstY = y;
path.moveTo(firstX,firstY);
return true;
}
else if (act == MotionEvent.ACTION_MOVE)
{
float x = event.getX();
float y = event.getY();
path.lineTo(x,y);
invalidate();
}
return super.onTouchEvent(event);
}
}
实体类TM(item.xml组件抽象属性):
package com.example.administrator.myapplication;
import android.graphics.Bitmap;
/**
* Created by Administrator on 2017/11/30.
*/
public class TM {
public String text;
public Bitmap bmp;
}
item.xml(Baseadapter布局设置):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/im"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerInside"
/>
</LinearLayout>
SQLiteDataBase代码:
package com.example.administrator.myapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Administrator on 2017/12/10.
*/
public class MyDatabaseOpenHelper extends SQLiteOpenHelper {
public MyDatabaseOpenHelper(Context context) {
super(context, "data.db", null, 1);
}
public void onCreate(SQLiteDatabase db)
{
String s="create table tm(text varchar(100),bmp binary)";
db.execSQL(s);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}