auf MySQL aus app zugreifen

R

renpen

Neues Mitglied
0
Hey ho,
zuerst sei gesagt, das ich zwar ganz gut mit der Sprache Java vertraut bin, dies aber meine erste "richtige" android app ist. Nen Freund hatte einfach ne gute Idee.

Bei der Umsetzung hapert es aber etwas. Genauer daran das ich Daten aus einer mySQL Datenbank auslesen und schreiben muss, aus der app heraus. Nunja, hab ich mir heute etliche MySQL -Tutorials verinnerlicht und hatte alles soweit fertig,alle klappte wunderbar ! Nur um dann zu merken dass anscheinend der JDBC-Treiber mit der ich auf meine mySQL datenbank zugegriffen habe nicht auf android funtioniert, warum auch immer . Er schmeißt immer eine classNotFoundExeption. Durch googlen habe ich dann erfahren das android mit dem treiber halt nicht klar kommt.

Ich habe beim googlen etwas mit einer Rest-API und php gelesen, könnte mir das einer erklären wie das gehen soll ? So wie ich das verstanden habe würde der SQL befehl von der APP an die website mit dem php-skript gehen und von da aus dann an die Datenbank. Geht das nicht auf lasten der perfomance ?

Wie greife ich sonst auf meine Datenbank im Web zu ? Gibs da etwas android internes was mir das ermöglicht, worauf ich noch nicht gestossen bin ?

--edit
Habe mir das mit PHP nochmal weiter angesehen, was mich daran vorallem zurückschreckt ist das ich ja dann für jede unterschiedliche Anweisung ein extra PHP-Skript brauche ?!
 
Zuletzt bearbeitet:
Hallo renpen,

ein Webservice als Schnittstelle zu einer online liegenden Datenbank ist in der heutigen Zeit unumgänglich.
Ein Webservice auf PHP oder Nodejs-Basis ist sehr kleingewichtig und kann eine große Anzahl von Requests bearbeiten.

Du könntest auch eine Schnittstelle schreiben, in dem der Code, den du übergibst direkt ausgeführt wird, aber das ist überhaupt nicht sicher, deswegen wird auch empfohlen für jeden gesonderten Fall einen speziellen Request zu schicken.
 
Du schreibst einfach ne kleine PHP-Datei die dann z.B. per GET die Parameter erhält. z.B. https://example.com/mysql.php?action=getUser&number=0123456789

Diese PHP-Datei gibt Dir dann mit z.B. JSON oder XML das zurück, was Du wissen möchtest, indem sie den jeweiligen MYSQL-Request ausführt:

Code:
$query = "SELECT * FROM `user` WHERE `number` = \"" . mysql_real_escape_string($_GET['number']) . "\""

Gerne schicke ich Dir auch mal ein Beispiel wie so etwas komplett aussehen kann, falls Du immer noch nicht weiter weißt.

Grüße und viel Erfolg,
L4E
 
  • Danke
Reaktionen: renpen
sooo, ok, hab mir was mit php gebastelt. Funtioniert nicht, nachdem ich gegoogelt habe kam dann die erkenntis das ich den Datenbankconnect in einen anderen Thread auslagern muss. xD, eine Lösung, zwei neue Fragen ;DD

bekomme das mit dem Tread nicht so ganz hin, mein Code sieht nun so aus:

PHP:
public class DataBaseConnectorAsync extends AsyncTask<Void, Void, String> {  

    InputStream is;
    ArrayList<String> results = new ArrayList<String>();
    JSONObject json_data;


@Override
protected String doInBackground(Void... noargs) {
    return doLongAndComplicatedTask();
}
@Override
protected void onPostExecute(ArrayList<String> result) {

}

public void verbindungAufbauen()
{
    String result = "";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        
        try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://192.168.2.101/ordner/index.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        }catch(Exception e){
        Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
        }
        
        
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
                }
        
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                json_data = jArray.getJSONObject(i);
                results.add((String) json_data.get("id") + " "+ json_data.get("name"));
                }
            
                }
                catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
                }
                
}
LongAndComplicatedTask longTask = new LongAndComplicatedTask(); // eine Instance erzeugen
longTask.execute(); // starten

}
Folgende Anleitung hab ich benutzt/kopiert (für den asynchTask)
Die Ausführung der Aufgaben im Hintergrund

