团队项目——和谐共生(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();//初始化数据 } }