2017-03-09 25 views
0

jsonを使用して、mysqlからアンドロイドへの単純なアプリケーション読み込みデータを作成しようとしています。
これは私のPHPコードである:java.lang.String型の値をJSONArrayに変換できません。

$response = array(); 
$result = mysql_query("SELECT * FROM Demo LIMIT 2"); 
if(mysql_num_rows($result) !=0) 
{ 
    while($row = mysql_fetch_array($result)){ 
     array_push($response, new Image(
     $row["id"], 
     $row["name"], 
     $row["image"] 
    )); 
    } 
echo json_encode($response); 
} 

class Image 
{ 
var $id; 
    var $name; 
    var $link1; 

function Image($id, $name, $link1) 
{ 
    $this->id = $id; 
    $this->name = $name; 
    $this->link1 = $link1; 
} 
} 

結果JSON:

[{ "ID": "1"、 "名前": "thisisname"、 "リンク1": "thisislink"} 、{ "ID": "2"、 "名前": "thisisname"、 "リンク1": "thisislink"}]

これはアンドロイドコードである:

class getDetailProduct extends AsyncTask<String, Integer, String> { 

    @Override 
    protected String doInBackground(String... strings) { 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost("http://10.0.3.2/demo/display.php"); 

     String kq = ""; 
     try { 
      HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity entity = response.getEntity(); 
      kq = EntityUtils.toString(entity); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return kq; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     Log.e("result", s); 
     try { 
      JSONArray jsarr = new JSONArray(s); // Error this line 
      if(jsarr.length()>0){ 
       for (int i = 0; i<jsarr.length(); i++){ 
        JSONObject jo = jsarr.getJSONObject(i); 
        imageArrayList.add(new MyImage(
          jo.getInt("id"), 
          jo.getString("name"), 
          jo.getString("link1") 
        )); 
       } 
       MyGridViewAdapter myGridViewAdapter = new MyGridViewAdapter(getApplicationContext(), R.layout.item_gridview, imageArrayList); 
       gridView.setAdapter(myGridViewAdapter); 
      } 


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

これはLogcatです:

20:22:57.055 12905-12905/com.example.chientran.demoproject E/result: [{"id":"1","name":"thisisname","link1":"thisislink"},{"id":"2","name":"thisisname","link1":"thisislink"}] 
W/System.err: org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArray 
W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:96) 
W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:108) 
W/System.err:  at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:93) 
W/System.err:  at com.example.chientran.demoproject.MainActivity$getDetailProduct.onPostExecute(MainActivity.java:57) 
W/System.err:  at android.os.AsyncTask.finish(AsyncTask.java:632) 
W/System.err:  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
W/System.err:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:135) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5221) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

しかし、私はhardjsonを使用している場合、それは

String ss= "[{\"id\":\"1\",\"name\":\"thisisname\",\"link1\":\"thisislink\"},{\"id\":\"2\",\"name\":\"thisisname\",\"link1\":\"thisislink\"}]"; 
JSONArray jsonarr = new JSONArray(ss);// It work 

`

+0

こんにちは、onPostExecute、私はPHPから結果jsonを持っています。だから私は 'kq'は空ではないと思います。 – Chien

+0

Log.e( "result"、s)が上に投稿したレスポンスを表示している場合、jo.getInt( "id")部分を除いてあなたのコードに問題がないとは思わない。あなたのIDはintではなく文字列の形式です。ログに結果が表示されているかどうかを確認します。 –

+0

@NishanKhadka 'jo.getInt(" id ")'モデルでは 'MyImage(int id、String name、String link)'です。 – Chien

答えて

0

はあなたのサポートのためにすべてをありがとうござい動作するはず

try{ 
JSONArray jArray=new JSONArray(ss); 
for(int i=0;i<jArray.length();i++){ 
JSONObject jObj=jArray.getJSONObject(i); 
int id=Integer.parseInt(jObj.getString("id")); 
String name=jObj.getString("name"); 
String link1=jObj.getString("link1"); 
imageArrayList.add(new MyImage(
          id,name,link1)); 
} 

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

:JSONを処理するために、今 、。私は私の問題を解決しました。
私のアンドロイドコードは正しいですが、ファイルphpではUTF-8-BOMでエンコードされていました。だから私はそれをUTF-8でEncodeに変更しました。それは動作します

0
 JSONArray arrayresult = ss.getJSONArray(response); 

       for (int i = 0; i < arrayresult.length(); i++) { 
        JSONObject a = arrayresult.getJSONObject(i); 

         YourModel model = new YourModel(); 
         model.id = a.getInt("id"), 
         model.name = a.getString("name"), 
         model.link1 = a.getString("link1") 

         modellist.add(model); 
       } 
+0

'jsonObj'とは@Edson Reis – Chien

+0

申し訳ありませんが間違いました –

+0

私のコードでは、' ss'と 'respone'は同じです。これはPHPの結果です – Chien

0

オーケーを働く、これはあなたのJSONになります:

[ 
    {"id":"1", 
    "name":"thisisname", 
    "link1":"thisislink" 
    }, 
    {"id":"2", 
    "name":"thisisname", 
    "link1":"thisislink" 
    } 
    ] 

結果のStringでJSONより上になるはずです。これは

+0

ありがとうございました。私は私の問題を解決する。 – Chien

関連する問題