2016-10-03 4 views
-3

Ich mache eine App, in der ich Benutzerdaten aus der entsprechenden SQL-Tabelle mit PHP abrufen.Wert [Zeichenfolge] <br> [Zeichenfolge] <br> des Typs java.lang.String kann nicht in JSONArray konvertiert werden

<?php 

$email = $_POST["email"]; 

@mysql_connect("localhost","root","root") or die(@mysql_error()); 
@mysql_select_db("dtbse") or die(@mysql_error()); 

$x = mysql_query("select * from dtbse where email = '$email' ") or die(@mysql_error()); 
$result = array(); 

while ($y=mysql_fetch_array($x)) { 
      echo $y["uname"]."<br>"; 
      echo $y["gender"]."<br>"; 
      echo $y["pass"]."<br>"; 
      echo $y["address"]."<br>"; 
      echo $y["email"]."<br>"; 

     } 

?> 

Jede Hilfe wird sehr geschätzt. Ich weiß, dass diese Frage schon oft gestellt wurde, aber ich denke nicht, dass es etwas gibt, das dieses Problem reproduziert. Vielen Dank.

Hier ist das Code-Snippet, das für das Abrufen und Parsen zuständig ist. letzte ArrayList arr = neue ArrayList(); arr.add (neuer BasicNameValuePair ("email", uname));

  try { 

       DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
       HttpPost httppost = new HttpPost("http://xxyoxx.esy.es/getDetails.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(arr)); 
       HttpResponse hr = httpclient.execute(httppost); 
       HttpEntity ent = hr.getEntity(); 
       is = ent.getContent(); 
       Toast.makeText(getApplicationContext(),"1 wrk ",Toast.LENGTH_LONG).show(); 


      } catch (Exception fl) { 
       Toast.makeText(getApplicationContext(),"First Try error "+fl,Toast.LENGTH_LONG).show(); 

      } 
      /*// Depends on your web service 
      httppost.setHeader("Content-type", "application/json");*/ 

      String result=null; 
      try { 
       // json is UTF-8 by default 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       result = sb.toString(); 
       Toast.makeText(getApplicationContext(),"2 str\n "+result,Toast.LENGTH_LONG).show(); 
      } catch (Exception sl) { 
       sl.printStackTrace(); 

       Toast.makeText(getApplicationContext(),"2 err\n "+sl,Toast.LENGTH_LONG).show(); 
      } 

      try{ 
       String aa = "", b = "", c = ""; 
       JSONArray ar = new JSONArray(result); 
       for (int i = 0; i < ar.length(); i++) { 
        JSONObject jo = ar.getJSONObject(i); 
        aa = jo.getString("uname"); 
        b = jo.getString("address"); 
        c = jo.getString("email"); 
       } 
       nm.setText(aa); 
       addr.setText(b); 
       mail.setText(c); 
       Toast.makeText(getApplicationContext(),"3 wrk"+result,Toast.LENGTH_LONG).show(); 
      } 
      catch (Exception tl){ 
       Toast.makeText(getApplicationContext(),"3 err "+tl,Toast.LENGTH_LONG).show(); 
      } 
+0

Bitte posten Sie Ihre JSON-Daten –

+0

Verwenden Sie nicht den Fehlerunterdrückungsoperator. Niemals. Es gibt absolut keinen gültigen Anwendungsfall dafür. – apokryfos

+0

Es ist ein Fehler in Ihrer JSON-Antwort, es ist der tipical orange quadratische Fehler melden, dann erhalten Sie
.... zeigen Sie Ihre URL auf comercial Browser, um besser Ihre Antwort zu sehen. – Aspicas

Antwort

1

Die durch <br> getrennten Strings sind kein gültiges JSON-Array. PHP kann JSON-Strings mit json_encode

erstellen Wenn Sie ein JSON-Array in Android lesen benötigen Sie eine JSON-Array von PHP echo:

<?php 

$email = $_POST["email"]; 

mysql_connect("localhost","root","root") or die(mysql_error()); 
mysql_select_db("dtbse") or die(mysql_error()); 

$x = mysql_query("select * from dtbse where email = '$email' ") or die(mysql_error()); 
$result = array(); 

$res=[];  
while ($y=mysql_fetch_array($x)) { 
    $res[] = [ 
       $y["uname"], 
       $y["gender"],     
       $y["pass"], 
       $y["address"], 
       $y["email"] 
    ];  
} 
echo json_encode($res); //Make PHP return a valid JSON response 

Auch können die Fehlerunterdrückungs Betreiber wertvolle Debug-Infomationen verstecken die kann Ihnen helfen, andere Probleme zu diagnostizieren.

Wenn Sie stattdessen lieber das JSON-Objekt an Java übergeben möchten, können Sie Folgendes (einfacher) tun.

<?php 

$email = $_POST["email"]; 

mysql_connect("localhost","root","root") or die(mysql_error()); 
mysql_select_db("dtbse") or die(mysql_error()); 

$x = mysql_query("select * from dtbse where email = '$email' ") or die(mysql_error()); 
$result = array(); 

$res=[];  
while ($y=mysql_fetch_array($x)) { 
    $res[] = $y; 
} 
echo json_encode($res); //Make PHP return a valid JSON response 
+0

Ja, das hat das Problem gelöst. Aber jetzt plagt mich eine neue. Der Wert ["string", "string"] bei 0 vom Typ org.json.JSONArray kann nicht in JSONObject umgewandelt werden. – cenobia

+0

@cenobia Wenn Ihre Android-App ein JSON-Objekt für jede "Zeile" erwartet, müssen Sie PHP wahrscheinlich entsprechend anpassen. Ich habe ein Update gemacht, falls es hilfreich ist – apokryfos

+0

Es funktionierte einwandfrei. Vielen Dank, vielen Dank. – cenobia

Verwandte Themen