Android添加联系人信息并读取
![](/assets/blank.gif)
![](/assets/blank.gif)
2. 进入主页面后自动从File文件中读取联系人数据,每个item只显示,姓名和电话。如果,你在添加联系人时,填写了备注,那么item的姓名显示成你保存的备注。否则显示姓名。
3. 添加联系人功能,布局最上方有一个添加联系人按钮,下面是ListView, 当点击添加联系人按钮时,跳转至新页面,输入姓名,电话,备注(电话和 姓名不能为空,电话只能为数字)。确定后保存File文件,并且直接回退到 主页面
4. 当点击每个item时,跳转至详细页面,显示当前联系人的名字、电话、 备注。
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
package com.example.cxy.androidcontact;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;import java.io.File; import java.io.FileOutputStream; import java.io.IOException;public class AddActivity extends AppCompatActivity implements View.OnClickListener {private EditText ed_Name, ed_Phone, ed_Remark;private Button btn_Save;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_add);initView();}private void initView() {ed_Name = (EditText) findViewById(R.id.editName);ed_Phone = (EditText) findViewById(R.id.editPhone);ed_Remark = (EditText) findViewById(R.id.editRemark);btn_Save = (Button) findViewById(R.id.btn_save);btn_Save.setOnClickListener(this);}@Override public void onClick(View v) {//判断文件是否存在,如果存在则存入数据,且为追加属性 try {File file = new File("/mnt/sdcard/contact/contact.txt");if (!file.exists()) {file = new File("/mnt/sdcard/contact");file.mkdir();file = new File("/mnt/sdcard/contact/contact.txt");file.createNewFile();}//把你的文件保存置为追加。true则为追加 FileOutputStream out = new FileOutputStream(file, true);//如果文本内容不为空,则存储 if (!(TextUtils.isEmpty(ed_Name.getText().toString()) || TextUtils.isEmpty(ed_Phone.getText().toString()))) {String person = ed_Name.getText().toString() + "," + ed_Phone.getText().toString() + "," + ed_Remark.getText().toString() + "#";out.write(person.getBytes());out.close();Toast.makeText(AddActivity.this, "存储成功", Toast.LENGTH_SHORT).show();//页面销毁,返回主类 finish();} else {Toast.makeText(AddActivity.this, "存储失败", Toast.LENGTH_SHORT).show();}} catch (IOException e) {e.printStackTrace();}} }
![](/assets/blank.gif)
package com.example.cxy.androidcontact.adapter;import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView;import com.example.cxy.androidcontact.R;import java.util.List; import java.util.Map;/** * Created by admin on 2017/3/5. */ public class MyAdapter extends BaseAdapter {private Context mContext;private List<Map<String, String>> mList;//有参构造方法 public MyAdapter(Context context, List<Map<String, String>> list) {mContext = context;mList = list;}//获取列表总长度 @Override public int getCount() {//返回一个全局的列表的总长度 return mList.size();}//获取当前整个item(一整行)返回一个当前视图中的所有数据 @Override public Object getItem(int position) {//返回下标 return mList.get(position);}//获取当前item的ID @Override public long getItemId(int position) {//返回下标 return position;}//获取视图 当前视图下标 指当前视图 上级父容器 @Override public View getView(int position, View convertView, ViewGroup parent) {//创建一个ViewHodler类对象 ViewHodler viewHodler;//判断当前converView是否为空,如果为空 if (convertView == null) {//则加载新的item行布局 convertView = LayoutInflater.from(mContext).inflate(R.layout.activity_item, null);//实例化viewHodler viewHodler = new ViewHodler();//通过视图寻找控件ID viewHodler.tvName = (TextView) convertView.findViewById(R.id.tv_Name);viewHodler.tvPhone = (TextView) convertView.findViewById(R.id.tv_Phone);//设置convertView缓存标签,传入控件 convertView.setTag(viewHodler);} else {//从convertView视图中获取缓存的标签 viewHodler = (ViewHodler) convertView.getTag();}//将对应下标的值赋给对应位置 viewHodler.tvName.setText(mList.get(position).get("name"));//如果联系人备注为空则显示电话,如果不为空则在电话位置显示备注 if (TextUtils.isEmpty(mList.get(position).get("remark"))) {viewHodler.tvPhone.setText(mList.get(position).get("phone"));} else {viewHodler.tvPhone.setText(mList.get(position).get("remark"));}//返回当前converView视图给用户看 return convertView;}//自定义内部类ViewHolder class ViewHodler {private TextView tvName, tvPhone;} }
package com.example.cxy.androidcontact;import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView;import com.example.cxy.androidcontact.adapter.MyAdapter;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {private Button btn_add;private ListView mListView;private List<Map<String, String>> mList;private Map<String, String> mMap;private MyAdapter adapter;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件和List集合的方法 initview();}//从文件中读取数据的方法 private void writeFile() {try {//实例化File对象,参数为路径名 File file = new File("/mnt/sdcard/contact/contact.txt");//判断文件是否存在,存在则读取,不存在的不读取 if (file.exists()) {//将File文件输出 FileInputStream input = new FileInputStream(file);//定义byte[]字节数组,使用available方法读取文件中存储的信息长度 byte[] bytes = new byte[input.available()];//调用read方法将bytes数组中的数据读取 input.read(bytes);//关闭输出流 input.close();//把文件中读取到的内容全部转化为字符串 String content = new String(bytes);//先以#号分割为每一个人 String[] person = content.split("#");//使用循环把每一个人的三个属性分开 for (int i = 0; i < person.length; i++) {//使用split分割将person数组中的信息用逗号分隔开 String[] split = person[i].split(",");mMap = new HashMap<>();//使用循环输出信息 for (int x = 0; x < split.length; x++) {if (x == 0) {mMap.put("name", split[x]);} else if (x == 1) {mMap.put("phone", split[x]);} else if (x == 2) {mMap.put("remark", split[x]);}}//存放集合 mList.add(mMap);}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private void initview() {mList = new ArrayList<>();btn_add = (Button) findViewById(R.id.btn_add);mListView = (ListView) findViewById(R.id.listView);btn_add.setOnClickListener(this);mListView.setOnItemClickListener(this);}@Override public void onClick(View v) {Intent intent = new Intent();intent.setClass(this, AddActivity.class);startActivity(intent);}@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {Intent intent = new Intent();intent.setClass(this, DetialActivity.class);//将联系人信息传到DetialActivity类中 intent.putExtra("name", mList.get(position).get("name"));intent.putExtra("phone", mList.get(position).get("phone"));intent.putExtra("remark", mList.get(position).get("remark"));startActivity(intent);}//此方法,每次进入先清理集合,然后再次获取数据, //并且如果适配器没有实例化,则实例化,否则则刷新 @Override protected void onResume() {super.onResume();mList.clear();writeFile();if (adapter != null) {adapter.notifyDataSetChanged();} else {adapter = new MyAdapter(this, mList);mListView.setAdapter(adapter);}} }
![](/assets/blank.gif)
package com.example.cxy.androidcontact;import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;public class DetialActivity extends AppCompatActivity {private TextView tv_Name, tv_Phone, tv_Remark;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_detial);initView();}private void initView() {tv_Name = (TextView) findViewById(R.id.tvName);tv_Phone = (TextView) findViewById(R.id.tvPhone);tv_Remark = (TextView) findViewById(R.id.tvRemark);Intent intent = getIntent();String name = intent.getStringExtra("name");String phone = intent.getStringExtra("phone");String remark = intent.getStringExtra("remark");tv_Name.setText(name);tv_Phone.setText(phone);tv_Remark.setText(remark);} }
Android添加联系人信息并读取相关推荐
- android联系人添加公司,android添加联系人(直接添加到联系人数据库)
添加联系人姓名.手机.头像... java核心代码 package com.kaka.addContact; import java.io.ByteArrayOutputStream; import ...
- Android添加联系人到通讯录
联系人名字 名字不知道为什么,值设置了之后传过去没有,于是自己通过 Intent 最后又单独传了一次 // 联系人名字 ContentValues row1 = new ContentValues() ...
- Android向通讯录添加联系人的一般方法
Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: <uses-permission android:name="android.perm ...
- Android软件开发之通讯录——添加联系人以及SQLite工具的简单使用
关于通讯录获取联系人信息以及联系人信息的存储结构,下面链接的博客的博主已经简单说明: http://blog.csdn.net/snwrking/article/detail/7601794 ---- ...
- 最快速读取手机通讯录中联系人信息
作为一名Android开发,读写手机通讯录的操作人人都会,但是有没有遇到通讯录存在好几百条联系人信息时候读取的速度会明显变慢呢?本文就是介绍解决办法,我总结出了以下几种办法 提供参考: 一.线程 有A ...
- Windows Phone如何获取和添加联系人
Windows Phone SDK 7.1 提供了获取联系人列表信息的API,虽然是只读的,但是相比SDK 7.0已经很不错了.联系信息获取的相关API位于Microsoft.Phone.UserDa ...
- Android中可通过二维码扫描,直接显示个人名片信息,而且可以点击添加,调用系统的添加联系人功能
微信小程序出来后,出来了一个快速发名片的小程序,他会根据用户的信息生成一张二维码图片,用户扫描之后,就会读取二维码里面的数据,之后调用系统的名片展示界面,之后就可以添加联系人了.开始看到时,还挺好奇的 ...
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...
- android如何读取sim卡联系人信息,Android上如何获取手机和sim卡的联系人信息
需求很明确,获取手机和sim的联系人信息.接口设计也很简介 public interface OnFetchContactsListener { void onFetcherContactsCompl ...
最新文章
- C++ 类的内存分布
- Anaconda3-5.3.0-Windows-x86_64
- .NET Core 单元测试
- jmu-枚举WeekDay
- yudian温控表a1温度怎么补偿_贴片电容怎么确定型号
- 计算机图形学——Bresenham画线算法
- eclipse工具性能优化方法
- 让 orangepi 用上Btsync(资源分享工具)好资源不怕和谐!
- 科学计算机度计算,科学计算器arctan
- python 计算均值 方差 标准差
- 下班后可以做点什么副业赚钱呢?
- 前端安全攻防大全--专注于攻击和防御
- 通信原理仿真100例 | 多普勒频移的matlab仿真
- SAP FICO 理解成本中心会计
- 白盒测试方法之逻辑覆盖
- K_A08_013 基于 STM32等单片机驱动大功率MOS管模块按键控制直流电机加减速启停
- 生产力、商业价值和敏捷
- c语言按字母排序用直接插入法,直接插入排序(C语言实现)
- m6000查看端口状态_M6000日常查看维护命令 -
- IPv4向IPv6转换的几种技术分析(中科三方)
热门文章
- 第二章 DDR3实验
- js禁用tab键\Enter键
- CMake编译VS工程,生成解决方案时遇到错误:error MSB3073: 命令“setlocal”
- 九校联考-DL24 凉心模拟 Day1T3 三米诺 (tromino)
- linux下的arp刷新命令详解,linux arp 命令常用参数详解
- 搜苹果ipad版_苹果测试无刘海 iPhone / 三星 S10 指纹支付功能被关停 / 天外世界评分解禁...
- 前端单张图片下载,批量下载图片成压缩包
- 设置PreferenceFragment主题
- LeetCode 310. Minimum Height Trees
- STM32 SPI 的NSS引脚问题