2016-05-22 5 views
0

https://www.dropbox.com/s/1uq36sbd6d7a3gr/Untitled.png?dl=0Auswahl alles aus SQL-Datenbank mit PHP und android

ich meine Php-Datei durch meine Android App anschließe, die dann auf meine SQL-Datenbank verbindet, packt es dann alle Informationen, die ich dort gespeichert haben, durch einen Empfangs Benutzername und alle Informationen mit dem gleichen Benutzernamen und zeigt es in einem Recycler-Viewer. Bis jetzt zeigt es mir nur das letzte Haustier. Wie kann ich meinem Code mitteilen, dass ALLE Haustiere unter diesem Nutzernamen angezeigt werden?

Java-Code

**RECEIVE PET** 
public class ReceivePet extends StringRequest { 

private static final String RECEIVE_PET_URL = "http://lassie.netai.net/ReceivePet.php"; 
private Map<String, String> params; 

public ReceivePet (String username, Response.Listener<String> listener) { 
    super(Request.Method.POST, RECEIVE_PET_URL, listener, null); 
    params = new HashMap<>(); 
    params.put("username", username); 
} 

@Override 
public Map<String, String> getParams() { 
    return params; 
} 

}

**WHERE I GET MY SQL DATABASE INFO** 
Response.Listener<String> responseListener = new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      try { 
       JSONObject jsonResponse = new JSONObject(response); 
       boolean success = jsonResponse.getBoolean("success"); 

       if (success) { 
        petName = jsonResponse.getString("petname"); 
        petBreed = jsonResponse.getString("petbreed"); 
        phoneNumber = jsonResponse.getString("phonenumber"); 
        petDescription = jsonResponse.getString("petdescription"); 
        imageUrl = jsonResponse.getString("imageurl"); 

        petsList.add(new Pet(petName, petBreed, phoneNumber, petDescription, imageUrl)); 
        adapter.notifyDataSetChanged(); 
       } else { 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
    ReceivePet receiverPetRequest = new ReceivePet(username, responseListener); 
    RequestQueue queue = Volley.newRequestQueue(getActivity()); 
    queue.add(receiverPetRequest); 

PHP CODE

<?php 
$con = mysqli_connect("mysql13.000webhost.com", "a9017958_omer", "pass123", "a9017958_users"); 

$username = $_POST["username"]; 

$statement = mysqli_prepare($con, "SELECT * FROM pets WHERE username = ?"); 
mysqli_stmt_bind_param($statement, "s", $username); 
mysqli_stmt_execute($statement); 

mysqli_stmt_store_result($statement); 
mysqli_stmt_bind_result($statement, $petsID, $username, $petname, $petbreed, $phonenumber, $petdescription, $imageurl); 

$response = array(); 
$response["success"] = false; 

while(mysqli_stmt_fetch($statement)) { 
    $response["success"] = true; 
    $response["petname"] = $petname; 
    $response["petbreed"] = $petbreed; 
    $response["phonenumber"] = $phonenumber; 
    $response["petdescription"] = $petdescription; 
    $response["imageurl"] = $imageurl; 
} 

print_r (json_encode($response)); 

?>

+0

zuerst sicherstellen, dass auf 'ServerSide' Sie alle Daten haben, die Sie erwarten? Führen Sie 'php' Datei im Browser zuerst – Hosseini

+0

Natürlich tue ich, ich empfange nur ein Haustier, anstatt der zwei, die ich habe. – OmerValentine

+0

https://www.dropbox.com/s/2klqgip09cow34p/sdjklnfodsf.png?dl=0 – OmerValentine

Antwort

0

In PHP in der while Schleife überschreiben Sie die Werte in $response bei jeder Iteration. Sie müssen ein Array von Arrays erstellen. Hier ein Beispiel:

$response = array(); 
while(mysqli_stmt_fetch($statement)) { 
    $entry = array(); 
    $entry["success"] = true; 
    $entry["petname"] = $petname; 
    $entry["petbreed"] = $petbreed; 
    $entry["phonenumber"] = $phonenumber; 
    $entry["petdescription"] = $petdescription; 
    $entry["imageurl"] = $imageurl; 
    $response[] = $entry; 
} 

Außerdem sollten Sie echo json_encode($response); statt print_r(json_encode($response)); verwenden.

Und in Java, seit jetzt erhalten Sie ein JSON-Array als Antwort. Sie müssen sich ändern:

JSONObject jsonResponse = new JSONObject(response); 

zu:

JSONArray jsonResponse = new JSONArray(response); 

und Schleife durch diese Anordnung alle Ergebnisse zu verarbeiten.

for(int i = 0; i < jsonResponse.length(); i++){ 
    JSONObject obj = jsonResponse.getJSONObject(i); 
    petsList.add(new Pet(obj.getString("petname"), obj.getString("petbreed"),....)); 
} 
+0

Das ist großartig, danke! kannst du mir einfach die Schleife zeigen, um durch das Ergebnis zu laufen, würde es wirklich schätzen! :) – OmerValentine

+0

Ich bekomme jetzt einen Fehler, obwohl auf "Erfolg" sagt JsonArray kann nicht auf jav.lang.string JSONArray JsonResponse = neue JSONArray (Antwort); Boolescher Erfolg = jsonResponse.getBoolean ("Erfolg"); – OmerValentine

+0

@OmerValentine Entfernen Sie die Zeile 'boolean success = jsonResponse.getBoolean (" success ");', wird nicht mehr benötigt, wenn der Prozess nicht erfolgreich war, wird 'JSONArray' leer sein. Sie können dies stattdessen tun 'boolean success = jsonResponse.length()> 0;'. – Titus

Verwandte Themen