2016-10-03 3 views
-3

私はPHPを使用して対応するSQLテーブルからユーザーデータを取得するアプリケーションを作成しています。値[文字列] <br> [文字列]タイプのjava.lang.StringはJSONArrayに変換できません

<?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>"; 

     } 

?> 

非常に助かります。私はこの質問が何度もあったことは知っていますが、この問題を再現するものはないと思います。ありがとう。

ここでは、取得および解析を担当するコードスニペットを示します。 final ArrayList arr = new ArrayList(); arr.add(新しい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

jsonデータを投稿してください –

+0

エラー抑制演算子は使用しないでください。決してこれまでにない。それには正当なユースケースはありません。 – apokryfos

+0

JSONレスポンスでエラーが発生しました。オレンジ色の正方形のエラーが報告されました。
.... comercialブラウザでURLを表示すると、レスポンスが良くなります。 – Aspicas

答えて

1

<br>で区切られた文字列は有効なJSON配列ではありません。あなたは、AndroidでJSON配列を読むために必要がある場合はPHPを使用すると、PHPからJSON配列をエコーする必要がjson_encode

を使用してJSON文字列を作成することができます

<?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 

また、エラー抑制演算子は、貴重なデバッグINFOMATIONを隠す可能性があります他の問題の診断に役立ちます。

JSONオブジェクトをJavaに渡す方がいい場合は、次の(簡単な)ことができます。

<?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

はいこれが問題を解決しました。しかし今、私は新しいものに悩まされています。 org.json.JSONArray型の0のValue ["string"、 "string"]はJSONObjectには適用できません。 – cenobia

+0

@cenobiaあなたのアンドロイドアプリが各行のJSONオブジェクトを期待している場合は、おそらくそれに応じてPHPを修正する必要があります。役に立ったと思ったら更新しました – apokryfos

+0

完璧に動作しました。カンツは十分にありがとう。 – cenobia

関連する問題