上篇博客简单实例:字典与通讯录

落花浮王杯 提交于 2020-02-10 20:36:03

实例一

实现字典功能,用户输入单词,可以根据数据库中存的单词给出翻译,若没有则提示翻译不成功。也可以用户自己添加单词和释义。

代码:

没有布局要求,简单的两个activity的互相调用。

首先是数据库类的创建,DBOpenHelper().

package com.example.dictionary;

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

import androidx.annotation.Nullable;

public class DBOpenHelper extends SQLiteOpenHelper {
    //定义创建数据表的sql语句
    final String CREATE_TABLE_SQL = "create table dict (_id integer primary key autoincrement,word,detail)";

    public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SQL);//创建数据表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i("词典","--版本更新"+oldVersion+"-->"+newVersion);
    }
}

然后在主Activity中,在翻译界面获取用户输入的内容,去相应数据库中查找,若有显示内容,若无弹出提示。

activity_main.xml

<?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"
    android:padding="25dp">

    <Button
        android:id="@+id/search_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="翻译"/>

    <EditText
        android:id="@+id/search_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/search_btn"
        android:hint="在此输入要翻译的单词"
        android:layout_marginTop="20dp"/>

    <ListView
        android:id="@+id/result_listView"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_below="@id/search_et"/>

    <Button
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:text="添加生词"/>

</RelativeLayout>

MainActivity.java文件

package com.example.dictionary;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private DBOpenHelper dbOpenHelper ;//声明DBOpenHelper对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbOpenHelper = new DBOpenHelper(MainActivity.this,"dict.db",null,1);//实例化DBOpenHelper对象,用来创建查数据库

        final ListView listView = findViewById(R.id.result_listView);
        final EditText etSearch = findViewById(R.id.search_et);
        Button btnSearch = findViewById(R.id.search_btn);
        Button btn_add = findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,AddActivity.class);
                startActivity(intent);
            }
        });
        btnSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String key = etSearch.getText().toString();//获取要查询的单词
                Cursor cursor = dbOpenHelper.getReadableDatabase().query("dict",null,"word=?",new String[]{key},null,null,null);//执行查询操作
                ArrayList<Map<String,String>> resultList = new ArrayList<Map<String,String>>();
                while (cursor.moveToNext()){
                    Map<String,String> map = new HashMap<String,String>();
                    map.put("word",cursor.getString(1));
                    map.put("interpret",cursor.getString(2));
                    resultList.add(map);
                }
                if (resultList==null||resultList.size()==0){//如果数据库没有数据
                    Toast.makeText(MainActivity.this,"很遗憾,没有相关记录。",Toast.LENGTH_SHORT).show();
                }else {//否则将查询结果显示到listView列表中
                    SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this,resultList,
                            R.layout.result_main,new String[]{"word","interpret"},new int[]{
                                    R.id.result_word,R.id.result_interpret});
                    listView.setAdapter(simpleAdapter);
                }
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (dbOpenHelper!=null){
            dbOpenHelper.close();//关闭数据库连接
        }
    }
}

下面是点击添加生词跳转的AddActivity,在其中添加生词和相应翻译,并能实现回到MainActivity中。

activity_add.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".AddActivity"
    android:orientation="vertical"
    android:padding="30dp">

    <EditText
        android:id="@+id/add_word"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="单词"/>

    <EditText
        android:id="@+id/add_interpret"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="释义"/>

    <Button
        android:id="@+id/save_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存"/>

    <Button
        android:id="@+id/cancel_btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"/>
</LinearLayout>

AddAcitivy.java文件

package com.example.dictionary;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AddActivity extends AppCompatActivity {

    private DBOpenHelper dbOpenHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        dbOpenHelper = new DBOpenHelper(AddActivity.this,"dict.db",null,1);//实例化DBOpenHelper对象,用来创建查数据库
        final EditText etWord = findViewById(R.id.add_word);
        final EditText etInterpret = findViewById(R.id.add_interpret);
        Button btn_Save = findViewById(R.id.save_btn);
        Button btn_Cancel = findViewById(R.id.cancel_btn1);

        //保存按钮的点击事件
        btn_Save.setOnClickListener(new View.OnClickListener() {//实现将添加的单词解释保存在数据库中
            @Override
            public void onClick(View v) {
                String word = etWord.getText().toString();
                String interpret = etInterpret.getText().toString();
                if (word.equals("")&&interpret.equals("")){
                    Toast.makeText(AddActivity.this,"填写的单词或解释为空",Toast.LENGTH_SHORT).show();
                }else{
                    insertData(dbOpenHelper.getReadableDatabase(),word,interpret);//插入生词
                    Toast.makeText(AddActivity.this,"添加生词成功",Toast.LENGTH_SHORT).show();
                }
            }
        });
        btn_Cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(AddActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });

    }
    //插入数据的方法
    private void insertData(SQLiteDatabase sqLiteDatabase,String word,String interpret){
        ContentValues values = new ContentValues();
        values.put("word",word);//保存单词
        values.put("detail",interpret);
        sqLiteDatabase.insert("dict",null,values);//执行插入操作
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (dbOpenHelper!=null){
            dbOpenHelper.close();//关闭数据库连接
        }
    }
}

便可完成,效果如下。

实例二

实现读取通讯录功能,并显示信息。

MainActivity.java

package com.example.thecontact;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private String columns = ContactsContract.Contacts.DISPLAY_NAME; //希望获得姓名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.result); //获得布局文件中的TextView组件
        tv.setText(getQueryData()); //为TextView设置数据
    }

    private CharSequence getQueryData() { //创建getQueryData()方法,实现获取通讯录信息
        StringBuilder sb = new StringBuilder(); //用于保存字符串
        ContentResolver resolver = getContentResolver(); //获得ContentResolver对象
        //查询记录
        Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        int displayNameIndex = cursor.getColumnIndex(columns); //获得姓名记录的索引值
        //迭代全部记录
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            String displayName = cursor.getString(displayNameIndex);
            sb.append(displayName + "\n");
        }
        cursor.close(); //关闭Cursor
        return sb.toString(); //返回查询结果
    }
}

在AndroidManifest.xml中注册权限。

在<manifest>中添加 <uses-permission android:name="android.permission.READ_CONTACTS"/> 即可。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!