Das Problem, fürs erste, liegt nun in den beiden Zeilen mit dem @override, die Funktion der beiden Methoden entzieht sich vollständig meiner Kenntnis, auch die Doku brachte mich irgenwie nicht weiter. Änder ich den Code der ersten Zeile in folgendes ab:
PHP:
protected ArrayList<String> doInBackground(Void... params) {
    return verbindungAufbauen();
}
und lasse mir dann von der methode verbindungAufbauen die geforderte ArrayList zurückgeben, so sagt eclipse mir : The return type is incompatible with AsyncTask<Void,Void,String>.doInBackground(Void[]). Nur leider weiß ich jetzt nicht weiter wie ich das entsprechend für meine Zwecke umbaue!
 
Zuletzt bearbeitet:
1. Frage: Was gibt Deine PHP-Datei zurück? JSON, XML, ... EDIT: Wer lesen kann ist klar im Vorteil
2. Frage: Willst Du dem Benutzer anzeigen, dass Deine App gerade etwas herunterlädt und er/sie ein wenig warten soĺl, oder soll die ganze Aktion im Hintergrund geschehen?

Der AsyncTask ist dafür da, dass nicht Deine komplette App hängt, bis der Download abgeschlossen ist. Bei größeren Daten kann dies ja etwas länger dauern.

Im AsyncTask gibt es vier Methoden, die zum Benutzen Überschrieben (Override) werden müssen. Dieses Stichwort heißt nur, dass man nicht die Methode der "Vaterklasse" benutzen möchte, sondern eine eigene. Angenommen, Du möchtest während des Fahrens blinken, dann soll Dein Auto auch nicht komplett einfrieren, also benötigst Du einen AsyncTask. In der Methode blinken() der Klasse Auto wird aber nur entweder rechts oder links geblinkt. Angenommen, Du möchtest während des Blinkens noch im Takt hupen, musst Du die Methode "blinken()" der Klasse "Auto" überschreiben und dann in der Methode so programmieren, dass er einerseits blinkt, aber auch hupt.

So viel dazu.

Die vier Hauptmethoden sind:
onPreExecute ==> Diese Methode wird vor der eigentlichen Aktion aufgerufen. Sinn: Z.B. Anzeigen eines Wartedialogs.
doInBackground ==> Hier kommt die eigentliche Aktion hinein, also der Internetaufruf
onProgressUpdate ==> Hier kommt, falls es eine große Datei ist, der Updatecode rein, dass man z.B. jetzt bei 25% ist, also ein Update des Wartedialogs
onPostExecute ==> Diese Methode wird nach der langen Aktion aufgerufen. Sinn: Z.B. das Schließen des Wartedialogs.

Die AsyncTask-Klasse sieht so aus:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long>

In den eckigen Klammern steht:
1. Was ich dem AsyncTask mitgeben möchte für den Start
2. Wie das onProgressUpdate aussieht
3. Was doInBackground zurückgibt und damit onPostExecute erhält.

In doInBackground darf nicht auf die GUI zugegriffen werden, dafür sind die drei anderen Methoden da.

So sieht z.B. ein klassischer AsyncTask aus:
PHP:
public class GetResultFromUrl extends AsyncTask<String, Void, String>
{
    @Override
    protected void onPreExecute()
    {
      // ProgressDialog anzeigen  
    }
    
    @Override
    protected String doInBackground(String... params)
    {
        String result = "";
        // ganz lange Aktion

        return result;
    }
    
    @Override
    protected void onPostExecute(String result)
    {
        super.onPostExecute(result);
        
        //Die Daten von result verarbeiten und Progressdialog schließen
    }
}
Falls man jetzt aber die Daten nicht im AsyncTask verarbeiten möchte, kann man ein Interface erstellen, was die Activity benachrichtigt, wenn der AsyncTask beendet ist. Dafür gibt es hier android asynctask sending callbacks to ui - Stack Overflow ein ganz gutes Beispiel. Der Aufruf sähe dann so aus:
PHP:
YourTask task = new YourTask((onTaskCompleted) this);
task.execute();
So long,
Freddy

PS: Falls noch Fragen sind, einfach Fragen

EDIT; Die Instanz kannst Du Dir sparen, die ist unnötig. Packe einfach alles in die doInBackground-Methode hinein.

