安卓入門——————簡單記賬本的開發(用sqlite存儲數據)(一)


設計思想————首先要確定有幾個頁面、和每個頁面的大致布局

由於是入門,我也是學習了不是很長的時間,所以項目比較low。。。。

第一個頁面,也就是打開APP的首頁面:

今天這個博客,先實現添加功能!:

首先對主界面進行布局:其中 activity_main.xml的代碼為

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
</ListView>
   <LinearLayout android:layout_width="match_parent"
       android:layout_height="wrap_content">
    <Button 
    android:onClick="click1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="新建"
    />

<Button 
    android:onClick="click2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="delete"
    />       </LinearLayout>                                                                                                  
</LinearLayout>

 

然后就是MainActivity的代碼了,其中內部含有注釋,而且我實際使用的是BaseAdapter,但是在學習的過程中我發現SimpleAdatapter更加方便簡單,所以我以注釋的形式將SimpleAdapter的內容保存了,。可以方便學習:

package com.example.hhah;

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

import org.w3c.dom.Text;
import org.w3c.dom.ls.LSInput;

import android.app.Activity;
import android.app.DownloadManager.Query;
import android.content.ClipData.Item;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.ContactsContract.DataUsageFeedback;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    private ArrayList<Bean> list;
    private MyOpenHelper myOpenHelper;
    private SQLiteDatabase db;
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<Bean>();
        lv = (ListView) this.findViewById(R.id.lv);

        myOpenHelper = new MyOpenHelper(this);
        db = myOpenHelper.getWritableDatabase();
        Cursor cursor = db.rawQuery("select * from biao01;", null);
        while (cursor.moveToNext()) {
            String t_name = cursor.getString(cursor.getColumnIndex("t_name"));
            String t_place = cursor.getString(cursor.getColumnIndex("t_place"));
            String time = cursor.getString(cursor.getColumnIndex("time"));
            Bean bean = new Bean();
            bean.setT_name(t_name);
            bean.setT_place(t_place);
            bean.setTime(time);
            list.add(bean);
        }
        MyAdapter myAdapter = new MyAdapter(this, list, R.layout.item);
        /*
         * ArrayList<HashMap<String, Object>> yy = new
         * ArrayList<HashMap<String,Object>>(); for(Bean bean1:list) { HashMap<String,
         * Object> zzz = new HashMap<String,Object>(); zzz.put("t_name",
         * bean1.getT_name()); zzz.put("t_place", bean1.getT_place()); zzz.put("time",
         * bean1.getTime()); yy.add(zzz); } SimpleAdapter simpleAdapter=new
         * SimpleAdapter(this, yy, R.layout.item, new String[]
         * {"t_name","t_place","time"},new int[]
         * {R.id.tv_name,R.id.tv_place,R.id.tv_time});
         * 
         */

        lv.setAdapter(myAdapter);
    }

    public void click1(View view) {
        // 該方法只用於跳轉,實際增加步驟在增加頁面
        Intent intent = new Intent();
        intent.setAction("android.intent.action.add");
        intent.addCategory("android.intent.category.DEFAULT");
        startActivity(intent);
    }

}

在上面我提到,這個APP涉及到連接數據庫,所以我們必須要實現SQLiteOpenHelper為我們提供的諸多方法,所以我創建了一個類,專門用來連接數據庫以及實現方法:

package com.example.hhah;

import java.sql.ResultSet;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyOpenHelper extends SQLiteOpenHelper {

    // context:上下文
    // name:數據庫名字
    // 目的創建cursor對象
    // 數據庫的版本從一開始
    public MyOpenHelper(Context context) {
        super(context, "zhanghao", null, 1);

    }

    @Override
    // 當數據庫第一次被創建的時候調用,用來建表
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table biao01 (t_name varchar(20),t_place varchar(20),time varchar(20));");
        db.execSQL("insert into biao01 values('吃飯','白駱駝','2019.3.21');");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

因為上面提到,我用的是baseadapter所以我也新建了一個class用來配置適配器繼承BaseAdapter,其實這個一般是固定的寫法,你也可以使用在MainActivity里內部類。不過不推薦使用內部類,因為容易導致其代碼結構錯亂,引發諸多問題:

package com.example.hhah;

import java.util.ArrayList;

import android.content.Context;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Bean> list = new ArrayList<Bean>();
    private LayoutInflater inflator;
    private int resore;
    private TextView t_name;
    private TextView t_place;
    private TextView time;

    public MyAdapter(Context context, ArrayList<Bean> list, int resore) {

        this.context = context;
        this.list = list;
        this.resore = resore;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            inflator = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inflator.inflate(resore, null);
            t_name = (TextView) convertView.findViewById(R.id.tv_name);
            t_place = (TextView) convertView.findViewById(R.id.tv_place);
            time = (TextView) convertView.findViewById(R.id.tv_time);
        }
        Bean bean = list.get(position);
        t_name.setText(bean.getT_name());
        t_place.setText(bean.getT_place());
        time.setText(bean.getTime());
        return convertView;
    }

}

