Volley GET-Abfrage bringt Error Meldung

  • Antworten:8
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 7

28.07.2017, 21:33:59 via Website

hi, ich arbeite an einer Preisabfrage app welche über die Volley lib eine GET abfrage auf ein php File macht (name.php, price.php).

name.php :

<?php
parse_str($_SERVER['QUERY_STRING']);

$addr = gethostbyname("10.120.43.1");

$client = stream_socket_client("tcp://$addr:2001", $errno, $errorMessage);

if ($client === false) {
    throw new UnexpectedValueException("Failed to connect: $errorMessage");
}

fwrite($client, "GET / HTTP/$artikelnr\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
echo stream_get_contents($client);
fclose($client)
?>

(price.php hat den gleiche aufbau)

das problem ist dass wenn ich Bei der Android app die abfrage ausführe kommt ein com.andoid.volley.servererror

wenn ich aber auf das testfile über volley zugreife funktioniert das super:

test.php:

<?php
$arr = array('' => "test");

echo json_encode($arr);
?>

Mei AndroidCode der Abfrage:

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
                            final String url = "[URL]preis.php?artikelnr=" + eanartikel;

                            JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, url, null,
                                    new Response.Listener<JSONObject>()
                                    {
                                        @Override
                                        public void onResponse(JSONObject response) {
                                            req_preis = (TextView) findViewById(R.id.preis);
                                            req_preis.setText("Preis: " + response.toString().replace("\"", "").replace(":", "").replace("{", "").replace("}", "") + " €");
                                        }
                                    },
                                    new Response.ErrorListener()
                                    {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {

                                            req_preis = (TextView) findViewById(R.id.preis);
                                            req_preis.setText(error.toString());
                                        }
                                    }
                            );

Ich habe mich für eine GET Abfrage entschieden da ich bei dieser bessere ergebnisse erzielt habe als bei einer direkten Socket Verbindung. Ich habe die Beispiele für eine Socketverbindung nicht verstanden.
Kurz und knapp: Ich möchte von der Android app einen String zu einem Socket Server senden und den String den der Server ausgibt auslesen und weiterverarbeiten. Dies habe ich nur durch die GET Abfrage zu dem php file und von dem php file dann zum Socket geschaft. Sollte jemand ein gutes und einfaches Beispiel für eine direkte Verbindung haben bin ich gerne offen dafür ;D.
Normalerweise arbeite ich nicht an Andoid apps, also entschuldigt falls es ne idiotische frage ist ;D

lg und vielen Dank im Voraus :)

— geändert am 28.07.2017, 21:37:02 durch Moderator

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.07.2017, 21:37:01 via App

Hallo Leopold!
Herzlich Willkommen hier bei uns im Forum. :)
Ich habe deinen Threadtitel mal angepasst.
Bitte achte beim nächsten Thread auf einen aussagekräftigeren Titel.
Danke :)



Was ist denn die genaue Meldung nach LogCat?

— geändert am 28.07.2017, 21:39:10

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

Leopold Pöchinger

Antworten
  • Forum-Beiträge: 7

28.07.2017, 21:59:14 via Website

Danke für den Tipp der LogCat hat ergeben dass es sich um einen 404 Error handelte -> Tippfehler im namen des php files.

ein anderes Problem betrifft eher php . PHP kommuniziert nur dann erfolgreich wenn der string der zu dem server geschickt wird volgender maßen aussieht : "GET / HTTP/$artikelnr\r\nHost: www.example.com\r\nAccept: /\r\n\r\n" besteht der string nur aus "$artikelnr" dann stürzt der server entweder ab oder es passiert nichts.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.07.2017, 22:03:12 via App

Was soll denn dein PHP machen? So wie es jetzt ist, ist das 1. falsch und 2. wenn es klappen würde macht das php auch nur ein Http get.

Ohne dass du uns erklärst was du vorhast, wird das nichts...

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

Antworten
  • Forum-Beiträge: 7

28.07.2017, 22:20:39 via Website

mei php dient nur als eine art adapter es soll den get befehl verarbeiten und den string daraus zu nem socket leiten der server verarbeitet den socket und gibt ein response string zurück und php gibt dieses als json über echo aus und android zeigt dieses an

hab ich dass nicht im unteren teil des threads oben gesagt ? sorry falls es es etwas aggressiv klingt ;D

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

28.07.2017, 23:31:46 via App

Das war schon klar, ich meinte nur dass die Hintergründe unklar sind.
Mir stellen sich ein paar Fragen:

Auf welche Daten und wessen Server willst du zugreifen(ohne zwischenserver mit Php)?
Hast du den Server in der Hand?
Du schreibst was von Tcp und Sockets?
Welches Protokoll über tcp?
Warum gerade so gibt es keine Http Api?
Warum den Umweg über Php?
Tcp kann man auf Android mit AsyncTasks/Background Tasks realisieren.

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

Antworten
  • Forum-Beiträge: 7

29.07.2017, 04:39:55 via Website

ich will auf ne oracle datenbank zugreifen
jap ich habe vollen zugriff auf den server mit der db und auf den webserver
ja ich verwende tcp sockets
ist tcp selber nicht das protokoll ?(transmission control protocol)

zu den 2 letzten fragen: den umweg über http da ich versuche mit sockets gemacht habe aber diese gescheitert sind da hatte ich bei dem umweg mit php weit aus mehr erfolge

lg

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

29.07.2017, 11:10:25 via App

Na also damit kommen wir der Sache doch schon näher:
Also direkte Verbindungen auf die DB von außen würdr ich direkt sperren. Das Risiko dass sich jemand dort Zugriff verschafft ist zu groß.
Und dann ist es am besten, du installierst einen Webserver auch f dem gleichen Server wie die DB. Dort kannst du dann eine Api hinterlegen, mit welcher du dann über http/s zugreifen kannst.
In welcher Sprache die Api ist, ist egal.
Da du mit Php Arbeitest:
https://stackoverflow.com/questions/25712045/connect-pdo-with-oracle-database
Binde doch die DB direkt an, wenn du über Tcp (ja schon ein Protokoll aber die Daten müssen stimmen...) anfängst an eine Oracle DB zu gehen, dann viel Spaß beim neu entwickeln von Odbc o.ä.. Hier musst du das Rad nicht neu erfinden.

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

swa00

Antworten

Empfohlene Artikel