EDIT2:

So würde ich es machen:
AsyncTask:
PHP:
public class DataBaseConnectorAsync extends AsyncTask<Void, Void, String>
{  
    InputStream is;
    ArrayList<String> results = new ArrayList<String>();
    JSONObject json_data;
    private TaskCompletedInterface mCallback;
    
    public DataBaseConnectorAsync(Context context)
    {
        this.mCallback = (TaskCompletedInterface) context;
    }
    
    @Override
    protected String doInBackground(Void... noargs)
    {
        String result = "";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        
        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://192.168.2.101/ordner/index.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }
        catch(Exception e)
        {
            Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
        }
        
        try
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "n");
            }
            is.close();
            result=sb.toString();
        }
        catch(Exception e)
        {
            Log.e("log_tag", "Error converting result "+e.toString());
        }
        
        return result;
    }
    
    @Override
    protected void onPostExecute(String result)
    {
        mCallback.onTaskComplete(result);
    }
}
Interface (TaskCompletedInterface.java)
PHP:
public interface TaskCompletedInterface
{
    public void onTaskComplete(String result);
}
Deine Acivity:
PHP:
blabla extends Activity implements onTaskComplete

@Override
public void onTaskComplete(String result)
{
    try
    {
        JSONArray jArray = new JSONArray(result);
        for(int i=0;i<jArray.length();i++)
        {
            json_data = jArray.getJSONObject(i);
            results.add((String) json_data.get("id") + " "+ json_data.get("name"));
        }
    }
    catch(JSONException e)
    {
        Log.e("log_tag", "Error parsing data "+e.toString());
    }
}
EDIT3: Vorsicht wenn Du mit Fragmenten arbeitest und den AsyncTask aus dem Fragment aufrufst. Dann musst Du nicht bei der Activity implements hinschreiben, sondern bei der Fragmente-Klasse. Und Aufruf dann so: DataBaseConnectorAsync task = new DataBaseConnectorAsync(this); task.execute();
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: renpen
Wow, Danke für deine schnelle und ausführliche Antwort, auch dass du das erklärst und mir nicht einfach die Lösung vorgibst :thumbup:. Jetzt ist das ganze schon klarer und eclipse meckert auch nicht mehr.

Dennoch bekomme ich beim starten des Programms nachwievor die Fehlermeldung "Fehler bei der http Verbindung android.os.NetworkOnMainThreadException"
Ich denke das hat damit zu tun wie ich den Thread starte oder eben auch nicht ;D.
Schau mal:
DatenbankConnector:
PHP:
public class DataBaseConnectorAsync extends AsyncTask<Void, Void , ArrayList> {  

    InputStream is;
    ArrayList<String> results = new ArrayList<String>();
    JSONObject json_data;



protected ArrayList<String> doInBackground(Void... params) {
    return verbindungAufbauen();
}


protected void onPostExecute(ArrayList<String> result) {
    
    // TODO
   
}

public ArrayList<String> verbindungAufbauen()
{
    String result = "";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        
        try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://192.168.2.101/Ordner/index.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        }catch(Exception e){
        Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
        }
        
        
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
                }
        
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                json_data = jArray.getJSONObject(i);
                results.add((String) json_data.get("id") + " "+ json_data.get("name"));
                }
            
                }
                catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
                }

        return results;
}


}
auschnit aus der activity von wo aus ich auf die Daten zugreifen möchte:
PHP:
ArrayList<String> data =new ArrayList<String>();
DataBaseConnectorAsync dbc = new DataBaseConnectorAsync();            
        data =    dbc.doInBackground();
zur komplettierung poste ich auch mal mein php-skript:
PHP:
<?php
mysql_connect("localhost","root","123qwe");
mysql_select_db("user");

$q=mysql_query("SELECT * FROM userName");
while($e=mysql_fetch_assoc($q))
 $output[]=$e;

print(json_encode($output));

mysql_close();
?>
Edit1:
YEAHHH, GIDF ;DD
es muss dbc.execute() heißen . ;D

ok, nächste Fehlermeldung, (wir kommen voran ;D):
Error parsing data org.json.JSONException: Value n<html>n<head>nn< of type java.lang.String cannot be converted to JSONArray

