android 中导出数据
来源:互联网 发布:女性假两性畸形 知乎 编辑:程序博客网 时间:2024/06/15 02:18
思路很简单:
1、将数据库的数据读取出来,并根据需要作相应处理。
2、将数据写入SD卡
下面以导出系统联系人为例:
MainActivity:
package com.home.exportcontact;import java.io.File;import java.io.FileWriter;import java.io.IOException;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.database.Cursor;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.provider.ContactsContract;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.Contacts.Data;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private Button exportBtn;// 导出按钮private TextView showText;// 显示进度的文本// 导出txt的存放位置private final static String OUTPUT_PATH = Environment.getExternalStorageDirectory() + "/我的联系人.txt";private static final int OUTPUT_FAIL = 0;// 导出失败标识private static final int OUTPUT_SUCCESS = 1;// 导出成功标识private static int count;// 导出联系人的计数private Thread mOutputThread;// 导出联系人线程// 空格private static final String SPACE_1 = " ";private static final String SPACE_2 = SPACE_1 + SPACE_1;private static final String SPACE_4 = SPACE_2 + SPACE_2;private static final String SPACE_8 = SPACE_4 + SPACE_4;private static final String SPACE_11 = SPACE_8 + SPACE_2 + SPACE_1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);exportBtn = (Button) findViewById(R.id.main_btn_export);exportBtn.setOnClickListener(this);showText = (TextView) findViewById(R.id.main_tv_show);}@Overridepublic void onClick(View v) {if (v == exportBtn) {outputContact();}}/** * 导出联系人入口 */private void outputContact() {File file = new File(OUTPUT_PATH);if (!file.exists()) {startOutputContact();} else {createDialog(this, "警告", "我的联系人.txt已经存在,是否覆盖?");}}/** * 创建提示对话框 * * @param context * @param title * @param message */private void createDialog(Context context, String title, String message) {AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle(title);builder.setMessage(message);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {startOutputContact();}});builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {dialog.cancel();}});builder.show();}/** * 开启导出联系人子线程 */private void startOutputContact() {setOutputWidgetEnabled(false);showText.setText("正在导出联系人...");if (mOutputThread != null) {mOutputThread.interrupt();mOutputThread = null;}mOutputThread = new Thread(new OutputRunnable(this));if (mOutputThread != null) {mOutputThread.start();}}/** * 设置导出组件的可用性 */private void setOutputWidgetEnabled(boolean enabled) {exportBtn.setEnabled(enabled);if (!enabled) {showText.setText("");}}class OutputRunnable implements Runnable {private Context context;public OutputRunnable(Context context) {this.context = context;}@Overridepublic void run() {boolean result = doOutputContact(context);if (result) {handler.sendEmptyMessage(OUTPUT_SUCCESS);} else {handler.sendEmptyMessage(OUTPUT_FAIL);}}}/** * 处理UI提示相关 */private Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg.what == OUTPUT_SUCCESS) {showText.setText((String.format("已成功导出 %d 条联系人记录", count)));setOutputWidgetEnabled(true);} else if (msg.what == OUTPUT_FAIL) {showText.setText("导入联系人失败");setOutputWidgetEnabled(true);}}};/** * 从数据库中导出联系人 * * @param context * @return 是否成功 */private boolean doOutputContact(Context context) {count = 0;try {String result = readFromContactDatabase(context);writeFile(OUTPUT_PATH, result);} catch (Exception e) {return false;}return true;}/** * 从数据库中读取联系人相关信息 * * @param context * @return 信息结果 */private String readFromContactDatabase(Context context) {StringBuilder resultBuilder = new StringBuilder();Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,new String[] { StructuredName.DISPLAY_NAME,Data.RAW_CONTACT_ID }, Data.MIMETYPE + "= ?",new String[] { StructuredName.CONTENT_ITEM_TYPE }, null);while (cursor.moveToNext()) {// 得到名称和每一行记录的IDString displayName = cursor.getString(0);int id = cursor.getInt(1);// 得到电话号码的游标Cursor mobileCursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,new String[] { Phone.NUMBER },Data.RAW_CONTACT_ID + " = " + id + " AND " + Data.DATA2+ " = " + 2, null, null);String mobileNum = "";if (mobileCursor.moveToNext()) {mobileNum = mobileCursor.getString(0);}mobileCursor.close();// 得到家庭电话Cursor homeCursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI,new String[] { Phone.NUMBER },Data.RAW_CONTACT_ID + " = " + id + " AND " + Data.DATA2+ " = " + 1, null, null);String homeNum = "";if (homeCursor.moveToNext()) {homeNum = homeCursor.getString(0);}homeCursor.close();if (displayName != null && !"".equals(displayName)) {String result = displayName + SPACE_4;if ("".equals(mobileNum)) {result += SPACE_11;} else {result += mobileNum;}result += SPACE_8 + homeNum + '\n';String checkString = resultBuilder.toString();if (!checkString.contains(result)&& ("".equals(mobileNum) || !checkString.contains(mobileNum))) {resultBuilder.append(result);count++;}}}cursor.close();return resultBuilder.toString();}/** * 将联系人信息写入SD * * @param path * @param info */private void writeFile(String path, String info) {try {File file = new File(path);FileWriter writer = new FileWriter(file, false);writer.write(info);writer.close();} catch (IOException e) {e.printStackTrace();}}}
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/main_btn_export" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="导出联系人" /> <TextView android:id="@+id/main_tv_show" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
权限:
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
0 0
- android 中导出数据
- oracle中导出数据
- Android导出数据到Excel
- 导出数据到excel中
- 导出数据到Excel中
- 从数据库中导出数据
- 从数据库中导出数据
- linux 中mysql 导出数据
- yii 中导出excel数据
- 导出数据库表中数据
- gridview中数据的导出
- Oracle中,数据导出导入
- 导出数据到Excel中
- PHP中数据导出csv
- mysql中导出数据字典
- 中导出数据到WORD中
- 导出DataGridView中数据到EXCEL中
- sqlplus中导出数据到excel中
- 开源框架中的设计模式
- Source Insight使用方法
- codeforces 223 div2
- Highcharts API
- iOS开发中Block的使用
- android 中导出数据
- 黑马程序员--BlockingQueue(可阻塞的队列)
- Java 创建对象的四种方法
- [LTE-Sim]使用小结
- CSS Hack汇总快查
- oracle在线重定义案例分析
- gradle工程配置
- 设计模式——迭代器模式
- zen-Coding的使用