提示:代码在基本模块中,教程纯文字,推荐两个屏幕一边看代码一边看教程
简易Android通讯录系统,只要半天就能写完!
(博主安卓一些功能用的不熟练)


文章目录

  • 前言
  • 一、基本模块代码(包含UI界面代码)
    • Activity类:
      • (1)主页面MainActivity
      • (2)增加联系人ContactsAdd
      • (3)联系人信息ContactsInfo
      • (4)修改联系人ContactsUpdate
    • 工具类:
      • (1)联系人对象Contacts
      • (2)自定义适配器MyAdapter
      • (3)数据库管理MySQLite
  • 二、实现逻辑
    • 1、逻辑执行图
    • 2、功能实现
      • ContactsAdd:
        • (1)增加联系人
        • SharedPreferences实现存草稿
      • RecyclerView:
        • 点击'三个点'跳转至ContactsInfo:
          • (2)删除联系人
            • AlertDiglog实现删除询问
          • (3)修改联系人
        • 点击'电话图标'跳转至拨号界面
      • MainActivity:
        • (4)查询数据
      • MySQLIte:
      • MyAdapter:
      • Contacts:
      • click.xml 和 selector_click.xml
  • 总结

前言

需要掌握学习的知识点:
1、基本的UI界面编写。
2、Intent的基本使用。
3、Menu的基本使用。
4、RecyclerView的基本使用。
5、SharedPreferences的基本使用。
6、SQLite数据库的基本使用(简单的SQL增删改查)。

提示:加粗的加粗的知识点是必须掌握的,未加粗的知识点可以用其他方式替代。


一、基本模块代码(包含UI界面代码)

提示:以下是纯代码,代码中有部分逻辑注释

Activity类:

(1)主页面MainActivity

package com.example.maillist;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;import java.util.Comparator;
import java.util.List;/*** 显示联系人主页面* 可以跳转到添加联系人* 可以跳转到拨打电话* 可以跳转到联系人详细信息*/
public class MainActivity extends AppCompatActivity {List<Contacts> list;//数据库中读取的联系人数据MySQLite mMySQLite = MySQLite.getMySQLite(this);//操作数据库的对象//活动一开始旧执行的代码@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initialization();}//活动创建需要初始化的数据private void initialization() {initContacts();initRecyclerView();}//活动重新开始,重新执行初始化数据,将数据库中修改的数据直接同步一遍@Overrideprotected void onRestart() {super.onRestart();initialization();}//软件运行时,修改数据库后刷新控件private void initRecyclerView() {//获取RecycleView对象RecyclerView recycle = (RecyclerView) findViewById(R.id.recycle_view);//创建自定义适配器MyAdapter adapter = new MyAdapter(list, this);//用于指定布局方式RecyclerView.LayoutManager manager = new LinearLayoutManager(this);recycle.setLayoutManager(manager);recycle.setAdapter(adapter);}//打开软件获取数据库数据,初始化联系人列表private void initContacts() {//从数据库中查询联系人信息list = mMySQLite.query();//排序显示list.sort(new Comparator<Contacts>() {@Overridepublic int compare(Contacts o1, Contacts o2) {return o1.getName().compareTo(o2.getName());}});}//动态加载菜单布局@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//动态加载菜单布局getMenuInflater().inflate(R.menu.main, menu);return true;}//菜单点击事件@Overridepublic boolean onOptionsItemSelected(@NonNull MenuItem item) {switch (item.getItemId()) {case R.id.add_menu://添加联系人 - 跳转到添加联系人界面Intent intent = new Intent(MainActivity.this, ContactsAdd.class);startActivity(intent);break;case R.id.back_menu://退出程序finish();break;default:break;}return true;}}
<?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="vertical"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycle_view"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

(2)增加联系人ContactsAdd

package com.example.maillist;import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;/*** 添加联系人的Activity界面,管理界面控件并处理添加联系人的逻辑*/
public class ContactsAdd extends AppCompatActivity implements View.OnClickListener{//添加联系人活动的一些控件EditText name;EditText phoneNumber;Button confirm;Button temp;Button back;MySQLite mMySQLite = MySQLite.getMySQLite(this);//0 - back 1 - save 2 - yesint flag = 0;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.add_layout);initView();setClickButton();//取出临时存储的数据getTemp();}//执行活动销毁的业务逻辑@Overrideprotected void onDestroy() {super.onDestroy();//根据状态执行对应逻辑switch(flag){case 0://backclearEditText();break;case 1://savebreak;case 2://yesclearEditText();break;}saveTemp();}//初始化控件对象private void initView() {name = (EditText) findViewById(R.id.name_add_edit);phoneNumber = (EditText) findViewById(R.id.phone_number_add_edit);confirm = (Button) findViewById(R.id.add_back_button);temp = (Button) findViewById(R.id.add_temp_button);back = (Button) findViewById(R.id.add_yes_button);}//为按键设置监听器private void setClickButton() {confirm.setOnClickListener(this);temp.setOnClickListener(this);back.setOnClickListener(this);}//设置按键点击事件@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.add_back_button:flag = 0;finish();break;case R.id.add_temp_button://临时存储这个页面的数据flag = 1;finish();break;case R.id.add_yes_button://将这个页面的数据存放到联系人数据库中flag = 2;createContacts();break;}}private void createContacts() {//根据用户输入创建一个联系人对象Contacts contacts = new Contacts(name.getText().toString(), phoneNumber.getText().toString(), 0, 0);if(contacts.getPhoneNumber() != null && !contacts.getPhoneNumber().equals("")) {//判断是否输入号码//将联系人对象添加到数据库mMySQLite.add(contacts);Toast.makeText(this, "添加成功!", Toast.LENGTH_SHORT).show();finish();}else{Toast.makeText(this, "数据有误!", Toast.LENGTH_SHORT).show();}}private void clearEditText() {//这个是为了保存后不在将输入框的数据存放到文件,避免添加成功后,下次恢复已经添加的数据到添加输入框中name.setText("");phoneNumber.setText("");}//临时存储数据到文件中public void saveTemp(){//使用SharedPreferences存储临时数据SharedPreferences temp = getSharedPreferences("temp", MODE_PRIVATE);SharedPreferences.Editor editor = temp.edit();editor.putString("name",name.getText().toString());editor.putString("phoneNumber", phoneNumber.getText().toString());editor.apply();}//恢复文件中临时存储的数据private void getTemp() {SharedPreferences temp = getSharedPreferences("temp", MODE_PRIVATE);String name = temp.getString("name", "");String phoneNumber = temp.getString("phoneNumber", "");this.name.setText(name);this.phoneNumber.setText(phoneNumber);}
}
<?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="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="50dp"android:layout_marginRight="50dp"><TextViewandroid:id="@+id/name_add_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:"android:textSize="35sp" /><EditTextandroid:id="@+id/name_add_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/name_add_text"android:hint="请输入联系人姓名"android:textSize="20dp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="50dp"android:layout_marginRight="50dp"><TextViewandroid:id="@+id/phone_number_add_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电话:"android:textSize="35sp" /><EditTextandroid:id="@+id/phone_number_add_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/phone_number_add_text"android:hint="请输入联系人电话"android:textSize="20dp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="50dp"android:layout_marginRight="50dp"><Buttonandroid:id="@+id/add_back_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回" /><Buttonandroid:id="@+id/add_temp_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="存为草稿" /><Buttonandroid:id="@+id/add_yes_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="确认" /></RelativeLayout></LinearLayout>

(3)联系人信息ContactsInfo

package com.example.maillist;import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;/*** 显示联系人详细信息* 可以跳转到编辑联系人活动* 可以删除联系人*/
public class ContactsInfo extends AppCompatActivity implements View.OnClickListener {TextView mName;TextView mPhoneNumber;Button back;Button update;TextView delete;//临时存储当前对象的数据信息int id;String name;String phoneNumber;MySQLite mMySQLite = MySQLite.getMySQLite(this);@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.contacts_info);//获取上一个活动传递的数据Intent intent = getIntent();id = intent.getIntExtra("id", -1);//初始化并设置点击事件initView();//初始化控件initText(id);//初始化显示文本setClickButtons();//设置按键点击监听器}@Overrideprotected void onRestart() {super.onRestart();initText(id);}//根据id获取数据库中的数据,并且完成当前联系人信息的初始化private void initText(int id) {MySQLite db = MySQLite.getMySQLite(this);Contacts contacts = db.query(id);name = contacts.getName();phoneNumber = contacts.getPhoneNumber();if (name != null && phoneNumber != null) {mName.setText(name);mPhoneNumber.setText(phoneNumber);} else {//如果此id在数据库中没有获取到数据,给出提示Toast.makeText(this, "Info:系统出错,请稍后再试!", Toast.LENGTH_SHORT).show();}}private void setClickButtons() {back.setOnClickListener(this);update.setOnClickListener(this);delete.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.back_info_button:finish();break;case R.id.update_info_button:Intent intent = new Intent(ContactsInfo.this, ContactsUpdate.class);intent.putExtra("id", id);startActivity(intent);break;case R.id.delete_info_text:dialog();//删除提示break;}}//删除提示消息框private void dialog() {AlertDialog.Builder dialog = new AlertDialog.Builder(this);dialog.setTitle("提示:");//提示框dialog.setMessage("删除联系人将无法恢复,是否继续?");//提示框消息内容dialog.setCancelable(false);//是否可以使用back(返回退出对话框)dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {//设置确定点击事件@Overridepublic void onClick(DialogInterface dialog, int which) {mMySQLite.delete(id);//数据库中删除finish();}});dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(ContactsInfo.this, "取消删除!", Toast.LENGTH_SHORT).show();}});dialog.show();//将提示消息框显示}private void initView() {mName = (TextView) findViewById(R.id.name_info_text);mPhoneNumber = (TextView) findViewById(R.id.phone_number_info_text);back = (Button) findViewById(R.id.back_info_button);update = (Button) findViewById(R.id.update_info_button);delete = (TextView) findViewById(R.id.delete_info_text);}
}
<?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:layout_marginTop="80dp"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginRight="50dp"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:"android:textSize="30dp" /><TextViewandroid:id="@+id/name_info_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="姓名"android:textSize="40dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:text="电话:"android:textSize="30dp" /><TextViewandroid:id="@+id/phone_number_info_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="联系人电话"android:textSize="30dp" /></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="50dp"android:layout_marginRight="50dp"><Buttonandroid:id="@+id/back_info_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="返回"android:textSize="30dp" /><Buttonandroid:id="@+id/update_info_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="编辑"android:textSize="30dp" /></RelativeLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/delete_info_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="20dp"android:text="删除联系人"android:textColor="@color/red"android:textSize="20dp" /></RelativeLayout></LinearLayout>

(4)修改联系人ContactsUpdate

package com.example.maillist;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;/*** 联系人信息编辑界面*/
public class ContactsUpdate extends AppCompatActivity implements View.OnClickListener {private int id;EditText name;EditText phoneNumber;Button save;Button back;MySQLite mMySQLite = MySQLite.getMySQLite(this);Contacts mContacts;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.contacts_update_layout);initView();initEdit();setClickButton();}private void setClickButton() {save.setOnClickListener(this);back.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.save_update_button:saveUpdate();//保存修改的数据到数据库中break;case R.id.back_update_button:Toast.makeText(this, "修改取消!", Toast.LENGTH_SHORT).show();break;}finish();}private void saveUpdate() {mContacts.setId(id);mContacts.setName(name.getText().toString());mContacts.setPhoneNumber(phoneNumber.getText().toString());mMySQLite.update(mContacts);//修改数据库Toast.makeText(this, "修改成功!", Toast.LENGTH_SHORT).show();}//根据id从数据库中查询数据,对输入框将旧数据显示private void initEdit() {mContacts = mMySQLite.query(id);if (mContacts != null) {this.name.setText(mContacts.getName());this.phoneNumber.setText(mContacts.getPhoneNumber());}}private void initView() {id = getIntent().getIntExtra("id", -1);name = (EditText) findViewById(R.id.name_update_edit);phoneNumber = (EditText) findViewById(R.id.phone_number_update_edit);save = (Button) findViewById(R.id.save_update_button);back = (Button) findViewById(R.id.back_update_button);}
}
<?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="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="100dp"android:layout_marginRight="50dp"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:"android:textSize="30dp" /><EditTextandroid:id="@+id/name_update_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="待修改的姓名"android:textSize="40dp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:text="电话:"android:textSize="30dp" /><EditTextandroid:id="@+id/phone_number_update_edit"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="待修改的电话"android:textSize="30dp" /></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="50dp"android:layout_marginRight="50dp"><Buttonandroid:id="@+id/back_update_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="取消"android:textSize="30dp" /><Buttonandroid:id="@+id/save_update_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:text="保存"android:textSize="30dp" /></RelativeLayout>
</LinearLayout>

工具类:

(1)联系人对象Contacts

package com.example.maillist;/*** 联系人对象* 一些联系人对象信息的相关操作*/
public class Contacts {private int id;private String name;//姓名private String phoneNumber;//电话号码public Contacts(String name, String phoneNumber, int call_icon, int more_icon) {this.name = name;setPhoneNumber(phoneNumber);}public String getName() {return name;}public String getPhoneNumber() {return phoneNumber;}public void setName(String name) {this.name = name;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

(2)自定义适配器MyAdapter

package com.example.maillist;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;/*** RecyclerView自定义适配器* 动态加载了子项的资源* 编写了子项的点击逻辑*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {List<Contacts> list;Activity main;//传入主活动对象,用于调用startActivity跳转页面static class ViewHolder extends RecyclerView.ViewHolder {View contacts;//记录父类控件idint id;TextView contactsName;TextView contactsPhoneNumber;TextView contactsCall;TextView contactsMore;public ViewHolder(@NonNull View itemView) {super(itemView);//初始化控件contacts = itemView;//记录这个父类控件idcontactsName = itemView.findViewById(R.id.contacts_name);contactsPhoneNumber = itemView.findViewById(R.id.contacts_phone_number);contactsCall = itemView.findViewById(R.id.call_icon);contactsMore = itemView.findViewById(R.id.more_icon);}}//创建一个可以传入数据的构造器public MyAdapter(List<Contacts> list, Activity activity) {this.list = list;main = activity;//构造器初始化传入的主活动对象}//onCreateViewHolder方法用于ViewHolder滑动到屏幕是动态加载加载布局,并且将加载的布局返回后存储@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.contacts_item, parent, false);ViewHolder holder = new ViewHolder(view);//设置点击监听holder.contactsCall.setOnClickListener(new View.OnClickListener() {//拨打电话@Overridepublic void onClick(View v) {//设置拨打电话Intent跳转String phoneNumber = holder.contactsPhoneNumber.getText().toString();Intent intent = new Intent(Intent.ACTION_DIAL);//意图:拨号行动intent.setData(Uri.parse("tel:" + phoneNumber));//设置对应的号码main.startActivity(intent);}});holder.contactsMore.setOnClickListener(new View.OnClickListener() {//跳转至详情页面@Overridepublic void onClick(View v) {Intent intent = new Intent(main, ContactsInfo.class);intent.putExtra("id", holder.id);intent.putExtra("name", holder.contactsName.getText().toString());intent.putExtra("phoneNumber", holder.contactsPhoneNumber.getText().toString());main.startActivity(intent);}});holder.contacts.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}});return holder;}//为滑动到屏幕的holder布局设置资源文件//传入一个holder和对应的号数,为其设置资源文件@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Contacts contacts = list.get(position);holder.id = contacts.getId();//设置每个子项的idholder.contactsName.setText(contacts.getName());holder.contactsPhoneNumber.setText(contacts.getPhoneNumber());holder.contactsCall.setText("												

基于java的Android手机通讯录【详细】【完整代码】相关推荐

  1. android备份手机号码,Android手机通讯录备份还原代码

    最近想写段Android程序玩玩.开发环境 Eclipse ,Android 2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

  2. android手机通讯录备份还原代码,android手机通讯录备份还原代码

    最近想写段android程序玩玩. 开发环境 eclipse ,android2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

  3. android手机通讯录备份还原代码,安卓手机误删联系人恢复及备份技巧总汇

    原标题:安卓手机误删联系人恢复及备份技巧总汇 现在很多手机都不再提供将联系人存入SIM卡中的功能了,所以如果你还习惯性的将联系人储存在手机内存当中,一旦手机丢失或者手机数据遗失,那么少则几十动辄几百的 ...

  4. 一篇很好的关于Android的本科毕业论文《基于android手机通讯录的设计与实现毕业论文》转自百度

    本文转自: http://wenku.baidu.com/view/bb7dad58804d2b160b4ec058.html 相应的word文档csdn下载地址: http://download.c ...

  5. Android手机通讯录备份和恢复项目

    Android手机通讯录备份和恢复项目 附下载地址** 登录功能 注册功能 找回密码 修改密码 备份功能 恢复功能 恢复数据从服务器 导出为Excel文件 登录功能 注册功能 找回密码 同注册功能 修 ...

  6. 基于MNN在Android手机上实现图像分类

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于MNN在And ...

  7. 使用Java让android手机自动执行重复重启

    使用Java让android手机自动执行重复重启 public static void main(String[] args)throws IOException,Exception { for(in ...

  8. java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  9. 基于Java的Android区块链开发之生成助记词(位数可选)

    基于Java的Android区块链开发之生成助记词 位数可选 具体实现代码 这里使用bitcoinj库,来实现生成bip39的12个助记词,引用库 implementation 'org.bitcoi ...

最新文章

  1. R语言实战应用精讲50篇(二十九)-R语言算法应用案例:路径路网轨迹绘图分析(英国自行车数据库)
  2. 赶集网人事调整:三月内两副总离职
  3. 设计模式----python版本
  4. SQL Server 编写自动增长的字符串型主键
  5. gini系数 决策树_决策树系列--ID3、C4.5、CART
  6. ELK收集日志到mysql
  7. 不想remote的程序员跟咸鱼有什么区别?
  8. win11菜单栏的推荐项目怎么取消 windows11取消推荐项目的设置方法
  9. CreateWaitableTimer和SetWaitableTimer
  10. cookie跨域问题汇总
  11. RedHat Linux各版本汇总
  12. 20151210编译高通的qca9531的wireless版本 修改版本4
  13. 使用 Premiere 制作视频简介
  14. 学计算机的 1加1,如何用“一加一等于几”解析人生
  15. ipv6的127位掩码如何表示_网络工程师(5):IP如何编址
  16. AS移动开发 类微信界面2_Activity的生命周期与跳转(持续更新中)
  17. Linux学习笔记(购买使用阿里云服务器,基本命令,安装JDK,Tomcat等环境)
  18. 联想thinkpad待机怎么唤醒_联想电脑睡眠无法唤醒_联想电脑睡眠怎么唤醒
  19. 高数_第5章常微分方程_二阶微分方程
  20. 苹果手机怎么清除缓存_手机里的文件如何彻底删除?教你清除缓存的方法

热门文章

  1. window.btoa与window.atob
  2. 免费申请office365 A1 和 a1plus 带OneDrive 5T 网盘 office365学生版(转载)
  3. 小程序模板报价_小程序模板价格_小程序模板使用多少钱
  4. moses 编译_手把手教你编译MOSES机器翻译系统 | 学步园
  5. 盘点机器人四大家族——KUKA机器人
  6. thinkpad E450/550 预装系统改装WIN7全套教程
  7. 对 捕鱼达人1.01 的全程破解分析
  8. SAP 固定资产日期
  9. 人生没有白走的路,走过的都算数
  10. Android无线adb调试连接助手