团队项目——和谐共生(6)

这次学习了数据库的简单操作,可以添加数据,并返回在listView中

效果图

 

 代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/lv_user_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn_add_info"
        android:layout_alignParentBottom="true"
        android:text="添加"/>

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp"
        android:layout_marginBottom="3dp"
        android:text="添加用户信息"
        android:textSize="23dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_name"
        android:hint="请输入姓名"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_desc"
        android:hint="请输入描述"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_confirm"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定"/>
        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消"/>
    </LinearLayout>
</LinearLayout>

这个是弹出界面,用来填写用户的数据。

下面这个item用来设置信息显示的布局

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

    <TextView
        android:text="姓名"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:id="@+id/tv_name"/>
    <TextView
        android:text="描述"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18dp"
        android:id="@+id/tv_dec"/>

</LinearLayout>

后台代码

首先要有一个实体类(就不写了),平常写B\S使用的实体类

然后创建数据库和表

package com.example.dboperate;

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

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class UserOpenHelper extends SQLiteOpenHelper {

    public UserOpenHelper(@Nullable Context context) {
        super(context, "user.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql="create table user(_id integer primary key autoincrement,name varchar(20),dec varchar(50))";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

创建适配器,数据的显示

package com.example.dboperate;

import android.app.Application;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.List;

public class UserAdapter extends BaseAdapter {

    private final Context context;
    private final List<User> userList;

    public UserAdapter(Context context, List<User> userList){
        this.context=context;
        this.userList=userList;
    }

    @Override
    public int getCount() {
        return userList.size();
    }

    @Override
    public Object getItem(int i) {
        return userList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return userList.get(i).getId();
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view==null){
            view=View.inflate(context,R.layout.item_user,null);
        }
        TextView tvName = view.findViewById(R.id.tv_name);
        TextView tvDec = view.findViewById(R.id.tv_dec);
        tvName.setText(userList.get(i).getName());
        tvDec.setText(userList.get(i).getDec());
        return view;
    }
}

数据库操作

package com.example.dboperate;

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;

public class UserDao {
    private final UserOpenHelper userOpenHelper;
    private static UserDao userDao=null;

    public UserDao(Context context) {
        userOpenHelper = new UserOpenHelper(context);
    }
    public static UserDao getInstance(Context context){
        if (userDao==null){
            userDao=new UserDao(context);
        }
        return userDao;
    }

    //保存
    public void insert(User user){
        SQLiteDatabase db=userOpenHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("name",user.getName());
        values.put("dec",user.getDec());
        db.insert("user",null,values);
        db.close();
    }

    //获取所有数据
    public List<User> findAll(){
        SQLiteDatabase db=userOpenHelper.getWritableDatabase();
        Cursor cursor=db.query("user",new String[]{"_id","name","dec"},null,null,null,null,null);

        List<User> userList=new ArrayList<>();
        while (cursor.moveToNext()){
            User user=new User();
            user.setId(cursor.getInt(0));
            user.setName(cursor.getString(1));
            user.setDec(cursor.getString(2));
            userList.add(user);
        }

        db.close();
        return userList;
    }
}

MainActiviry

package com.example.dboperate;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private ListView mUserList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initUI();
        //初始化数据
        initData();
    }

    private void initData() {
        UserDao userDao=UserDao.getInstance(getApplicationContext());
        List<User> userList=userDao.findAll();
        UserAdapter adapter = new UserAdapter(getApplicationContext(), userList);
        mUserList.setAdapter(adapter);
    }

    private void initUI() {
        mUserList=findViewById(R.id.lv_user_list);
        findViewById(R.id.btn_add_info).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if(view.getId()==R.id.btn_add_info){
            showAlertDialog();
        }
    }

    private void showAlertDialog() {
        //实例化弹窗构造者对象
        AlertDialog.Builder builder=new AlertDialog.Builder(this);
        //自定义弹窗内容
        AlertDialog alertDialog= builder.create();
        View view = View.inflate(getApplicationContext(), R.layout.dialog_user_info, null);
        alertDialog.setView(view);
        alertDialog.show();

        EditText etName=view.findViewById(R.id.et_name);
        EditText etDec=view.findViewById(R.id.et_desc);


        //点击事件
        view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name=etName.getText().toString();
                String dec=etDec.getText().toString();
                if (name.length()==0||dec.length()==0){
                    Toast.makeText(getApplicationContext(),"内容不能为空",Toast.LENGTH_SHORT).show();
                    return;
                }
                save2db(name,dec);
            }
        });
        view.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alertDialog.dismiss();
            }
        });
    }

    private void save2db(String name, String dec) {
        UserDao userDao=UserDao.getInstance(getApplicationContext());
        User user = new User(name, dec);
        userDao.insert(user);
        initData();//初始化数据
    }
}

 

posted on 2022-05-01 21:12  跨越&尘世  阅读(17)  评论(0编辑  收藏  举报