hört sich für mich für mich so an als wenn da irgentwas bei der Konvertierung in ein JSONArray schief läuft ?!
Leider steht auch nicht die Zeile oder so dabei, sodass ich keinen Anhaltspunkt habe wo der Fehler liegen könnte .
 
Zuletzt bearbeitet:
Jep, da läuft sehr wahrscheinlich was schief. Gibt mal das result über Log.d("RESULT", result); bevor Du versuchst es zu parsen. So kannst Du überprüfen, ob wirklich echtes JSON vom Server zurückgegeben wird. Das Ergebnis müsste folgenden Aufbau (so ähnlich) haben:
Code:
{   "Herausgeber": "Xema",   "Nummer": "1234-5678-9012-3456",   "Deckung": 2e+6,   "Währung": "EURO",   "Inhaber": {     "Name": "Mustermann",     "Vorname": "Max",     "männlich": true,     "Hobbys": [ "Reiten", "Golfen", "Lesen" ],     "Alter": 42,     "Kinder": [],     "Partner": null   } 
}

Es kann auch alles in einer Zeile stehen. Tipp: Damit der Server das JSON richtig zurückliefert, kann man folgenden PHP-Header mitsenden:
PHP:
header('Content-type: application/json; charset=utf-8');
 
  • Danke
Reaktionen: renpen
ok, das wird dann ausgegeben:

n<html>n<head>nn</head>n<body>n<br />n<b>Warning</b>: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in <b>F:\XAMPP\htdocs\Ordner\index.php</b> on line <b>12</b><br />n<br />n<b>Notice</b>: Undefined variable: output in <b>F:\XAMPP\htdocs\Ordner\index.php</b> on line <b>15</b><br />nnulln</body>n</html>n

sieht irgenwie wie html-code aus ?!
haha, skurril ;D

EDIT1:

Wenn ich das Php-Skript aus dem Browser aufrufe kommt folgendes:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in F:\XAMPP\htdocs\Ordner\index.php on line 12

Notice: Undefined variable: output in F:\XAMPP\htdocs\Ordner\index.php on line 15
null

Ich weißt nicht ob das wichtig ist, scheint aber dem sehr nahe zu kommen was als Result ausgegeben wird .
 
Zuletzt bearbeitet:
Jep, und da hast Du Dein Problem:
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given
heißt, dass Dein Query fehlschlägt. Schreib mal dahinter (vor dem Semikolon)

PHP:
or die(mysql_error());
Also insgesamt so:
PHP:
$q=mysql_query("SELECT * FROM `userName`") or die(mysql_error());
Dann erhältst Du den mysql-Fehler

EDIT: Sorry, der Datenbankname muss natürlich userName sein, ich habe es nur mit meiner Datenbank getestet :D
 
  • Danke
Reaktionen: renpen
Das sieht so aus, als würdest du ein html-Dokument parsen.

Wenn du noch Zeit und Lust, stelle deine Webverbindung nach HttpUrlConnection um. HttpClient wird seit Android 2.3 nicht mehr gepflegt. Es ist deshalb langsamer, und hat bei TSL Lücken.

Android’s HTTP Clients | Android Developers Blog
 
  • Danke
Reaktionen: renpen
Zu Deinem (@renpen) Edit: Dein Query ist irgendwo fehlerhaft. Ich tippe darauf, dass es entweder die Tabelle nicht gibt oder bei dem Tabellename die `` fehlen (also neben dem ß die Taste mit Umschalt). Dadurch wird die while-Schleife übersprungen und somit die Variable $output nicht initialisiert. Wenn Du diese Hinweise in Zukunft unterdrücken möchtest, damit die App bei solchen Fehlern nicht abstürzt (was ich aber aktuell noch nicht machen würde, weil es ja überhaupt nicht tut :D), setze ein @ vor mysql_fetch_assoc und initialisiere vor der while-Schleife $output mit $output = array();
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: renpen
Yeahhh, läuft, Fehlermeldung war No database selected :lol:

Hatte eine Tabelle angegeben und nicht die Datenbank:rolleyes2:

bekomme jetzt auch keine Fehler mehr, läuft alles.

weitere Frage zu onPreExecute:

PHP:
//protected void onPreExecute() {
//
//    prog = new ProgressDialog(null);
//    // prog.setTitle("Titel");
//    prog.setMessage("Downloading data...");
//    prog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//    prog.show();
//    }
was kommt da rein wo null ist, da soll ein Context rein. Das hilft mir jedoch relativ wenig, wenn ich meine aktuelle main_activity reinschreibe, also die activity wo es angezeigt werden soll , zeigt eclipse :
main_activity cannot be resolved to a variable

Bei den Beipielen im netz steht da meisten activity oder ähnliches drin ....

EDIT1:
@markus.tullius,
ok, werde ich mir mal anschauen ;D
https://www.android-hilfe.de/members/markus-tullius-282161.html
 
Du musst dem Aufruf von Deinem AsyncTask dann den Context mitgeben:

DataBaseConnectorAsync task = new DataBaseConnectorAsync(this);
task.execute();

Und dann ein sog. Konstruktor basteln:

public class DataBaseConnectorAsync extends AsyncTask<Void, Void , ArrayList> {
public
DataBaseConnectorAsync(Context context)
{
this.context = context;
}

Und context halt dann als globale Variable im AsyncTask, also wie auch die Arraylist, etc.

Statt null dann einfach context mitgeben
 
  • Danke
Reaktionen: renpen
Oha, da hätte ich auch selber drauf kommen müssen , ich glaub ich seh den Wald vor lauter Bäumen nicht mehr ;DDD .

2. Probleme noch und dann ist Feierabend ;D


1.
wenn ich folgendes
PHP:
protected void onPostExecute(ArrayList<String> result) {
    
     prog.setTitle("Finish Loading. . ."); 
     prog.dismiss();


}
machen will, macht er es einfach nicht, obwohl das doch eigentlich automatisch nachdem der task fertig ist ausgeführt werden sollte oder ?

2.
hab versucht die http-verbindung auf httpurlconnection umzustellen, sieht deutlich schlanker aus, aber wenn ich das tue kommt folgender Fehler:

Error converting result java.io.IOException: BufferedInputStream is closed

Der fehler liegt irgentwo hier, jedoch verstehe ich ihn nicht, da ich ja bis auf die Verbindung nichts verändert habe....
PHP:
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
                }
        Log.d("RESULT",result);

und der gesamte code :
PHP:
public ArrayList<String> verbindungAufbauen() throws IOException
{
    String result = "";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        
//        try{
//        HttpClient httpclient = new DefaultHttpClient();
//        HttpPost httppost = new HttpPost("http://192.168.2.101/Ordner/index.php");
//        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//        HttpResponse response = httpclient.execute(httppost);
//        HttpEntity entity = response.getEntity();
//        is = entity.getContent();
//        }catch(Exception e){
//        Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
//        }
        
         URL url = new URL("http://192.168.2.101/Ordner/index.php");
           HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
           try {
              is = new BufferedInputStream(urlConnection.getInputStream());
           }
            finally {
             urlConnection.disconnect();
           }
         
        
        
        try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
                }
        Log.d("RESULT",result);
        
        try{
                JSONArray jArray = new JSONArray(result);
                for(int i=0;i<jArray.length();i++){
                json_data = jArray.getJSONObject(i);
            results.add((String) json_data.get("id") + " "+ json_data.get("userName"));
                }
            
                }
                catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
                }

        return results;
}
 
Da bin ich ehrlich gesagt überfragt. Überprüfe mal mit einem Log.d ob die Methode ausgeführt wird.
 
habe ich bereits, das ist es ja, sie wird nicht ausgeführt....
 
Hast Du das @Override da?
 
ups, wusst nicht das dass wichtig ist, hab gedacht das ist so eine Gedankenstütze von eclipse das man nicht vergisst es zu redifinieren. wenn ich es hinschreibe kommt

The method onPostExecute(ArrayList<String>) of type DataBaseConnectorAsync must override or implement a supertype method

als eclipse syntaxfehler
 
Du musst auch oben angeben
ArrayList<String> und nicht ArrayList, also beim Asynctask
 
  • Danke
Reaktionen: renpen
supi, funktioniert ;D

weißt du auch noch einen Rat zu der Fehlermeldung wenn ich die HTTP-Verbindung von Http-client auf HttpUrlConnection umbaue ?
siehe oben ^^.
 

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
B
Antworten
4
Aufrufe
430
bb321
B
Zurück
Oben Unten