联系人列表的.csv生成问题:android
我想把“联系人姓名”和相应的“联系人号码”做成.csv文件,但当我运行下面的代码时,出现了给定的错误。请参阅下面的代码,并指出我错在哪里。 这意味着我有两列,一列是姓名,第二列是联系人号码,其值应显示在该列下方。因此,请查看我的代码。我是android和java新手联系人列表的.csv生成问题:android,android,Android,我想把“联系人姓名”和相应的“联系人号码”做成.csv文件,但当我运行下面的代码时,出现了给定的错误。请参阅下面的代码,并指出我错在哪里。 这意味着我有两列,一列是姓名,第二列是联系人号码,其值应显示在该列下方。因此,请查看我的代码。我是android和java新手 public class contactlist extends Activity { static String name; static int count; static int countno;
public class contactlist extends Activity {
static String name;
static int count;
static int countno;
File file = null ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext())
{
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//error on below line
String phoneno = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
cur.close();
String columnString = "\"PersonName\",\"phoneno\"";
String dataString = null;
dataString = "\"" + name +"\",\"" + phoneno + "\"";
Log.i("saurabh",dataString);
String combinedString = columnString + "\n" + dataString;
File root = Environment.getExternalStorageDirectory();
if (root.canWrite()) {
File dir = new File (root.getAbsolutePath() + "/PersonData");
dir.mkdirs();
file = new File(dir, "Data.csv");
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
out.write(combinedString.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
错误是
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.database.CursorWindow.getString_native(Native Method)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.database.CursorWindow.getString(CursorWindow.java:329)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.database.CursorWrapper.getString(CursorWrapper.java:135)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at contactlist.pkg.contactlist.onCreate(contactlist.java:83)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-28 16:09:56.758: ERROR/AndroidRuntime(27597): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
使用该库,它可以读取和写入CSV。其余的逻辑将进入您的代码。您的代码不可读,请正确格式化!我是为他做的。还有@ram ji,您不必使用多个try…catch块。先生,您能告诉我如何制作联系人信息的csv文件吗?这样不一致就不会发生。如果我在一个数组中保存姓名,在另一个数组中保存contactno,如果任何联系人详细信息都没有contactno,但只有ContactName,那么不一致就应该出现。因此,请帮助我先生…@Ragunah Jawahar hi..如果您有其他想法,请与我分享..谢谢注意:如果光标为空(
getCount()==0
),fileWriterfw
将不会关闭。
public class ContactlistActivity extends Activity {
String name;
File file = null;
String[] names = { ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
File folder = new File(Environment.getExternalStorageDirectory()+ "/Application");
boolean var = false;
if (!folder.exists())
var = folder.mkdir();
System.out.println("" + var);
String filename = folder.toString() + "/Contact.csv";
FileWriter fw = new FileWriter(filename);
fw.append("Name");
fw.append(',');
fw.append("Number");
fw.append(',');
fw.append('\n');
Cursor cur = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,names,null,null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+ " ASC");
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phoneno = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String dataString = null;
dataString = "\"" + name + "\",\"" + phoneno + "\"";
fw.append("" + name);
fw.append(',');
fw.append("" + phoneno);
fw.append(',');
fw.append('\n');
}
cur.close();
fw.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}