Inhalt eines Eingabefeldes an einen Server senden?

marc1887

Mitglied
Hallo liebe Community.
Bevor ich zu meiner Frage komme wollte ich mich kurz Vorstellen bin Anwedungsentwickler in der asubildung und darf mich erst seit einer Woche mit Apps beschäftigen meine Java Kentnisse sind mau. Und ich hoffe meine Frage is nich zu dumm...


Ich möchte auf einen app ein Eingabefeld haben + einen Button
Der Inhalt des Eingabefeldes soll an einen server gesendet werden wenn man auf den Button klickt.

zb: ich wähle aus im Menü "pause"
und geben meine Mitarbeiterid ein. Mit einen klick auf dem Button Soll nun die Id an den Server gesendet werden.
nur habe ich leider keine Ahunung wie ich das Anstelle. DAS menu bekomm ich hin. nur welchen Quellcode packe ich in die void button bei mir damit er den Inhalt an einen Server sendet?



Hoffe die Frage is nich all zu dumm :D und für Rechtschreibfehler entschuldige ich mich schon jetzt einmal. :)
mfg Marc
 

schlingel

Gesperrter Benutzer
Hoffe die Frage is nich all zu dumm
Dumm nicht, aber ein wenig zu arg ohne Basics gestellt.

In dem Tutorial findest du mal die Basics damit du weißt, wie ein Button zu programmieren ist.

Und beim Server ist die Frage was sich der überhaupt erwartet. JSON/XML für RESTful, XML für SOAP, TCP/UDP Protokol? Das weiß keiner von uns.
 

marc1887

Mitglied
also unsere server laufen alle auf http. Mein Arbeitskollege Porgrammiert auch alles mit php.
Nun ist der Wunsch von meinen Chef das ich mich mit Androidapps beschäftige und wir Daten an den Server verschicken können. Einen Button an sich zu programmieren bekomm ich hin soweit. Also einen Taschenrechner als app hab ich schon hinbekommen mit auswahlmenu.

nur mir is schleierhaft wie ich die eigegebene ID zu dem Server hinbekomme.
Arbeite seit letzem Freitag mit Apps habe mir tutorials angekuckt zu java eclipse und sdk und wie halt schon erwähnt ein wenig rumgespielt (taschenrechner).

hm was müsste ich denn alles hilfreiches hierrrein schreiben? :(
 

schlingel

Gesperrter Benutzer
Lies das Tutorial. Da wird klarerweise aus dem Text-Feld gelesen um es umzuwandeln. Und wenn du an ein PHP-Skript etwas schickst per HTTP, kannst du das mit der WebClient-Klasse machen.
 

marc1887

Mitglied
Also ich hab das jetzt soweit hinbekommen über den emulator kann ich eine eingabe in mein Textfeld machen und per Buttonklick werden sie Versendet und ich kann sie unter
mir auch auf einer adresseansehen. Soweit sogut funktioniert auch alles.

Aber wenn ich die app auf meinem Galaxy s3 testen möchte stürzt sie sobald ich den button klicke ab. zuerst stoppt es und dann schließt sich die app. Übern Simulator läuft aber alles ohne probleme.

in der Manifest habe ich die minSdkVersion= 10 und die targetSdkVersion=16

Woran kann das liegen?

bei mir werden keine fehler angezeigt. hier einmal mein code

[JAVA=42]
public void ButtonClick (View view){
String c;

EditText Feld1 = (EditText)findViewById(R.id.zahl1);
c = Feld1.getText().toString();
postRequest(c);
}





public void postRequest(String c){
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://meineseite.php");
try {
// Add your data


ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

nameValuePairs.add(new BasicNameValuePair("var", c));

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

client.execute(httppost);

} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
EditText Feldx = (EditText)findViewById(R.id.zahl2);
Feldx.setText(String.valueOf(e));
}
} ; }
[/code]

mfg marc
 

schlingel

Gesperrter Benutzer
Wundert mich zwar, dass es im Emulator läuft aber so wie der Code aussieht, fliegt eine NetworkOnMainThreadException. (Hättest du auch selber gesehen, wenn du den Logcat bemüht hättest.)

Du musst den Netzwerk-Code weg vom UI-Thread bringen. (AsyncTask, IntentService, etc.)
 

schlingel

Gesperrter Benutzer
Zur Klarstellung: Das Problem ist, dass du Code im falschen Thread ausführen willst. Das wurde ab HONEYCOMB verboten. Seit dem, schmeißt das System diese Exceptions, wenn eine Operation potentiell lange dauern kann. Bei Netzwerkverbindungen passiert das, bei GSON parsing ist mir das auch schon untergekommen.

Was musst du also machen? Du musst den Code in einen Thread packen. Dazu kannst du entweder einen normalen JAVA-Thread verwenden, einen AsyncTask oder einen IntentService.
 

schlingel

Gesperrter Benutzer
AsyncTask<T1, T2, T3> hat drei Typparameter.

T1 ist der Eingabetyp => in deinem Fall String
T2 ist der Progress-Update-Typ => In deinem Fall Void. Denn entweder du hast die Antwort vom Server oder nicht.
T3 ist der Rückgabe-Wert der asynchronen Methode => In deinem Fall bietet sich ein Boolean an. (Success)

Du musst deine AsyncTask-Klasse also so designen, dass sie die Parameter nimmt, den Server asynchron anruft und dann das Ergebnis an dein Programm zurück gibt.

Java:
private class MyTask extends AsyncTask<String, Void, Boolean> {
	private Throwable occurredProblem;
	
        public Throwable getProblem() {
          get occurredProblem;
        }

	@Override
	protected Boolean doInBackground(String... params) {
	  if(params == null || params.length == 0) {
		occurredProblem = new IllegalArgumentException("MyTask needs a valid String param!");
		return false;
	  } else {
		return postRequest(params[0]);
	  }
	}

	public boolean postRequest(String c){
		occurredProblem = null;
		HttpClient client = new DefaultHttpClient();
		HttpPost httppost = new HttpPost("http://macscripts.hplarray.de/apps/android/index.php");
		try {
			
			 
			ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
			nameValuePairs.add(new BasicNameValuePair("var", c));
			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

			client.execute(httppost);
			
		} catch (ClientProtocolException e) {
				occurredProblem = e;
		} catch (IOException e) {
			occurredProblem = e;
		}
   
		return occurredProblem != null; }}
	}        
}

Diese Klasse kannst du dann in deinem Code so verwenden:

Java:
MyTask task = new MyAsyncTask<String, Void, Boolean>() {
  @Override 
  protected void onPostExecute(Boolean... params) {
    String msg = "";
    if(params == null || params.length == 0) {
      msg = "Generic error!";
    } else if(!params[0]) {
       msg = this.getOccurredProblem() != null ? this.getOccurredProblem().getErrorMessage() : "Something bad happened!";
    } else {
       msg = "Success";
    }
  
    Feldx.setText(msg);
  }
}; // hier erzeugen wir eine anonyme Klasse vom Typ MyTask, die, die onPostExecute implementiert.

task.execute(c);

Ich hab das alles im Edit-Feld runter getippt. Könnte also sein dass da Syntax-Fehler drinnen sind. Bitte die selber fixen. Aber ich hoffe das Prinzip ist jetzt etwas klarer.
 

marc1887

Mitglied
Okay also es klappt bei mir aufm handy jetzt allerdings freezt es wieder ein sobald ich erneut ein 2tes paar daten senden will.
muss ich die die netzwerkklasse die ich mit asyntask versehen habe nun in eine endlosschleife einbinden ?
 

schlingel

Gesperrter Benutzer
Einen AsyncTask kann man nur einmal verwenden. Du musst eine neue Instanz davon holen.

Aber bitte lerne endlich selbstständig den Logcat zu verwenden. Dann gibst du bei Google einfach nur den Exception-Namen ein und die Chancen stehen nicht schlecht, dass dir sofort geholfen wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Gezielte Ausgabe von abgefragten Inhalt aus Datenbank Android & Cross-Platform Mobile Apps 1
B Inhalt von StringBuffer in Textdatei speichern? Android & Cross-Platform Mobile Apps 6
F Android Spinner zur Laufzeit mit verschiedenem Inhalt füllen Android & Cross-Platform Mobile Apps 2
G Dynamische View Inhalt -> Lagesensor Android & Cross-Platform Mobile Apps 3
A Was übersehe ich bei der Einrichtung eines neuen Android-Studios Android & Cross-Platform Mobile Apps 56
L Feld eines Eingabeformulars automatisch mit UserID ausfüllen Android & Cross-Platform Mobile Apps 1
L Android Länge eines Musikordners Android & Cross-Platform Mobile Apps 7
C Zugriff auf die Position eines String- bzw Spinner-Arrays Android & Cross-Platform Mobile Apps 1
L Hintergrund eines Switch(Buttons) ändern Android & Cross-Platform Mobile Apps 3
Robat Android Umsetzung eines Spiels mit Minispielen Android & Cross-Platform Mobile Apps 5
A Android Öffnen eines ProgressDialogs Android & Cross-Platform Mobile Apps 5
antonbracke Android OpenGL - Element zum Zeigen eines .obj Models Android & Cross-Platform Mobile Apps 2
M [Android] Wie erstellt man eine Verknüpfung eines Ordners? Android & Cross-Platform Mobile Apps 7
H Frage bei erstellen eines Projectes Android & Cross-Platform Mobile Apps 3
B Überlagern eines Layouts Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
T Android Ergebnis eines XML+XSLT "transform" in eine HTML - Datei schreiben (Android) Android & Cross-Platform Mobile Apps 2
Bastifantasti Lagesensor eines Handys ansprechen? Android & Cross-Platform Mobile Apps 48
A Problem beim Subtrahieren eines Double von einem Double Android & Cross-Platform Mobile Apps 5
C Woche eines Jahres rausfinden Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben