2016-08-23 3 views
1

Ich entwickle eine App, die zu speichern und Daten aus MySQL db zu lesen. Im Moment bin ich in der Lage, 1 row erfolgreich abzurufen, aber wenn ich versuche, multiple rows abzurufen, funktioniert es nicht. Der Code bricht, wenn ich versuche, JSONObject (ich setze einen Kommentar über die Zeile, die die error gibt) in ResponseListener zu initialisieren. Um mit meinem db zu kommunizieren benutze ich die Volley-Bibliothek. HierAndroid ResponseListener JSON Fehler beim Versuch, JSONObject zu initialisieren

ist der Fehlerausgang:

08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at org.json.JSONTokener.syntaxError(JSONTokener.java:449) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at org.json.JSONTokener.nextValue(JSONTokener.java:97) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:156) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at org.json.JSONObject.<init>(JSONObject.java:173) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.example.www.myapp.DataActivity$2.onResponse(DataActivity.java:235) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.example.www.myapp.DataActivity$2.onResponse(DataActivity.java:229) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at android.os.Looper.loop(Looper.java:158) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:7229) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
08-23 17:27:12.853 22689-22689/com.example.www.myapp W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Hier ist mein Code so weit:

Antwort Listener

private void getDataFromExternalDB(final String startid){ 
     id = Integer.parseInt(startid); 
Response.Listener<String> responseListener = new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        //I get the error at the following line 
        JSONObject jsonResponse = new JSONObject(response); 

        while (jsonResponse.getJSONObject(""+id) != null){ 
         jsonResponse.getJSONObject(""+id); 
         int user_id = jsonResponse.getInt("user_id"); 
         String username = jsonResponse.getString("username"); 

         Log.d("getDataFromExternalDB","user_id="+user_id + " username="+username); 

         id++; 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     DataRequest dataRequest = new DataRequest (startid, responseListener); 
     RequestQueue queue = Volley.newRequestQueue(DataActivity.this); 
     queue.add(dataRequest); 
} 

DataRequest.java

import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

public class DataRequest extends StringRequest { 
    private static final String DATA_REQUEST_URL = "http://192.168.178.17/getData.php"; 
    private Map<String, String> params; 

    public DataRequest (String startid, Response.Listener<String> listener) { 
     super(Method.POST, DATA_REQUEST_URL, listener, null); 
     params = new HashMap<>(); 
     params.put("startid", startid); 

    } 

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

getData.php

<?php 

    $connect = mysqli_connect("localhost", "root", "pass", "db"); 

    $startid = $_POST["startid"]; 

    function getData() { 
     global $connect, $startid; 
     $result = $connect->query("SELECT * FROM users WHERE user_id > " . $startid); 
     $responses = array(); 
     $response = array(); 
     if ($result->num_rows > 0) { 
      // output data of each row 
      while($row = $result->fetch_assoc()) { 

       $response["user_id"] = $row["user_id"]; 
       $response["username"] = $row["username"]; 


       $responses["" . $row["user_id"]]=$response; 
      } 
      echo json_encode($responses); 
     }else { 
      echo "0 results"; 
     } 

    } 

    getData(); 

    $connect->close(); 

?> 
+1

Können Sie einen Ausdruck der Antwort einfügen, bevor Sie versuchen und werfen es JSon? – MichaelStoddart

+0

@MichaelStoddart 'Echoantworten [" Nummer hier "] [" Benutzername "]; ' Und es gibt den Benutzernamen zurück. – Nikolaj

+0

Veröffentlichen Sie den String auf der Java-Seite: 'public void onResponse (String response)' vor der neuen JSONObject() - Erstellung. –

Antwort

0

Bitte setzen Sie sich Antwort wie

try {

   JSONObject json; 
JSONArray jsonArray = null; 
      if (json != null) { 

       jsonArray = json.getJSONArray("mainTags"); 
       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject c = jsonArray.getJSONObject(i); 

       Sting name = c.getString("name"); 
        Log.d("namee", name); 


       } 


      } else { 
       // Log.d("Server Unreachable", 
       // "Unable to Perform Your request.Server Is Unreachable! Please Try Later."); 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
Verwandte Themen