Telefonbuch in J2ME programmieren HILFE!

Status
Nicht offen für weitere Antworten.

MC_Basstard

Mitglied
Hallo,

ich hoffe ihr könnt mir helfen.
Ich bin Azubi und hab die Aufgabe bekommen in Java n Telefonbuch fürs Handy zu erstellen wo sich alle Mitarbeiter mit ihren Nummern drin befinden.
Leider kenn ich mich mit J2ME garnich aus, da ich J2SE auch nich besonders kann hab ich quasi 0 Ahnung.
In meiner Arbeit kennt sich mit J2ME leider auch keiner aus Google war auch nicht mein Freund und bei Lycosiq und nem anderen J2ME Forum konnte mir bis jetzt irgendwie auch keiner helfen...

Ich hab bis jetzt ne Liste mit zwei Einträgen die man anklicken kann, wo sich dann ein neues Display öffnet (hoff des stimmt alles was ich da jetzt red xD).
Ich hab ne Textdatei, in der alle Mitarbeiter mit ihren Nummern dahinter drin stehen, und ich würde jetzt gern versuchen diese Textdatei in das Midlet einzubinden, das wenn ich auf Einträge ansehen klicke, dort dann alle Mitarbeiter + ihre Nummer dahinter angezeigt werden.

Hab mal irgendwas gehört das des mit Arrays geht oder mit Strings das es da iwie jede Zeile dan einliest oder so aber n Beispiel wie des aussehen muss oder wie des zusammenhängen muss hab ich bis jetzt leider auch nich gefunden.

Schonmal großen Dank im voraus!!

mfg Stefan
 
In J2ME nimmste dafür ne <code>List</code> zum Anzeigen. Zwischenspeichern kannste das gern in nem Array. Les dir am Besten mal ein Einsteigerbuch durch. Oder bestell dir "Java goes Handy" für 0 Euro (siehe Werbung oben rechts im Forum).
 
jo ne List hab ich da scho ^^
Und es hieß irgendwie das man dan über Arrays jede Zeile der Textdatei in die List einlesen kann.

Wüsstest du da vlt ein kleines Beispiel dazu wie sowas funktioniert?
 
Ich hab die Textdatei mit den Namen der Mitarbeiter und ihren Telefonnummern dahinter.
Nun möchte ich den Inhalt in das Midlet einlesen das die Mitarbeiter mit ihren Nummern dahinter dan in der Liste stehtn.
 
Textdatei kannst du über einen beliebigen Stream einlesen (muss mit im JAR liegen). Das eingelesene musst du dann irgendwie nach Mitarbeiter/Telefonnummer trennen (vermutlich dann beim Zeilenumbruch) und dann die einzelnen Elemente via
Code:
list.append
zur Liste hinzufügen.
 
