Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将联系人作为vcf导出到SD卡_Android_Contacts_Sd Card_Vcf Vcard - Fatal编程技术网

Android 将联系人作为vcf导出到SD卡

Android 将联系人作为vcf导出到SD卡,android,contacts,sd-card,vcf-vcard,Android,Contacts,Sd Card,Vcf Vcard,我一直在尝试使用以下代码将联系人导出为vcf文件: b5.setOnClickListener(new OnClickListener() { public void onClick(View v){ getVCF(); } public static void getVCF() { final String vfile = "POContactsRestore.vcf"; Cursor phones = mContext.getContentResolver().query(

我一直在尝试使用以下代码将联系人导出为vcf文件:

b5.setOnClickListener(new 

OnClickListener()
{

public void onClick(View v){
getVCF();
}


public static void getVCF() 

{

final String vfile = "POContactsRestore.vcf";

Cursor phones = mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);

phones.moveToFirst();
for(int i =0;i<phones.getCount();i++)
{
  String lookupKey =    phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
 Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);

AssetFileDescriptor fd;
 try 
 {
     fd = mContext.getContentResolver().openAssetFileDescriptor(uri, "r");
     FileInputStream fis = fd.createInputStream();
     byte[] buf = new byte[(int) fd.getDeclaredLength()];
     fis.read(buf);
     String VCard = new String(buf);
     String path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile;
     FileOutputStream mFileOutputStream = new FileOutputStream(path, true);
                mFileOutputStream.write(VCard.toString().getBytes());           
     phones.moveToNext();                           
     Log.d("Vcard",  VCard);
 } 
 catch (Exception e1) 
 {
      // TODO Auto-generated catch block
      e1.printStackTrace();
 }

 }
 }
“调试”窗口将突出显示这一行:

Cursor phones = mContext.genContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
谢谢你的帮助

编辑2:

OK调试窗口显示:

Thread[<1>main](Suspended (exception NullPointerException))
MainActivity$1.getVCF()line:71
MainActivity$1.onClick(View)line:63
Thread[main](挂起(异常NullPointerException))
main活动$1.getVCF()行:71
主活动$1。单击(视图)行:63
LogCat窗口只显示我以前发布的错误。

(在问题编辑中回答。转换为社区wiki答案。请参阅)

OP写道:

只是想让你知道我是怎么修好的;我刚刚去掉了上下文中的“static”标记:

public class MainActivity extends Activity
{
 static Context mContext;
为了

public class MainActivity extends Activity
{
 Context mContext;
我花了一整天的时间才找到问题所在


发布带有例外的日志…感谢您的回复,我已经编辑了我的问题。好吧,您说您得到的是NullPointerException。我们需要查看日志的那部分。它将准确地说明NPE发生的位置(行号)。我已经编辑了我的答案。我在LogCat中找不到任何包含“NullpointerException”的错误。异常只是出现在调试窗口中。好的……您能在
getVCF()函数中标记第71行吗?这就是错误发生的地方。
public class MainActivity extends Activity
{
 Context mContext;