1. 程式人生 > >Android開發————簡易APP設計(二)

Android開發————簡易APP設計(二)

實驗內容

使用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

    }

}

實驗結果