2017-07-09 9 views
0

phpスクリプトからアンドロイドアプリケーションのjsonオブジェクトに問題があります。 Log.i(finalJson、 "json object")では、jsonの非同期タスクがリストから最初の要素だけを返すというlogcatがあります。私はPOSTMANに私のPHPをテストし、それが次のようになります。AsyncTaskは、JSONArrayの最初のJSONObjectのみを返します。

[ 
     { 
      "ID": "1", 
      "Description": "Plisani meda", 
      "Price": "1000", 
      "Image": "http://www.volimsvojdom.rs/wf-proizvodiPics/47188/plisana-igracka-mis-u-pantalonama-LB80322.jpg" 
     }, 
     { 
      "ID": "2", 
      "Description": "poni", 
      "Price": "2000", 
      "Image": "http://www.volimsvojdom.rs/wf-proizvodiPics/47188/plisana-igracka-mis-u-pantalonama-LB80322.jpg" 
     } 
    ] 

public class JSONTask extends AsyncTask<String,String,List<Prozivod>> 
{ 

    @Override 
    protected List<Prozivod> doInBackground(String... params) { 
     HttpURLConnection connection=null; 
     BufferedReader reader=null; 

     try { 
      URL url=new URL(params[0]); 
      connection=(HttpURLConnection)url.openConnection(); 
      connection.connect(); 
      InputStream stream=connection.getInputStream(); 
      reader=new BufferedReader(new InputStreamReader(stream)); 
      StringBuffer buffer=new StringBuffer(); 
      String line=""; 
      while((line=reader.readLine())!=null) 
      { 
      buffer.append(line); 

      } 

      String finalJson=buffer.toString(); 
      JSONArray jsonArray=new JSONArray(finalJson); 
      Log.i(finalJson,"json object"); 
      List<Products> listOfItems=new ArrayList<>(); 
      for(int i=0;i<jsonArray.length();i++) 
      { 
       JSONObject itemJson=jsonArray.getJSONObject(i); 
       Products p=new Products(); 
       p.setProizvodID(proizvodJson.getInt("ID")); 
       p.setCena(proizvodJson.getInt("Price")); 
       p.setOpis(proizvodJson.getString("Description")); 
       p.setSlika(proizvodJson.getString("Image")); 
       listOfItems.add(p); 
       return listOfItems; 

      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     catch (JSONException e) { 
      e.printStackTrace(); 
     }finally { 
      if(connection!=null){connection.disconnect();} 
     } 
     try{if(reader!=null){reader.close();}} 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null ; 
    } 

感謝の任意の助けを!

+3

あなたは 'for'ループの内側から戻ります。それが、1回の繰り返しの後に終了する理由です。 forループの後にリストを返すことをお勧めします。 – Apoorv

+0

return listOfItems;この行をforループの外側に移動してください。 –

+1

提案:AsyncTaskの代わりにRetrofitを使用してください –

答えて

1

リストを1回反復した直後に戻します。試してみてください:

for(int i=0;i<jsonArray.length();i++) 
     { 
      JSONObject itemJson=jsonArray.getJSONObject(i); 
      Products p=new Products(); 
      p.setProizvodID(proizvodJson.getInt("ID")); 
      p.setCena(proizvodJson.getInt("Price")); 
      p.setOpis(proizvodJson.getString("Description")); 
      p.setSlika(proizvodJson.getString("Image")); 
      listOfItems.add(p); 
     } 
     return listOfItems; 

希望します。

+0

ありがとうございました! –

関連する問題