# Problem mit HTTP- Verbindung



## AnonymXX (20. Jun 2010)

Hallo,

in meinem Programm habe ich Probleme mit der HTTP- GET- Verbindung. Mein Programm besteht aus mehreren Forms. Am Anfang habe ich alle in einem MIDlet erzeugt, das war aber schnell unübersichtlich.

Daher habe ich jetzt für jedes Form eine eigene Klasse. Jetzt geht aber auf einmal die HTTP- Verbindung nicht mehr und ich weiß nicht, wo mein Fehler liegt 

Das Form, in dem die Verbindung aufgebaut, und wo auch die URL zusammengesetzt wird:


```
public class ChoiceForm extends Form implements ItemCommandListener{

    private MIDlet midlet;
    private GetThread getThread;

    private ChoiceGroup cg2;
    public String wahl=null;
    private String URI;
    private final String [] umkreise = {"1km", "5km", "10km"};
    private final Command CMD_END = new Command("Ende", Command.EXIT, 1);
    private final Command CMD_BACK = new Command("Zurück", Command.BACK, 1);
    private final Command CMD_SEND = new Command("Senden", Command.ITEM, 1);

    public ChoiceForm(MIDlet midlet){
        super("App");
        this.midlet = midlet;
        cg2 = new ChoiceGroup("Sehenswürdigkeiten anzeigen: ", Choice.EXCLUSIVE, umkreise, null);
        cg2.setItemCommandListener(this);
        append(cg2);
        cg2.addCommand(CMD_END);
        cg2.addCommand(CMD_BACK);
        cg2.addCommand(CMD_SEND);


    }

    public void commandAction(final Command c, final Item i) {
        if(c == CMD_END) {
            midlet.notifyDestroyed();
        }
        if (c==CMD_BACK){
        	Display.getDisplay(midlet).setCurrent(new OptionForm(midlet));
        }
        if (c==CMD_SEND){

                //den GetThred initialisieren und starten
        	getThread = new GetThread(midlet);
			getThread.start();
			int index2 = cg2.getSelectedIndex();
                        wahl = cg2.getString(index2);
                        URI= "http://Servername/Beispiel.php?umkreis="+wahl+"&lonWert=49.4468&latWert=8.5708";
  
        }


  }
    public String getURI() {
		// TODO Auto-generated method stub
		return URI;
	}

}
```

Der Thread, in dem die Verbindug aufgebaut werden soll:


```
public class GetThread extends Thread {
	

	public GetThread(MIDlet midlet) {
		this.midlet = midlet;
	}

	public void interrupt(){
		anhalten = true;
	}
        

        
	public void run(){

                StringSeparator separator = new StringSeparator();
		StringBuffer sbuf = new StringBuffer();
		try{
                        //Verbindung aufbauen
                        choice = new ChoiceForm(midlet);

                        hc = (HttpConnection) Connector.open(choice.getURI());
			httpCode = hc.getResponseCode();
			is = hc.openInputStream();
			byte[] haeppchen = new byte[4096];
			int dieAnzahl;
                        //String vom Server einlesen
			while (!anhalten && (dieAnzahl = is.read(haeppchen))>0){
				sbuf.append(new String(haeppchen, 0, dieAnzahl));
			}

                        //Speicher für Array reservieren
                        ergebnis=new String[30][10];


                        /* Der String soll erst nach $ und dann nach , gesplittet werden
                         * sbuf: die Serverantwort. Wird dem String eingabe1 zugewiesen
                         * die Methode "split" wird zweimal aufgerufen und die aufgeteilten 
                         * Strings in das Array "ergebnis" geschrieben. 
                         */

                        String eingabe1=sbuf.toString();
                        
                        Vector vec1=separator.split(eingabe1,"§");
                        for(int i=0;i<vec1.size();i++)
                            {
                            //ergebnis[i][0]=(String)vec1.elementAt(i);
                            Vector vec2=separator.split((String)vec1.elementAt(i),",");
                            for(int j=0;j<vec2.size();j++)
                                {
                                ergebnis[i][j]=(String)vec2.elementAt(j);
                                }
                            }


                        /* das Array wird dem Hauptprogramm übergeben! Diese Übertragung geht ohne
                         * Probleme. Das Hauptprogramm bekommt die richtigen Werte und kann diese Anzeigen!
                         */
                        result.ergebnisAnzeigen(ergebnis);
                                             
                        
                        
		}
		catch(Exception e){
			
		}
		finally{
			try{
				if (is != null){
					is.close();
				}
			}
			catch (IOException e){}
			try {
				if(hc != null){
					hc.close();
				}
			}
			catch (IOException e){}
		}



	}
       

        private HttpConnection hc = null;
	private InputStream is = null;
	private int httpCode = 0;
	private MIDlet midlet;
        private ChoiceForm choice;
        private ResultForm result;
	private boolean anhalten = false;
        public String[][] ergebnis;
        public String ausgabe;
```

Soweit der Quellcode. Ich weiß nicht recht, wo das Problem liegt. Das Einzige, was ich durch Debugging herausfinden konnte, ist, dass der GetThread als URI null bekommt und nicht den richtigen String.
Woran kann das liegen?

Für Hilfe bin ich sehr dankbar.

Gruß

AnonymXX


----------



## The_S (21. Jun 2010)

Du erstellst dir ne neue "Choice" in deinem "GetThread". Da steht natürlich in der URL null drin ... generell komische Struktur. Evtl. mal weng was über OOP lesen.


----------



## AnonymXX (21. Jun 2010)

Hallo The_S,

danke für den Hinweis. Jetzt geht es 

Gruß

AnonymXX


----------



## AnonymXX (21. Jun 2010)

Sorry,

hatte mich vertan. Es geht doch nicht so, wie ich es brauche. 

Wie soll ich dann die URL vom ChoiceForm zum GetThread bekommen, wenn nicht so?
Für Vorschläge wäre ich sehr dankbar.

Gruß

AnonymXX


----------



## The_S (21. Jun 2010)

als Parameter übergeben?


----------