然后就是最簡單的Bean對象了,同樣是新建一個類(變量比較少,也是為了方便學習,如果要實現更多的記錄內容可以自行添加):

package com.example.hhah;

public class Bean {
    private String t_name;
    private String time;
    private String t_place;

    public String getT_name() {
        return t_name;
    }

    public void setT_name(String t_name) {
        this.t_name = t_name;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getT_place() {
        return t_place;
    }

    public void setT_place(String t_place) {
        this.t_place = t_place;
    }

}

好那么只涉及增加的主界面搭建好了,接下來就是實現增加功能的頁面,以及運用適配器傳輸數據的接口頁面:

我的添加界面:

還是,創建一個xml文件。用來顯示這個添加頁面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".addActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="事件名:"
        android:textSize="30dp" />

    <EditText
        android:id="@+id/et_things"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入事件名"
        android:textSize="25dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="時間:"
        android:textSize="30dp" />

    <EditText
        android:id="@+id/et_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入時間"
        android:textSize="25dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="地點:"
        android:textSize="30dp" />

    <EditText
        android:id="@+id/et_place"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入地點"
        android:textSize="25dp" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="click_add"
        android:text="添加" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="click_return"
        android:text="放棄添加" />

</LinearLayout>

然后就是用來實現接口功能的item.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="horizontal" >

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/tv_place"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/tv_time"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textSize="20sp" />

</LinearLayout>

之后創建一個AddActivity,進行數據的輸入,之后點擊按鈕,將數據保存到數據庫:

package com.example.hhah;

import java.util.List;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class addActivity extends Activity {

    private EditText et_thing;
    private EditText et_place;
    private EditText et_time;
    private SQLiteDatabase db;
    private Bean bean;
    private long ll;
    private MyOpenHelper myOpenHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        // 加載布局
        setContentView(R.layout.add_activity);
        et_thing = (EditText) findViewById(R.id.et_things);
        et_place = (EditText) findViewById(R.id.et_place);
        et_time = (EditText) findViewById(R.id.et_time);
        myOpenHelper = new MyOpenHelper(getApplicationContext());
        // db = myOpenHelper.getWritableDatabase();
    }

    public void click_add(View view) {
        db = myOpenHelper.getWritableDatabase();
        String thing = et_thing.getText().toString().trim();
        String place = et_place.getText().toString().trim();
        String time = et_time.getText().toString().trim();
        if (TextUtils.isEmpty(thing) || TextUtils.isEmpty(place) || TextUtils.isEmpty(time)) {
            Toast.makeText(getApplicationContext(), "親輸入內容不能為空哦!", 1).show();
            return;
        } else {

            bean = new Bean();
            bean.setT_name(thing);
            bean.setT_place(place);
            bean.setTime(time);
            ContentValues values = new ContentValues();
            values.put("t_name", thing);
            values.put("t_place", place);
            values.put("time", time);
            ll = db.insert("biao01", null, values);
            db.close();
            System.out.println(ll);
            if (ll > 0) {
                Toast.makeText(getApplicationContext(), "保存成功", 1).show();
                addActivity.this.finish();

            } else {
                Toast.makeText(getApplicationContext(), "系統繁忙,請稍后再試!", 1).show();
            }
        }

    }

    public void click_return(View view) {
        addActivity.this.finish();
    }
}

 

最后千萬別忘了配置清單文件!!!具體涉及到的內容如下:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.hhah.MainActivity"
            android:label="@string/app_name" >
            <!-- main主入口   -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity
            android:name="com.example.hhah.addActivity"
         >
            <!-- main主入口   -->
            <intent-filter>
                <action android:name="android.intent.action.add" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        
     
    </application>

好做到這里,添加功能就實現了,那么之后的博客,會對其他功能進行實現,也會逐步的對界面進行美化,畢竟現在這個界面是在是難以入目。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM