Test Datenbank Android Studio und mit Xampp localhost

  • Antworten:14
Okoca
  • Forum-Beiträge: 13

15.09.2017, 11:42:08 via Website

Hallo
ich bin neu hier und entschuldige mich falls ich das hier falsch poste
ich möchte eine App mit einer Login funktion programmieren und kann leider nicht auf meine localhost zugreiffen... Ich habe verschiedene lösungsversuche durchgeführt aber leider ohne erfolg...Das Php Script funktioniert aber der Zugriff vom Emulator irgendwie nicht ich habe auch hierzu die Ip adresse geändert aber leider ohne erfolg es holt sich keine Daten aus der localhost Datenbank.
kann mir da jemand weiterhelfen

Mit freundlichen Grüßen
Okoca

— geändert am 15.09.2017, 11:46:55

Antworten
swa00
  • Forum-Beiträge: 3.704

15.09.2017, 11:51:48 via Website

Hallo Okoca,

willkommen im Forum.

a) Was hast du denn schon versucht ? (auf beiden seiten).
b) Woran hapert es ?
c) Poste mal den Java Code , der dich zur Verzweiflung bringt

Ohne diese Infos können wir schlecht helfen.

Liebe Grüße - Stefan
[ App - Entwicklung ]

OkocaPascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.09.2017, 12:17:11 via App

Hallo Okoca,
Herzlich willkommen hier im Forum :)
ich habe deinen Thread mal in den passenden Bereich verschoben :)



hast du sichergestellt, dass du vom Emulator auch zugiff auf deinen localhost hast? Kann sein dass dieser eine spezielle virtuelle Netzwerkkarte o.ä. nutzt und du nur ins inet aber nicht in dein lokales Netzt kommst.
Kannst du im Emulator Browser ins Internet und/oder deinen Xampp Hauptseite aufrufen?
Ansonsten immer das eigene Gerät per USB ran und darauf Test, damit sollte es dann gehen.

— geändert am 15.09.2017, 12:18:53

LG Pascal //It's not a bug, it's a feature. :) ;)

Okocaswa00

Antworten
swa00
  • Forum-Beiträge: 3.704

15.09.2017, 12:29:40 via Website

@Pascal

hast du sichergestellt, dass du vom Emulator auch zugiff auf deinen localhost hast?

Habs eben mal ausprobiert (Emulator) , Standardmässig geht das nicht.
Ich denke, man muss dazu die apache Conf auf externen Zugriff ändern - bin mir aber nicht sicher

— geändert am 15.09.2017, 12:30:04

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Okoca
  • Forum-Beiträge: 13

15.09.2017, 12:30:40 via Website

imageimageimage

vom Browser des Emulators kann ich localhost aufrufen aber die app holt mir die Daten nicht
ps. find es super und danke dir für deine Mühen

Antworten
Okoca
  • Forum-Beiträge: 13

15.09.2017, 12:31:05 via Website

Ok danke probiere es mal mit dem Gerät

Antworten
swa00
  • Forum-Beiträge: 3.704

15.09.2017, 12:35:02 via Website

Hallo Okoca,

Bitte keine Screenshots , denn mit dem bisschen Source können wir schlecht erkennen , was
du wirklich da machts :-) . Es gibt hier den Code Tag

OT @Pascal:

Bitte übernehme jetzt du - ich bin jetzt ca. 14 Tage ausser Lande .. Man liest sich

Liebe Grüße - Stefan
[ App - Entwicklung ]

Okoca

Antworten
Okoca
  • Forum-Beiträge: 13

18.09.2017, 08:45:58 via Website

Die Php Datei liegt auf dem Server.
Habe mir eine Test Datenbank mit php Myadmin in Netz erstellt.
Der Php Script funktioniert es zeigt mir die Einträge in der Datenbank.
Der Code hier sollte sich die Daten aus der Datenbank nehmen und im Android Endgerät in einer SQLite Datenbank wieder geben.

