栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android电话本实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android电话本实现

Android电话本实现
  • 需求
  • 效果
    • 添加联系人
    • 删除联系人
    • 查询联系人
    • 修改联系人
    • 拨打电
  • 部分实现代码
    • 数据库
    • 添加联系人
      • 布局
      • 限制添加长度
      • 添加页面
        • 布局
        • 代码
    • 删除联系人
    • 查询联系人
    • 修改联系人和拨打电话页面
    • 主页面
      • 布局
      • 代码
  • 完整项目链接

完整项目下载链接

需求

可以实现联系人的增删改查
可以实现电话的拨打
采用内置数据库

效果 添加联系人

删除联系人

查询联系人

修改联系人

拨打电

部分实现代码 数据库
//创建数据库
public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context)
    {
        super(context,"itcast.db",null,2);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAr(20),tels INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
添加联系人 布局


    
        
            -
        
        
            

            

            
        
        
            
            
        




        


    



限制添加长度
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.Toast;


//保证电话号码不超过11位 姓名不超过8个字符
public class MaxLengthWatcher implements TextWatcher {

    private int maxLen = 0;
    private EditText editText = null;
    private Context context=null;

    public MaxLengthWatcher(int maxLen, EditText editText, Context context) {
        this.maxLen = maxLen;
        this.editText = editText;
        this.context=context;

    }



    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub

    }



    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {

        // TODO Auto-generated method stub



    }



    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

        // TODO Auto-generated method stub

        Editable editable = editText.getText();
        int len = editable.length();



        if(len > maxLen)

        {
            int selEndIndex = Selection.getSelectionEnd(editable);
            String str = editable.toString();
            //截取新字符串
            String newStr = str.substring(0,maxLen);
            editText.setText(newStr);
            editable = editText.getText();
            //新字符串的长度
            int newLen = editable.length();
            //旧光标位置超过字符串长度
            if(selEndIndex > newLen)
            {
                selEndIndex = editable.length();
                //防止吐司出现应用程序名称提示
                Toast toast=Toast.makeText(context,"不能超过"+newLen+"字符长度",Toast.LENGTH_LONG);
                toast.setText("不能超过"+newLen+"字符长度");
                toast.show();

           }

            //设置新光标所在的位置
            Selection.setSelection(editable, selEndIndex);
        }
    }



}

添加页面 布局


    
        
            -
        
        
            

            

            
        
        
            
            
        




        


    



代码
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.spark.submitbutton.SubmitButton;

public class Tels_new extends AppCompatActivity {
private EditText etNameOne,etTelNumberOne;
private SubmitButton  saveABook;
private String name,phone;
private MyHelper myHelper;
private SQLiteDatabase db;
private ContentValues values;
private int  WRITE_EXTERNAL_STORAGE_REQUEST_CODE=1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tels_new);
        //隐藏Toolbar的返回箭头
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        myHelper=new MyHelper(this);
        etNameOne=(EditText)findViewById(R.id.etName);
        etTelNumberOne=(EditText)findViewById(R.id.etNumber);
        saveABook=(SubmitButton) findViewById(R.id.btnSave);
        //监测
        etNameOne.addTextChangedListener(new MaxLengthWatcher(8,etNameOne,this));
        etTelNumberOne.addTextChangedListener(new MaxLengthWatcher(11,etTelNumberOne,this));


        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            //申请WRITE_EXTERNAL_STORAGE权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    WRITE_EXTERNAL_STORAGE_REQUEST_CODE); }


        //保存按钮 点击保存
        saveABook.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SaveABook();
            }
        });
    }

    @Override
    //权限获取回调
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        doNext(requestCode,grantResults);
    }

    //自己用肯定给 先放起来 啥也不干
    private void doNext(int requestCode, int[] grantResults)
    {
        if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            } else {
            }
        }
    }



    //保存联系人
    void SaveABook(){
        name=etNameOne.getText().toString();
        phone=etTelNumberOne.getText().toString();

        db=myHelper.getWritableDatabase();
        values=new ContentValues();
        values.put("name",name);
        values.put("tels",phone);

        db.insert("information",null,values);
        db.close();
    }


    @Override

    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate( R.menu.back, menu);
        return true;
    }


//使用菜单返回上一级
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(item.getItemId()==R.id.action_settings1) {
            Intent intent = new Intent(Tels_new.this, MainActivity.class);
            startActivity(intent);
        }
        return super.onOptionsItemSelected(item);
    }


}




