我已将电子邮件意图添加到Android应用程序中,并带有将附件添加为附件的代码。
但是,当我单击“电子邮件数据”按钮打开意图时,出现应用崩溃,日志猫显示以下内容,即http://hastebin.com/idejavunam.avrasm,此行输出空指针异常错误:
case R.id.emailBtn:
所以我认为这是文件uri的问题,但看不到文件存在于设备文件系统中的原因。
有谁知道我该如何调试此问题?可能我将文件的路径错误地传递给了电子邮件意图?
这是我实施该解决方案所遵循的过程。
创建CSV文件的方法中的代码:
String baseDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "AnalysisData.csv";
//this filePath is used in email code and converted to Uri.
filePath = baseDir + File.separator + fileName;
File f = new File(filePath);
这是调用电子邮件意图的代码,其文件路径转换为用于附件的Uri:
case R.id.emailBtn: {
Toast.makeText(this, "email clicked", Toast.LENGTH_SHORT).show();
Uri.fromFile(new File(filePath));
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
emailIntent.putExtra(Intent.EXTRA_STREAM, filePath);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
break;
我已经修改了部分检查,如果现在可以使用的话。
case R.id.emailBtn: {
Toast.makeText(this, "email clicked", Toast.LENGTH_SHORT).show();
Uri uri = Uri.fromFile(new File(filePath));
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.setType("*/*");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
break;
更新
同样在查看logcat之后,我发现您的文件路径为null。请更正
编辑
我已经修改了您的onClick方法,只需替换一下,告诉我它是否对您有用
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String baseDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "AnalysisData.csv";
filePath = baseDir + File.separator + fileName;
File f = new File(filePath);
switch (v.getId()) {
case R.id.exportBtn: {
Toast.makeText(this, "select clicked", Toast.LENGTH_SHORT).show();
//write sample data to csv file using open csv lib.
date = new Date();
CSVWriter writer = null;
// File exist
if(f.exists() && !f.isDirectory()){
FileWriter mFileWriter = null;
try {
mFileWriter = new FileWriter(filePath , true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writer = new CSVWriter(mFileWriter);
}
else {
try {
writer = new CSVWriter(new FileWriter(filePath));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String data [] = new String[] {"Record Number","Ship Name","Scientist Name","Scientist Email","Sample Volume","Sample Colour","Sample Material","Latitude","Longitude","Date","\r\n"};
writer.writeNext(data);
/*
//retrieve record cntr from prefs
SharedPreferences settings = getSharedPreferences("RECORD_PREF", 0);
recordCntr = settings.getInt("RECORD_COUNT", 0); //0 is the default value
*/
//increment record count
recordCntr++;
/*
//save record cntr from prefs
settings = getSharedPreferences("RECORD_PREF", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("RECORD_COUNT",recordCntr);
editor.commit();
*/
data = new String[]{Integer.toString(recordCntr),shipName,analystName,analystEmail,sampleVolume,
sampleColour,sampleMaterial,latitudeValue.toString(),longitudeValue.toString(),new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date),"\r\n"};
writer.writeNext(data);
try {
writer.close();
Toast.makeText(this, "Data exported succesfully!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "Error exporting data!", Toast.LENGTH_SHORT).show();
}
break;
}
case R.id.emailBtn: {
Toast.makeText(this, "email clicked", Toast.LENGTH_SHORT).show();
if (f.exists() && !f.isDirectory()) {
Uri uri = Uri.fromFile(f);
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.setType("*/*");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
}
break;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句