Kontaktdaten auslesen und in Datei schreiben

  • Antworten:6
Nussi
  • Forum-Beiträge: 3

23.10.2012, 13:10:21 via Website

Hallo an alle,
ich beschäftige mich erst seit 2 Wochen mit Android Apps da ich im Zuge meines Praktikums eine App entwickeln soll. Leider habe ich relativ wenig Erfahrung mit Java und gar keine mit Android.
Ein Teil der App besteht darin das gesamte Telefonbuch auszulesen und alles in ein File zu schreiben.

Das mit dem Auslesen hab ich hinbekommen allerdings scheitert es jetzt leider am Schreiben. Mein Hauptproblem ist, dass man zwar sehr viele Codebeispiele findet wie man mit Java Text in eine Datei schreibt allerdings sind das alles immer abgeschlossene Klassen und ich weiß nicht genau wo ich den Code einfügen soll.

Ich hab es mit verschiedensten Code Snippets probiert und nichts hat funktioniert.

Es kommt keine Fehlermeldung allerdings wird auch keine Datei geschrieben.
Die ID und der DISPLAY_NAME werden mir ganz normal in der Konsole ausgegeben, allerdings kommt keine einzige Konsolenausgabe vom try-Block.

1package com.example.anotherproject;
2
3import android.app.Activity;
4import android.database.Cursor;
5import android.os.Bundle;
6import android.provider.BaseColumns;
7import android.provider.ContactsContract;
8import android.view.Menu;
9import java.io.*;
10
11
12public class MainActivity extends Activity {
13
14 FileWriter writer;
15
16 File file = new File("WriteTest.txt");
17
18 @Override
19 public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 setContentView(R.layout.activity_main);
22
23 try {
24 // Neues File anlegen
25 writer = new FileWriter(file);
26
27 System.out.println("File angelegt");
28
29 // Text in Stream schreiben
30 writer.write("Hallo Wie gehts?");
31
32 System.out.println("In Stream geschrieben");
33
34 // Stream in Datei schreiben
35 writer.flush();
36
37 System.out.println("In Datei geschrieben");
38
39 // Stream schließen
40 writer.close();
41 }
42
43 catch (IOException e) {
44 e.printStackTrace();
45 }
46
47
48 Cursor cursor = getContentResolver().query(
49 ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
50 if (cursor.getCount() > 0)
51 {
52 while (cursor.moveToNext())
53 {
54 String id = cursor.getString(cursor.getColumnIndex(BaseColumns._ID));
55 String name = cursor.getString(cursor.getColumnIndex(
56 ContactsContract.Contacts.DISPLAY_NAME));
57
58 System.out.println("Current contact on this iteration is : " + name + " with ID " + id);
59
60
61 }
62 }
63cursor.close();
64
65}
66
67 @Override
68 public boolean onCreateOptionsMenu(Menu menu) {
69 getMenuInflater().inflate(R.menu.activity_main, menu);
70 return true;
71 }
72}

Ich hoffe irgendwer kann mir weiterhelfen. Hab ich irgendwo einen groben Denkfehler?
Ich bedanke mich schon mal im Vorhinein für die Hilfe.

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

23.10.2012, 13:49:09 via App

Hallo Nussi,
hast du die Berechtigung zum Speichern und Löschen von Daten im Manifest hinzugefügt?

lg Samuel

Antworten
Stefan S.
  • Forum-Beiträge: 560

23.10.2012, 14:48:52 via Website

Kriegst du eine Fehlermeldung?

Antworten
Nussi
  • Forum-Beiträge: 3

23.10.2012, 15:47:34 via Website

Also im Manifest hab ich nur die Read permission drinnen. Brauch ich die permission zum speichern und löschen auch wenn ich die Daten einfach nur in eine txt-datei schreiben will?
Fehlermeldung bekomm ich keine. Es scheint so als ob der Code zum Erstellen und Schreiben der Datei einfach nicht da ist. Der Code darunter wird ja ganz normal ausgeführt. In der Konsole hab ich die Ausgabe der ID und des Namens.

Aber stimmt der Code zum Erstellen der Datei prinzipiell überhaupt?
Und vielleicht eine blöde Frage aber wo genau würde denn die Datei hingespeichert werden? Ich geh mal davon aus in einen der Unterordner vom Projekt im Eclipse Workspace?

Vielen Dank für eure Hilfe!!

Antworten
Gelöschter Account
  • Forum-Beiträge: 29

23.10.2012, 15:59:34 via Website

Also wenn du Dateien auf der SD karte speichern willst brauchst du die permission:

1<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

und ich speichere Dateien so:

1File file = new File(this.getExternalFilesDir(null), dateiname); // oder getFilesDir()
2try {
3 PrintWriter pw = new PrintWriter(file);
4 pw.println("Dein Text");
5 pw.close();
6} catch (FileNotFoundException e) {
7 e.printStackTrace();
8}

Ich hoffe das hilft...
mfg Samuel

Antworten
Stefan S.
  • Forum-Beiträge: 560

24.10.2012, 11:02:07 via Website

Nussi

Und vielleicht eine blöde Frage aber wo genau würde denn die Datei hingespeichert werden? Ich geh mal davon aus in einen der Unterordner vom Projekt im Eclipse Workspace?

Vielen Dank für eure Hilfe!!
das File wird im Emulater-Device gespeicht. Du kannst dies in Eclipse unter dem Tab DDMS anschauen.

Antworten
Gelöschter Account
  • Forum-Beiträge: 694

24.10.2012, 11:31:15 via Website

Samuel P.
und ich speichere Dateien so

Die Docs empfehlen vorab zu prüfen ob das externe Target überhaupt beschreibbar ist:

1public static boolean isExternalStorageWriteable() {
2 boolean rc = false;
3
4 String state = Environment.getExternalStorageState();
5 if (Environment.MEDIA_MOUNTED.equals(state)) {
6 rc = true;
7 }
8
9 return rc;
10 }

— geändert am 24.10.2012, 11:31:24

Antworten