删除联系人
 //点击事件 并传入参数
        mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                            @Override
              public void onItemClick(AdapterView parent, View view, int position, long id) {
                   Intent intent = new Intent(MainActivity.this, Change.class);
                   intent.putExtra("nameInt",names.get(position));
                   intent.putExtra("telInt",tels.get(position));
                   startActivity(intent);
                        }
               });

        //长按事件 删除数据
        mlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
    //长按删除
            public boolean onItemLongClick(AdapterView arg0, View arg1,final int arg2, long arg3) {
                alertDialog.Builder builder = new alertDialog.Builder(MainActivity.this);
                builder.setPositiveButton("删除", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        db=myHelper.getWritableDatabase();
                        db.delete("information","name=?",new String[]{names.get(arg2)});
                        db.close();
                        names.remove(arg2);
                        tels.remove(arg2);
                        madapter.notifyDataSetChanged();
                    }
                });
                builder.create().show();
				return true;     // 这里一定要改为true,代表长按自己消费掉了,若为false,触发长按事件的同时,还会触发点击事件
            }
        });


        }
查询联系人
     //完成搜索功能
        searchBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myHelper=new MyHelper(MainActivity.this);
                db=myHelper.getWritableDatabase();
                names.clear ();
                tels.clear();
                Cursor cursor=db.query("information",null,"name=?",new String[]{searchEt.getText().toString()},null,null,null);
                if(cursor.getCount()!=0)
                {cursor.moveToFirst();

                    names.add(cursor.getString(1));
                    tels.add(cursor.getString(2));

                    while(cursor.moveToNext())
                    {
                        names.add(cursor.getString(1));
                        tels.add(cursor.getString(2));}

                }else{
                    cursor=db.query("information",null,null,null,null,null,null);
                    Toast toast=Toast.makeText(MainActivity.this,"抱歉,未发现该联系人!",Toast.LENGTH_LONG);
                    toast.setText("抱歉,未发现该联系人!");
                    toast.show();
                    }
                    madapter.notifyDataSetChanged();
                    cursor.close();
                    db.close();}
        });
修改联系人和拨打电话页面
import android.Manifest;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class Change extends AppCompatActivity {
private EditText nameTwo,numberTwo;
private ImageView modify,call;
    private MyHelper myHelper;
    private SQLiteDatabase db;
    private ContentValues values;
    private String name;
    private String telnumber;


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

        //隐藏Toolbar的返回箭头
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

        myHelper=new MyHelper(this);

        //接收传入的电话数据
        Intent intent=getIntent();
        name=intent.getStringExtra("nameInt");
        telnumber=intent.getStringExtra("telInt");
        nameTwo=(EditText)findViewById(R.id.etNameTwo);
        numberTwo=(EditText)findViewById(R.id.etNumberTwo);
        nameTwo.setText(name);
        numberTwo.setText(telnumber);
        //监测文本长度
        nameTwo.addTextChangedListener(new MaxLengthWatcher(8,nameTwo,this));
        numberTwo.addTextChangedListener(new MaxLengthWatcher(11,numberTwo,this));

        //两个图片按钮
        modify=findViewById(R.id.imVmodify);
        call=findViewById(R.id.imVcall);
        modify.setClickable(true);//激活按钮
        call.setClickable(true);

        //修改
        modify.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                db=myHelper.getWritableDatabase();//初始化数据库
                values=new ContentValues();
                values.put("name",nameTwo.getText().toString());
                values.put("tels",numberTwo.getText().toString());
                db.update("information",values,"name=?",new String[]{name});
                //防止吐司出现应用程序名称提示
                Toast toast=Toast.makeText(Change.this,"修改成功",Toast.LENGTH_LONG);
                toast.setText("修改成功");
                toast.show();
                db.close();
            }
        });

        //拨打
        call.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {

                if(ContextCompat.checkSelfPermission(Change.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(Change.this,new String[]{Manifest.permission.CALL_PHONE},1);
                }else {

                }

                //拨打电话
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_CALL);//设置活动类型
                intent.setData(Uri.parse("tel:"+telnumber));//设置数据
                startActivity(intent);


            }
        });

    }


    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate( R.menu.back, menu);
        return true;
    }


    //使用菜单返回上一级
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(item.getItemId()==R.id.action_settings1) {
            Intent intent = new Intent(Change.this, MainActivity.class);
            startActivity(intent);
        }
        return super.onOptionsItemSelected(item);
    }
}

主页面 布局


    


        

            

            
        

        
    

代码
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.baseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.alertDialog;
import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {
private ListView mlistview;
private ImageView searchBt;
private EditText searchEt;
private MyHelper myHelper;
private SQLiteDatabase db;
private ArrayList names=new ArrayList<>();
private ArrayList tels=new ArrayList<>();
private MybaseAdapter madapter;


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

        //初始化listview
        mlistview=(ListView) findViewById(R.id.listView);
        madapter=new MybaseAdapter();
        mlistview.setAdapter(madapter);

        myHelper=new MyHelper(this);
        db=myHelper.getWritableDatabase();

        //查询所有数据 显示页面
        Cursor cursor=db.query("information",null,null,null,null,null,null);
        if(cursor.getCount()==0)
        {
            //防止吐司出现应用程序名称提示
            Toast toast=Toast.makeText(MainActivity.this,"暂时没有联系人请添加!",Toast.LENGTH_LONG);
            toast.setText("暂时没有联系人请添加!");
            toast.show();
        }else{
            //第一个
            cursor.moveToFirst();

            names.add(cursor.getString(1));
            tels.add(cursor.getString(2));
            //下一个直到没有
            while(cursor.moveToNext())
            {
                names.add(cursor.getString(1));
                tels.add(cursor.getString(2));

            }
            madapter.notifyDataSetChanged();//动态更新
            cursor.close();
            db.close();
        }


        searchBt=(ImageView)findViewById(R.id.imgsearch);
        searchEt=(EditText)findViewById(R.id.etSearch);
        searchEt.addTextChangedListener(new MaxLengthWatcher(8,searchEt,this));
        searchBt.setClickable(true);//激活按钮


        //完成搜索功能
        searchBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myHelper=new MyHelper(MainActivity.this);
                db=myHelper.getWritableDatabase();
                names.clear ();
                tels.clear();
                Cursor cursor=db.query("information",null,"name=?",new String[]{searchEt.getText().toString()},null,null,null);
                if(cursor.getCount()!=0)
                {cursor.moveToFirst();

                    names.add(cursor.getString(1));
                    tels.add(cursor.getString(2));

                    while(cursor.moveToNext())
                    {
                        names.add(cursor.getString(1));
                        tels.add(cursor.getString(2));}

                }else{
                    cursor=db.query("information",null,null,null,null,null,null);
                    Toast toast=Toast.makeText(MainActivity.this,"抱歉,未发现该联系人!",Toast.LENGTH_LONG);
                    toast.setText("抱歉,未发现该联系人!");
                    toast.show();
                    }
                    madapter.notifyDataSetChanged();
                    cursor.close();
                    db.close();}
        });



        //点击事件 并传入参数
        mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                            @Override
              public void onItemClick(AdapterView parent, View view, int position, long id) {
                   Intent intent = new Intent(MainActivity.this, Change.class);
                   intent.putExtra("nameInt",names.get(position));
                   intent.putExtra("telInt",tels.get(position));
                   startActivity(intent);
                        }
               });

        //长按事件 删除数据
        mlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
    //长按删除
            public boolean onItemLongClick(AdapterView arg0, View arg1,final int arg2, long arg3) {
                alertDialog.Builder builder = new alertDialog.Builder(MainActivity.this);
                builder.setPositiveButton("删除", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        db=myHelper.getWritableDatabase();
                        db.delete("information","name=?",new String[]{names.get(arg2)});
                        db.close();
                        names.remove(arg2);
                        tels.remove(arg2);
                        madapter.notifyDataSetChanged();
                    }
                });
                builder.create().show();
				return true;     // 这里一定要改为true,代表长按自己消费掉了,若为false,触发长按事件的同时,还会触发点击事件
            }
        });


        }


     //适配器创建
    class MybaseAdapter extends  baseAdapter{
        @Override
        public int getCount() {

            return names.size();
        }
        @Override
        public Object getItem(int position) {
            return names.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        //读取数据并显示
        public View getView(int position, View convertView, ViewGroup parent) {
            View view=View.inflate(MainActivity.this,R.layout.tel,null);
            TextView mtextView=(TextView) view.findViewById(R.id.textView);

            mtextView.setText("   "+names.get(position)+" : "+tels.get(position));
            return view;
        }
    }

    @Override
//创建菜单
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate( R.menu.main , menu);
        return true;
    }

    //跳转新建联系人页面
    public boolean onOptionsItemSelected(MenuItem item)
    {
        if(item.getItemId()==R.id.action_settings) {
            Intent intent = new Intent(MainActivity.this,Tels_new.class);
            startActivity(intent);
        }
     return super.onOptionsItemSelected(item);
    }

}

完整项目链接

完整项目下载链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号