2011-07-28 9 views
0

"連絡先名"と対応する "連絡先番号"の.csvファイルを作成したいと思います。しかし、以下のコードを実行すると、エラーが発生します。以下の私のコードを見て、私が間違っているところを教えてください。 私は2つのカラムを持っていることを意味し、1つは名前で、2番目は連絡先番号で、値はshowhであるはずです。coloumn.so plsは自分のコードを見ます。 私はアンドロイドとJavaの新しいです連絡先リストの.csvに関する問題:android

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) 
+0

コードを読み取ることができませんので、正しくフォーマットしてください。 –

+0

私は彼のためにそれをやった。また、@ram jiでは、try ... catchブロックを複数使用する必要はありません。 –

+0

あなたは私に連絡先情報のCSVファイルを作成する方法についてアイデアを教えていただけますか?inconsistensyが発生しないということは、1つの配列に名前を保存し、他の1つの配列にcontactnoを指定し、矛盾があるはずです... so plsは私を助けてくれるはずです... –

答えて

0

JavaCSVライブラリを使用して....ですが、それは両方のCSVを読み書きできます。論理の残りはあなたのコードに入ります。

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

ワンノート:カーソルが空の場合( 'getCount ()== 0')、fileWriter 'fw'は閉じられません。 –

関連する問題