aber wie kann man auf den inhalt der textdatei zugreifen?
da muss ich doch irgendwie angeben welche zeile in der Textdatei jetzt wo in der `Liste stehen soll oder?
 
Eine Textdatei hat keine Zeilen. folglich kannst du auch nicht auf spezielle Zeilen zugreifen. Du musst die Textdatei soweit sequentiell auslesen, bis du an der gewünschten Stelle bist.
 
ah ok
und wie genau geht das?

sowas hier hab ich bis jetzt


Java:
  public void testList() 
    {
        list = new List("Auswahl", Choice.IMPLICIT);
        list.setTicker(new Ticker("das Telefonbuch"));
        list.addCommand(backCommand);
        list.setCommandListener(this);
        display.setCurrent(list);
        currentMenu = "list";
        
  
        
  // Datei einlesen 
        InputStream is = this.getClass().getResourceAsStream("/unbekannt-Telefonbuch.doc");
        DataInputStream dis = new DataInputStream(is); 
	      byte[] b = new byte[150]; 
	      zeichenkette="";
	      try {
	            if(is!=null){
	            	is.read(b);
	            	zeichenkette=zeichenkette+b.toString();
	            }
        	} 
        catch (IOException  ex) {
        	ex.printStackTrace();
        	} 
        list.append(zeichenkette, null);

    }
 
naja nich so ganz oder?
Weil beim normalen Java würd des pber FileReader gehen beim J2ME leider nicht. Deswegen hat mir da Java ist auch eine insel 8 leider auch nicht geholfen.
 
Aso...
omg
Dann muss ich quasi des Zeug was bei dem Java Blog Buch drinstehn hab alles um schreiben.
Ok des kann dauern ich meld mich wieder wenn ich irgendwas zamgebracht hab.
 
so habs hinbekommen

nur wenn ich die Tabelle nun runterscroll zeigts nen Fehler an

arrayindexoutofboundsexception 3

Des laggt dann iwie beim scrolln und es verschwindet alles nur manches erscheint aba oft öfters als es sollte ka wie man des beschreiben soll aber wenn ich weiterscroll gehts aufeinmal irgendwo wieder normal weiter.
Kannste mir da weiterhelfen?

Das hab ich jetzt:

Java:
public Telefonbuch()
	{
		try {
			dateilesen();
			} 
		catch (Exception e){};
	}
		
		public void dateilesen() throws IOException
		{	
		
		DefaultTableModel model = new DefaultTableModel(
			new Object[0][4],  //  4 == Spaltenzahl 
			new String[]{null});
		    String[][] rowData = new String[5000][4];
		
		 	FileReader fr = new FileReader("C:/Temp/1-Telefonbuch.txt");	
			BufferedReader br = new BufferedReader(fr);
			String zeile;
			int i =0;
			while ( (zeile = br.readLine()) != null )
			{
			    String[] zeilenDaten = zeile.split(";");
			    rowData[i] = zeilenDaten;
			    i=i+1;
			}
			
		
	String[] columnNames = {
		"Name","Handynummer","Nummer","Abteilung"};
	
	frame.setDefaultCloseOperation(EXIT_ON_CLOSE );
	JTable table = new JTable( rowData, columnNames );
	frame.add( new JScrollPane(table) );
	frame.pack();
 	frame.setVisible( true );
 	frame.setSize(800,300);	
 	frame.setTitle("Telefonbuchtest");
 	frame.setResizable(true);
 	
 	
	}
 
Zuletzt bearbeitet:
stimmt...
is mir auch grad aufgefallen das ich hier ja im j2me Forum bin xD
sry
Hab mir jetzt mal gedacht ich versuchs erstmal aufn Pc bevor ich da am ´Handy was rummach.

Kann man mein Thema iwie verschieben und den Titel umbenennen?
 
Hallo Leute,
bin imma noch dabei n Telefonbuch zu machen xD
Versuche aber gerade, Daten aus ner txt Datei einzulesen. Hab hier was zamgeschrieben, was leider nich geht und vlt kann mir da nun jemand dabei helfen, dass es geht.


Das hier wär mal der Code wie ich im Java fürn PC aus einer .txt Datei den Text in eine Tabelle einlesen kann.
Diesen hab ich irgendwie versucht umzuschreiben, dass es für J2ME funktioniert, was mir leider nicht gelungen ist n Arbeitskollege hats versucht mir zu helfen ist aber auch gescheitert.

Java:
public Telefonbuch()
    	{
    		try {
    			dateilesen();
    			} 
    		catch (Exception e){};
    	}
    		
    		public void dateilesen() throws IOException
    		{	
    		
    			DefaultTableModel model = new DefaultTableModel(
    			new Object[0][2],  //  2 == Spaltenzahl 
    			new String[]{null});
    			
    		    String[][] rowData = new String[2000][2];
    		
    		 	FileReader fr = new FileReader("H:/Temp/Maya/workspace/EIGENES PROJEKT/Telefonbuch.txt");	
    			BufferedReader br = new BufferedReader(fr);
    			String zeile;
    			
    			int i =0;
    			while ( (zeile = br.readLine()) != null )
    			{
    			    String[] zeilenDaten = zeile.split(";");
    			    rowData[i] = zeilenDaten;
    			    i=i+1;
    			}
    			
     			
    			
    	String[] columnNames = {
    		"Name","Nummer"};
    	
    	frame.setDefaultCloseOperation(EXIT_ON_CLOSE );
    	JTable table = new JTable( rowData, columnNames );
    	}





Und hier is der Code fürs J2ME
Java:
// Datei einlesen 
    	public void loadlist(){
    		 System.out.println("bla");
        InputStream is = this.getClass().getResourceAsStream("buch.txt");
        //System.out.println(is.toString());
        StringBuffer sb = new StringBuffer();
        System.out.println("buffer");
          byte[] b = new byte[5000]; 
          System.out.println("buffer 0");
          zeichenkette="";
          System.out.println("buffer 1");
          try {
              int chars, i = 0;
              System.out.println("buffer 2");
              chars = is.read();
              System.out.println("buffer 3");
              while ((chars) != -1){
            	  System.out.println("loop");
            	  sb.append((char) chars);
            	  i=i+1;
              }
              is.close();
        	  zeichenkette=zeichenkette+b.toString();
              //return sb.toString();
        	} 
        catch (IOException  ex) {
        	ex.printStackTrace();
        	}
        System.out.println("bla");
        list.append(zeichenkette,null);
        //return null; 
		}

die System.out.println("..."); hab ich gemacht, da egal ob in Eclipse oder Netbeans der Debugger nicht funktionierte und ich so sehen konnte, wo das Programm nicht reingeht.

Dieser Fehler kommt immer:

bla
buffer
buffer 0
buffer 1
buffer 2
java.lang.NullPointerException
at handytest.handy.loadlist(+74)
at handytest.handy.commandAction(+4)
at javax.microedition.lcdui.List.callKeyPressed(+80)
at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)
at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)
at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+127)
at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+114)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)




das heißt ab

chars = is.read();

machta nimma weiter aber was kann ich da jetzt genau machen find da leider keine Lösung dazu

MFG Stefan
 
Code:
InputStream is = this.getClass().getResourceAsStream("buch.txt");
ist null. Deshalb auch die NullpointerException...

Liegt die Datei "buch.txt" auch direkt im bin-Ordner?

Also ich lese Textdateien in Java ME so ein:

Java:
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/pfad/zur/datei/test.txt"));
StringBuffer sb = new StringBuffer();
int i = 0;
try {
   while((i = dis.read()) > -1) {
      sb.append((char)i);
   }
} catch (IOException e) {
   e.printStackTrace();
}

Dadurch steht der ganze Text der Datei dann schön im StringBuffer und ich kann damit Arbeiten...

Vllt. hilft das ja 😉

Edit: Wichtig auch der / vor dem Pfad!
 
Zuletzt bearbeitet von einem Moderator:
Ab der Zeile while((i = dis.read()) > -1) gehts iwie nich weiter also da geht er irgendwie nich rein.
is echt komisch habsj etzt so angegeben

Java:
 public void loadlist(){
    	DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("D:Temp/buch.txt"));
    	StringBuffer sb = new StringBuffer();
    	int i = 0;
    	try {
    	   while((i = dis.read()) > -1) {
    	      sb.append((char)i);
    	   }
    	} catch (IOException e) {
    	   e.printStackTrace();
    	}
    }

hatte dafür zum überprüfen überall dazwischen System.out.println"..."; stehn damit ich wieder weiß wo er reingeht aba die Syste.out nach der zeile while((i = dis.read()) > -1) zeigts nimma an =(
 
Also dass die Datei unter D:Temp/ ligt glaub nicht...

Wenn mich nicht alles täuscht kannst Du beim Handy sowieso nur relative Pfad gehen...
Leg die .txt einfach ins gleiche verzeichnis wie deine klasse(n) und ruf sie mit /buch.txt auf. (Wenn Du packages verwendest eben noch mit dem Pfad (ab /bin)).

Dass da nicht in die while-schleife gegangen wird liegt daran, dass es keine Daten zum Verarbeiten gibt. (Da i < 0)
 
ich brings einfach nich hin...

kann ich des so eigentlich in die liste einlesen?
was so n zeug angeht bin ich nich wirklich gut :-/


Java:
public void loadlist(){
    	DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/bin/handytest/buch.txt"));
    	StringBuffer sb = new StringBuffer();
    	int i = 0;
    	byte[] b = new byte[5000];
        zeichenkette="";
    	try {
    	   while((i = dis.read()) > -1) {
    	      sb.append((char)i);
    	      i=i+1;
    	   }
    	   dis.close();
    	   zeichenkette=zeichenkette+b.toString();
    	} catch (IOException e) {
    	   e.printStackTrace();
    	}
    	list.append(zeichenkette,null);
    }
 
Prinzipiell müsste das mit der List gehen.
Jedoch bringt
Code:
list.append(zeichenkette, null);
nicht viel, da zeichenkette ja ein kompletter String ist. Somit würde in einer Zeile die komplette Textdatei stehen.
Zum Einlesen nochmal siehe j2meforum.org
 
Also mit folgendem Code:

Java:
public class Handy extends MIDlet {
	Display	disp = null;
	List lList = null;
	public Handy() {
		disp = Display.getDisplay(this);
		lList = new List("Liste", List.IMPLICIT);
		loadlist();
	}
	public void loadlist() {
		DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/buch.txt"));
		StringBuffer sb = new StringBuffer();
		int i = 0;
		try {
			while((i = dis.read())>-1) {
				sb.append((char)i);
				i = i+1;
			}
			dis.close();
		} catch(IOException e) {
			e.printStackTrace();
		}
		lList.append(sb.toString(), null);
	}
	public void startApp() {
		disp.setCurrent(lList);
	}
	public void pauseApp() {}
	public void destroyApp(boolean unconditional) {}
}

...und der angehängten Ordnerstruktur geht alles ohne Probleme bei mir...
 
Großen Dank!

Jetzt muss ich nur noch herrausfinden wie ich jede Zeile aus der txt Datei in ne neue Zeile der Liste einfügen kann.
 
Du prüfst einfach ob ein Zeilenumbruch vorhanden ist.

Weiß nicht ob das bei ME so geht, aber:

Java:
System.getProperties().getProperty("line.separator");

Und das dann eben in ein Array reinpacken. (ArrayLists gibts ja bei ME nicht)
 
Dann musst Du entweder auf "\n" oder "\t\n" prüfen... Musst halt mal ein bisschen rumprobieren... 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben