httpClient httpPost httpRequest

  • 10 Antworten
  • Letztes Antwortdatum
S

SJay96

Neues Mitglied
0
Hallo zusammen!
Ich bin gerade neu hier und habe da ein kleines Problem bei einem Lernprojekt. Ich versuche ein Login zu erstellen. Das Serverseitige mache ich über PHP und eine Mysql Datenbank. Clientseitig arbeite ich mit java eclipse.

Ich habe auf einer meiner Activitys(Login) zwei EditText felder. Hier soll der Name und ein Passwort hineingeschrieben werden. Nun möchte ich mit einem Click auf einen Button mit der Id BtnLogin und der im xml definierten onClick funktion onBtnLogonClick die Daten an das PHP file senden. Dieses soll mir dann einen Fehler zurückgeben oder die Meldung, dass das Login funktioniert hat. Hier mein Code dazu:

PHP
PHP:
<?php
	
	#Überprüfung ob Benutzername und Passwort vorhanden sind
	if(isset($_POST["Login_Name"]) && isset($_POST["Login_Password"]) && $_POST["Login_Name"] != "" && $_POST["Login_Password"] != ""){
		
		#Variablen deklarieren
		$user_name = $_POST["Login_Name"];
		$user_password = $_POST["Login_Password"];
		
		#Verbindung zur Datenbank
		$connection = mysqli_connect("mysql.lima-city.de", "Benutzername", "passwort", "db_287071_1");
		
		#Verbindung überprüfen
		if(mysqli_connect_errno()){
			echo "Datenbankverbindung fehlgeschlagen! Fehler: ".mysqli_connect_error();
			exit();
		}
		
		#mysql_injection verhindern
		$user_name = mysqli_real_escape_string($connection, $user_name);
		
		#Abfrage erstellen
		$user_exist = mysqli_query($connection, "Select user_name from tbl_user where user_name = '$user_name' and user_password = '$user_password';");
		
		#Überprüfen ob der Benutzer existiert
		if(mysqli_num_rows($user_exist)==1){
	             echo "Sie wurden einloggt!";
                }else{
                     echo "Benutzername nicht vorhanden!";	
                }
	}else{
            echo "Daten nicht vorhanden!";
        }
?>

Die abfrage und so funktioniert alles. Nun der Java Code für den Android Client:
Code:
package com.example.sc_tank;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class LoginActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.login, menu);
        return true;
    }

    public void onBtnHomeClick(View view){
        startActivity(new Intent(this, MainActivity.class));
    }
    
    public void onBtnLoginClick(View view){
        startActivity(new Intent(this, LoginActivity.class));
    }
    
    public void onBtnDataClick(View view){
        startActivity(new Intent(this, DataActivity.class));
    }
    
    public void onBtnLogonClick(View view) throws ClientProtocolException, IOException{
        EditText login_name;
        login_name = (EditText) findViewById(R.id.LoginName);
        
        EditText login_password;
        login_password = (EditText) findViewById(R.id.LoginPassword);
        
        // Post übergabeparameter mit Wert und Name erstellen
        List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
        nameValuePair.add(new BasicNameValuePair("Login_Name", login_name.toString()));
        nameValuePair.add(new BasicNameValuePair("Login_Password", login_password.toString()));

        //Http Request erstellen
        HttpParams httpParameters = new BasicHttpParams();         
        
        // Http Client erstellen
        HttpClient httpclient = new DefaultHttpClient(httpParameters);
        // Http Post erstellen
        HttpPost httppost = new HttpPost("http://www.sjay96.lima-city.de/app/Logon.php");
        //Werte für URL lesbar machen
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
        //Response erstellen
        HttpResponse response = httpclient.execute(httppost);
        //inhalt des response holen
        HttpEntity entity = response.getEntity();
        //inhalt des respons in String variable speichern
        String result = EntityUtils.toString(entity);
    }
}

Jedes Mal wenn ich nun den Button btnLogin betätige und die Funktion onBtnLogonClick ausgeführt wird, stürtz die App ab und es heisst, das die App geschlossen wurde. Wenn ich allerdings den teil mit dem response rausnehme, funktioniert es bzw die App stürtzt nicht ab.

Wäre froh um rasche Hilfe

vielen Dank
 
Zuletzt bearbeitet:
-> Nimm mal bitte deine MySQL Anmeldedaten raus bevor jemand Schindluder damit treibt

-> Stürzt ab ist immer eine sehr allgemeine Aussage -> schau doch mal bitte in dein LogCat was dort steht

... wenn ich raten sollte ... bestimmt irgendetwas wie

android.os.NetworkOnMainThreadException



-> Netzwerkzugriffe müssen seit Android 3.0 in einem extra Thread ausgeführt werden, d.h. Sie dürfen nicht mehr den GUI Thread/Main Thread ausbremsen.


Lösung Asynctask, Threads.


Für dein Vorhaben hier noch etwas Lesestoff


Android Login and Registration with PHP, MySQL and SQLite
 
Das heisst ich würde multithreading benötigen?

Ich kann sonst morgen mal den log posten und würde mich dann auf weitere lösungsvorschläge freuen.

Danke schon mal für die antwort und den hinweis mit den logindaten ;)
 
Japp, Multithreading ist gleich wieder so ein grosser Begriff - aber keine Angst.

Einfach und leicht zu verstehen ist eigentlich AsyncTask.

AsyncTask | Android Developers
Android Background Processing with Handlers and AsyncTask and Loaders - Tutorial

Bei einem AsyncTask würde man einfach alles was den Netzwerkzugriff betrifft in die doInBackground Methode packen.

Wenn du jetzt keine Lust auf den ganzen ThreadingQuatsch hast, weil du nur mal etwas "Testen" willst. Gibt es auch noch die Möglichkeit dem System zu sagen: "He Du lass mich mal auch solche Sachen im UI Thread" ausführen. Aber Achtung den StrictMode abzuschalten ist ziemlich Quick´n´Dirty und sollte wirklich nur mal in Testfällen gemacht werden und niemals in eine ProduktivApp.

Hier mal ein Link dazu ->

Let me google that for you
 
Hier mal den Log. Tatsächlich steht deine NetworkOnMainThreadExeption auch drin. Hier was passiert sobald ich den Button klicke:

10-29 19:59:33.897: E/AndroidRuntime(2846): FATAL EXCEPTION: main
10-29 19:59:33.897: E/AndroidRuntime(2846): java.lang.IllegalStateException: Could not execute method of the activity
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.view.View$1.onClick(View.java:3633)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.view.View.performClick(View.java:4240)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.view.View$PerformClick.run(View.java:17721)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.os.Handler.handleCallback(Handler.java:730)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.os.Looper.loop(Looper.java:137)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 19:59:33.897: E/AndroidRuntime(2846): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-29 19:59:33.897: E/AndroidRuntime(2846): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-29 19:59:33.897: E/AndroidRuntime(2846): at dalvik.system.NativeStart.main(Native Method)
10-29 19:59:33.897: E/AndroidRuntime(2846): Caused by: java.lang.reflect.InvocationTargetException
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.view.View$1.onClick(View.java:3628)
10-29 19:59:33.897: E/AndroidRuntime(2846): ... 11 more
10-29 19:59:33.897: E/AndroidRuntime(2846): Caused by: android.os.NetworkOnMainThreadException
10-29 19:59:33.897: E/AndroidRuntime(2846): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
10-29 19:59:33.897: E/AndroidRuntime(2846): at java.net.InetAddress.getAllByName(InetAddress.java:214)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
10-29 19:59:33.897: E/AndroidRuntime(2846): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
10-29 19:59:33.897: E/AndroidRuntime(2846): at com.example.sc_tank.LoginActivity.onBtnLogonClick(LoginActivity.java:85)
10-29 19:59:33.897: E/AndroidRuntime(2846): ... 14 more

Ich werd mir mal deine Links ein wenig ansehen und mich dann wieder melden.

Vielen Dank
 
Also ich hab mir die Links mal angesehen. In dem Login und Registrationsbeispiel kann ich aller dings kein multithreading erkennen... Er arbeitet da ja mit mehreren Methoden und mit Buffered Reader, JSON und co, was ich gar nicht benötige. Und die Datenbankverwaltung, welche er da macht, brauche ich doch auch nicht, wenn ich das alles auf dem Server mit den empfangenen Daten regle.:blink: Ich möchte nur Text an den Server senden. Dort den Text mit PHP verarbeiten und dann eine Rückgabe an das Androidgerät machen, auch wieder in Form von Text und vlt einem Boolean Wert von True oder False....

Wenn ich jetzt das AsyncTask verwende, wie soll das funktionieren. Ich kann doch nicht in die doInBackground Methode den Request reinstecken ohne das ich die Daten von der aufgerufenen Methode des onBtnLoginClick erhalte:confused2:
Oder hab ich da was falsch verstanden?

Nachdem der Button geklickt wurde, brauch ich doch nur die Daten also den Namen und das Passwort zu holen, die dann mit einer List also Schlüssel und Wert in den Post reinstecken und so an den Server senden. Anschliessend mit dem Response schauen was ich zurückerhalten habe(da in PHP alles nur echo also Strings sind, müsste dort doch dann auch ein String zurückkommen:confused2:). Diesen String kann ich ja dann verarbeiten und falls der String lautet, Sie wurden eingeloggt, setze ich eine Globale Variable auf true und kann somit immer überprüfen ob ich eingeloggt bin...
 
Also ich hab mir die Links mal angesehen. In dem Login und Registrationsbeispiel kann ich aller dings kein multithreading erkennen...
Das war als Anschauungsmaterial gedacht (da ging es um die generelle Kommunikation, Threading fehlte da noch - dafür waren die anderen Links).
Im Tutorial wird ja eine kleine JSON Api zur Kommunikation benutzt. Der Vorteil: du kannst Dir selber eine klare Response basteln und auch der Request ist eindeutig definiert.
Wenn du doch mal mehr hin und her schicken willst, kann man das beliebig erweitern. Und es wesentlich eindeutig als eine Textzeile.

Du solltest auch von dem Gedanken abkommen, deinen Benutzernamen und dein Passwort klar zu versenden, das macht man einfach nicht so, weil es unsicher ist. -> Stichwort Hash / Verschlüsselung

Für Multithreading hatte ich Dir ja den Link vom Asynctask geschickt.

Wenn ich jetzt das AsyncTask verwende, wie soll das funktionieren. Ich kann doch nicht in die doInBackground Methode den Request reinstecken ohne das ich die Daten von der aufgerufenen Methode des onBtnLoginClick erhalte:confused2:
Ein AsyncTask besteht ja aus mehreren Methoden (siehe DevAndroid).
Du musst deinem AsyncTask natürlich die Nutzerdaten als Parameter
übergeben. Der eigentlich Sendevorgang findet dann in doinBackground statt.

// ich habs jetzt nur mal fix zusammen kopiert
// das setzt sozusagen direkt bei deinem OnClick an
// LoginTask ist jetzt eine inner Klasse, du kannst das aber auch extern
in eine Datei packen

// Hinweis: du dürftest noch Fehler hinweise bekommen, weil er
die HTTP Zugriffe noch von einem try / catch abgefangen sehen möchte.


Code:
        EditText login_name;
            login_name = (EditText) findViewById(R.id.LoginName);
            
            EditText login_password;
            login_password = (EditText) findViewById(R.id.LoginPassword);
            
            String url = "http://www.sjay96.lima-city.de/app/Logon.php";
                    
          LoginTask loginTask = new LoginTask();
          loginTask.execute(url , login_name.getText().toString(), login_password.getText().toString());
        }

        private class LoginTask extends AsyncTask<String, String, Boolean> {

                private ProgressDialog mDialog;

                public LoginTask(){
                    this.mDialog = new ProgressDialog(DeineActivity.this);    // wg Context
                }

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                    
                    mDialog.setTitle("Achtung Logge mich ein");
                    mDialog.setMessage("Bitte warten - Login wird ausgeführt");
                    mDialog.show();
                }

                @Override
                protected Boolean doInBackground(String... params) {
                    
                    String url  = params[0];
                    String login_name   = params[1];
                    String login_password = params[2];                    
                    
                    // Post übergabeparameter mit Wert und Name erstellen
                    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
                    nameValuePair.add(new BasicNameValuePair("Login_Name", login_name));
                    nameValuePair.add(new BasicNameValuePair("Login_Password", login_password));

                    //Http Request erstellen
                    HttpParams httpParameters = new BasicHttpParams();         
                    
                    // Http Client erstellen
                    HttpClient httpclient = new DefaultHttpClient(httpParameters);
                    // Http Post erstellen
                    HttpPost httppost = new HttpPost(url);
                    //Werte für URL lesbar machen
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
                    //Response erstellen
                    HttpResponse response = httpclient.execute(httppost);
                    //inhalt des response holen
                    HttpEntity entity = response.getEntity();
                    //inhalt des respons in String variable speichern
                    String result = EntityUtils.toString(entity);
                    
                    // Hier Testen was zurückgekommen ist
                    // entweder true oder false zurückgeben -> erfolg / misserfolg
                    
                    
                    return true;
                }

                @Override
                protected void onPostExecute(Boolean loginerfolgt) {
                    super.onPostExecute(loginerfolgt);
                    if (mDialog.isShowing())
                        mDialog.dismiss();
                    //TODO.LoginDone(result)
                }

            }
Diesen String kann ich ja dann verarbeiten und falls der String lautet, Sie wurden eingeloggt, setze ich eine Globale Variable auf true und kann somit immer überprüfen ob ich eingeloggt bin...
So etwas speicherst du am besten in den SharedPreferences .
 
Vielen viel Dank

Hat bestens funktioniert.
Das einzige was mir nun noch nicht klappt ist, wenn ich die auswertung der Rückgabe machen will also die Variable result durch ein if laufen lasse und mir darauf hin ein Toast ausgeben will...

Ich habe es ans ende der doInBackground geschrieben. Habe anstelle des return true ein if statement gemacht und dann je nach wert true oder false zusammen mit einem toast, in dem der wert der result variable steht, zurückgeben wollen. Dies bewirkt dann allerdings wieder einen absturz.

Den Log:
10-29 23:35:31.627: E/AndroidRuntime(3001): FATAL EXCEPTION: AsyncTask #3
10-29 23:35:31.627: E/AndroidRuntime(3001): java.lang.RuntimeException: An error occured while executing doInBackground()
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.os.AsyncTask$3.done(AsyncTask.java:299)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.lang.Thread.run(Thread.java:841)
10-29 23:35:31.627: E/AndroidRuntime(3001): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.os.Handler.<init>(Handler.java:197)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.os.Handler.<init>(Handler.java:111)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.widget.Toast$TN.<init>(Toast.java:324)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.widget.Toast.<init>(Toast.java:91)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.widget.Toast.makeText(Toast.java:238)
10-29 23:35:31.627: E/AndroidRuntime(3001): at com.example.sc_tank.LoginActivity$LoginTask.doInBackground(LoginActivity.java:162)
10-29 23:35:31.627: E/AndroidRuntime(3001): at com.example.sc_tank.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1)
10-29 23:35:31.627: E/AndroidRuntime(3001): at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-29 23:35:31.627: E/AndroidRuntime(3001): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-29 23:35:31.627: E/AndroidRuntime(3001): ... 4 more
10-29 23:35:33.136: I/Choreographer(3001): Skipped 51 frames! The application may be doing too much work on its main thread.
10-29 23:35:34.097: E/WindowManager(3001): Activity com.example.sc_tank.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{416ee2f0 V.E..... R.....ID 0,0-729,324} that was originally added here
10-29 23:35:34.097: E/WindowManager(3001): android.view.WindowLeaked: Activity com.example.sc_tank.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{416ee2f0 V.E..... R.....ID 0,0-729,324} that was originally added here
10-29 23:35:34.097: E/WindowManager(3001): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345)
10-29 23:35:34.097: E/WindowManager(3001): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239)
10-29 23:35:34.097: E/WindowManager(3001): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
10-29 23:35:34.097: E/WindowManager(3001): at android.app.Dialog.show(Dialog.java:281)
10-29 23:35:34.097: E/WindowManager(3001): at com.example.sc_tank.LoginActivity$LoginTask.onPreExecute(LoginActivity.java:88)
10-29 23:35:34.097: E/WindowManager(3001): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
10-29 23:35:34.097: E/WindowManager(3001): at android.os.AsyncTask.execute(AsyncTask.java:534)
10-29 23:35:34.097: E/WindowManager(3001): at com.example.sc_tank.LoginActivity.onBtnLogonClick(LoginActivity.java:70)
10-29 23:35:34.097: E/WindowManager(3001): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 23:35:34.097: E/WindowManager(3001): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 23:35:34.097: E/WindowManager(3001): at android.view.View$1.onClick(View.java:3628)
10-29 23:35:34.097: E/WindowManager(3001): at android.view.View.performClick(View.java:4240)
10-29 23:35:34.097: E/WindowManager(3001): at android.view.View$PerformClick.run(View.java:17721)
10-29 23:35:34.097: E/WindowManager(3001): at android.os.Handler.handleCallback(Handler.java:730)
10-29 23:35:34.097: E/WindowManager(3001): at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 23:35:34.097: E/WindowManager(3001): at android.os.Looper.loop(Looper.java:137)
10-29 23:35:34.097: E/WindowManager(3001): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-29 23:35:34.097: E/WindowManager(3001): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 23:35:34.097: E/WindowManager(3001): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 23:35:34.097: E/WindowManager(3001): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-29 23:35:34.097: E/WindowManager(3001): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-29 23:35:34.097: E/WindowManager(3001): at dalvik.system.NativeStart.main(Native Method)


Mein Code am ende der doInBackground:
Code:
if(result=="Sie wurden einloggt!"){
                    Context context = getApplicationContext();
                    CharSequence output = result;
                    int duration = Toast.LENGTH_SHORT;

                    Toast toast = Toast.makeText(context, output, duration);
                    toast.show();
                    return true;
                }else{
                    Context context = getApplicationContext();
                    CharSequence output = result;
                    int duration = Toast.LENGTH_SHORT;

                    Toast toast = Toast.makeText(context, output, duration);
                    toast.show();
                    return false;
                }
Die Variable loginerfolgt enthält dann diesen true oder false Wert, habe ich das richtig verstanden, bzw gelesen?

Vielen Dank nochmal für die Hilfe:thumbsup:
Werde noch ein wenig pröbeln und mich dann wieder melden. Freue mich auf eine Rückmeldung ;)
 
Zuletzt bearbeitet:
Achtung: du kannst waehrend doingbackground nicht auf gui sachen zugreifen. Context ect pp wird fehlschlagen. So etwas gehört alles in onPostexecute.

Also Result durchreichen und dort auswerten.

Gesendet von meinem GT-I9300 mit Tapatalk
 
Ok nun hat alles geklappt.
Das selbe kann ich jetz auch im ähnlichen Stil verwenden in einer weiteren Activity oder?

Hier noch der Code der nach dem Click auf den Button ausgeführt wird:

public void onBtnLogonClick(View view) throws ClientProtocolException, IOException{
EditText login_name;
login_name = (EditText) findViewById(R.id.LoginName);

EditText login_password;
login_password = (EditText) findViewById(R.id.LoginPassword);

//String url = "http://www.sjay96.lima-city.de/app/Logon.php";
String url = "http://192.168.233.103/App/logon.php";

LoginTask loginTask = new LoginTask();
loginTask.execute(url , login_name.getText().toString(), login_password.getText().toString());
}

private class LoginTask extends AsyncTask<String, String, Boolean> {
public String result="Fehler aufgetreten";

private ProgressDialog mDialog;

public LoginTask(){
this.mDialog = new ProgressDialog(LoginActivity.this);
}

//Was kurz vor der Ausführung geschehen soll steht hier
@Override
protected void onPreExecute() {
super.onPreExecute();

mDialog.setTitle("Achtung Logge mich ein");
mDialog.setMessage("Bitte warten - Login wird ausgeführt");
mDialog.show();
}

@Override
protected Boolean doInBackground(String... params) {

//Strings in das params array einfügen
String url = params[0];
String login_name = params[1];
String login_password = params[2];

// Post übergabeparameter mit Wert und Name erstellen
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("Login_Name", login_name));
nameValuePair.add(new BasicNameValuePair("Login_Password", login_password));

//Http Request erstellen
HttpParams httpParameters = new BasicHttpParams();

// Http Client erstellen
HttpClient httpclient = new DefaultHttpClient(httpParameters);
// Http Post erstellen
HttpPost httppost = new HttpPost(url);

//Werte für URL lesbar machen
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//Response erstellen
HttpResponse response = null;
try {
response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//inhalt des response holen
HttpEntity entity = response.getEntity();

//inhalt des respons in String variable speichern

try {
result = EntityUtils.toString(entity);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// Hier Testen was zurückgekommen ist
// entweder true oder false zurückgeben -> erfolg / misserfolg
return true;
}

@Override
protected void onPostExecute(Boolean loginerfolgt) {
//Hier wird entschieden, was nach dem login passiert, falls true von doInBackground zurückkommt
if(loginerfolgt==true){
Context context = getApplicationContext();
CharSequence output = result;
int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, output, duration);
toast.show();
}else{
Context context = getApplicationContext();
CharSequence output = "Login fehlgeschlagen";
int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, output, duration);
toast.show();
}
super.onPostExecute(loginerfolgt);
if (mDialog.isShowing())
mDialog.dismiss();
//TODO.LoginDone(result)
}

}

Vielen tausend Dank an killphil75, dass du mir so toll geholfen hast. Warst eine super Hilfe und habe nun alles verstanden.:thumbup:
 
Ok nun hat alles geklappt.
Das selbe kann ich jetz auch im ähnlichen Stil verwenden in einer weiteren Activity oder?

Ja auf jeden Fall.

Vielen tausend Dank an killphil75, dass du mir so toll geholfen hast. Warst eine super Hilfe und habe nun alles verstanden.:thumbup:

Büdde, büdde
 
Zurück
Oben Unten