package com.example.okoca.server;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity2 extends AppCompatActivity {

SQLiteDatabase sqLiteDatabase;

Button SaveButtonInSQLite, ShowSQLiteDataInListView;

String HttpJSonURL = "...........subjectfullform.php";

ProgressDialog progressDialog;

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

    SaveButtonInSQLite = (Button)findViewById(R.id.button);

    ShowSQLiteDataInListView = (Button)findViewById(R.id.button2);

    SaveButtonInSQLite.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            SQLiteDataBaseBuild();

            SQLiteTableBuild();

            DeletePreviousData();

            new StoreJSonDataInToSQLiteClass(MainActivity2.this).execute();

        }
    });

    ShowSQLiteDataInListView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(MainActivity2.this, ShowDataActivity.class);
            startActivity(intent);

        }
    });


}

private class StoreJSonDataInToSQLiteClass extends AsyncTask<Void, Void, Void> {

    public Context context;

    String FinalJSonResult;

    public StoreJSonDataInToSQLiteClass(Context context) {

        this.context = context;
    }

    @Override
    protected void onPreExecute() {

        super.onPreExecute();

        progressDialog = new ProgressDialog(MainActivity2.this);
        progressDialog.setTitle("LOADING");
        progressDialog.setMessage("Please Wait");
        progressDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {

        HttpServiceClass httpServiceClass = new HttpServiceClass(HttpJSonURL);

        try {
            httpServiceClass.ExecutePostRequest();

            if (httpServiceClass.getResponseCode() == 200) {

                FinalJSonResult = httpServiceClass.getResponse();

                if (FinalJSonResult != null) {

                    JSONArray jsonArray = null;
                    try {

                        jsonArray = new JSONArray(FinalJSonResult);
                        JSONObject jsonObject;

                        for (int i = 0; i < jsonArray.length(); i++) {

                            jsonObject = jsonArray.getJSONObject(i);

                            String tempSubjectName = jsonObject.getString("SubjectName");

                            String tempSubjectFullForm = jsonObject.getString("SubjectFullForm");

                            String SQLiteDataBaseQueryHolder = "INSERT INTO "+ SQLiteHelper2.TABLE_NAME+
                                    " (SubjectName,SubjectFullForm) VALUES('"+tempSubjectName+"', '"+tempSubjectFullForm+"');";

                            sqLiteDatabase.execSQL(SQLiteDataBaseQueryHolder);

                        }
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            } else {

                Toast.makeText(context, httpServiceClass.getErrorMessage(), Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result)

    {
        sqLiteDatabase.close();

        progressDialog.dismiss();

        Toast.makeText(MainActivity2.this,"Load Done", Toast.LENGTH_LONG).show();

    }
}


public void SQLiteDataBaseBuild(){

    sqLiteDatabase = openOrCreateDatabase(SQLiteHelper2.DATABASE_NAME, Context.MODE_PRIVATE, null);

}

public void SQLiteTableBuild(){

    sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "+ SQLiteHelper2.TABLE_NAME+"("+ SQLiteHelper2.Table_Column_ID+
            " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "+ SQLiteHelper2.Table_Column_1_Subject_Name+
            " VARCHAR, "+ SQLiteHelper2.Table_Column_2_SubjectFullForm+" VARCHAR);");

}

public void DeletePreviousData(){

    sqLiteDatabase.execSQL("DELETE FROM "+ SQLiteHelper2.TABLE_NAME+"");

}

}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.09.2017, 09:50:09 via Website

Hast du jezt mal getestet, ob du von deinem Gerät zugiff auf den XAMPP bekommst, wenn nein, dann musst du erst dafür sorgen, dass du die JSON im Browser aufrufen kannst, erst dann liegt der Fehler im Code.

Zudem: Bitte immer genau beschreiben, was passiert (wann/wie/wo) etc. sonst wird die Fehlersuche immer schwierig

LG Pascal //It's not a bug, it's a feature. :) ;)

Okoca

Antworten
Okoca
  • Forum-Beiträge: 13

18.09.2017, 10:07:55 via Website

Über das Gerät habe ich kein zugriff auf die Datenbank das Script funktioniert auf dem Server ` include 'DatabaseConfig.php';

// Create connection
$conn = new mysqli($HostName, $HostUser, $HostPass, $DatabaseName);

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);
} else {echo "Verbindung zur Datenbank erfolgreich
";}

$sql = "SELECT * FROM 'subjectfullformtable'";

$result = $conn->query($sql);

if ($result->num_rows >0) {

while($row = $result->fetch_assoc()) {

$tem[] = $row;
$json = json_encode($tem);}
}else { echo "No Results Found.";}

echo $json;
$conn->close();
?>
Ich weiss jetzt nicht warum die Daten in der Datenbank nicht auf dem Android gerät angezeigt wird. Das ist der Code für den Listview
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
* Created by okoca on 05.09.2017.
*/

public class SQLiteHelper2 extends SQLiteOpenHelper {

static String DATABASE_NAME="SubjectDataBase";

public static final String TABLE_NAME="subjectfullformtable";

public static final String Table_Column_ID="id";

public static final String Table_Column_1_Subject_Name="subjectName";

public static final String Table_Column_2_SubjectFullForm="subjectFullForm";



public SQLiteHelper2(Context context) {

    super(context, DATABASE_NAME, null, 1);

}

@Override
public void onCreate(SQLiteDatabase database) {

    String CREATE_TABLE="CREATE TABLE IF NOT EXISTS "+TABLE_NAME+" ("+Table_Column_ID+" INTEGER PRIMARY KEY, "+Table_Column_1_Subject_Name+" VARCHAR, "+Table_Column_2_SubjectFullForm+" VARCHAR)";
    database.execSQL(CREATE_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
    onCreate(db);

}

}
`ich habe mir im Internet einige beispiele dazu angeguckt komme aber irgendwie nicht dahinter warum es die daten aus der Datenbank nicht liest erst hatte ich xammp benutzt da ich aber kein zugriff vom Emulator als auch vom gerät hatte habe ich das Script samt der Datenbank Online erstellt doch das Problem besteht immer noch und ich kann keine Daten aus der Datenabnk in einer SQLite Datenbank am Android Endgerät anzeigen lassen.
Dazu muss ich sagen das ich recht neu bin was Android und Java betrifft habe vor kurzem meine Umschulung zum AEler gemacht wo ich leider so gut wie garnicht Java hatte.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.09.2017, 10:27:39 via Website

Wenn du dir sicher bist, dass du vom Gerät jetzt zugriff aus PHP bekommst:

  • Was sagt LogCat?
  • Hast du LogMeldungen eingebaut? (Log.d(..))
  • Dafür dass du neu in Android bist, hast du schon recht viel Code darin, welches Tut hast du dir angeschaut?

Vielleicht solltest du die Sache sichritt für schritt angehen:
1. Daten laden - überprüfüfen, schauen dass Daten als JSON ankommen
2. Daten parsen: Json parser nehmen und Daten aus Json lesen
3. Daten nehmen und in SQLite schreiben

Bitte gehe diese schritte einzeln an, dann bist du am Ende sicher, wo es scheitert. Probleme immer versuchen zu "zerlegen" und in einzelnen Codeabschnitten zu suchen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Okoca

Antworten
Okoca
  • Forum-Beiträge: 13

18.09.2017, 10:53:18 via Website

Danke für die schnelle Antwort also neu heisst bin seit einem Monat mit Android beschäftigt und versuche anhand von Beispielen mich langsam in das Thema Android App einzusteigen.
Nach erfolgreicher abarbeitung und fehleranalyse hoffe ich mal mich positiv zu melden

Antworten
Okoca
  • Forum-Beiträge: 13

20.09.2017, 08:44:01 via Website

Guten Morgen ,

ich habe ne kurze Verständnis Frage und zwar habe ich es so verstanden das ich mit der App das PhP Script als adresse angegeben werden muss oder soll. Habe ich das falsch verstanden ?

Antworten
Okoca
  • Forum-Beiträge: 13

20.09.2017, 12:49:11 via Website

Guten Tag nach tage langer suche bin ich endlich zur lösung gekommen. Es hört sich zwar wenn man es gefunden hat sehr einfach an aber erstmal darauf zu kommen.
Mann musste lediglich der App expiziet bei der Angabe der URL die Funktion vorgeben und nicht nur das Script als Pfad eingeben z.B. bei einem Login muss man beim URL nicht Login.php aufrufen sondern Ihm schon sagen was genau gemacht werden soll. Beispiel "localhost/Login.php?username="+username+"& password="+password; und dann funktioniert es
und macht es wieder spass

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

20.09.2017, 14:27:51 via Website

Kommt darauf an wie dein PHP programmiert ist, wenn es die Login Daten als GET Parameter haben will, muss man die Url natürlich entsprechend anpassen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Okoca

Antworten