android 中匯出資料

來源:互聯網
上載者:User

思路很簡單:

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();}}}

布局:

        

許可權:

   




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.