2017-10-17 1 views
0

json 데이터는 토스트에 표시하려고 할 때 파싱되지만 arraylist는 비어 있습니다. 이 문제를 어떻게 해결할 수 있습니까? 파싱되었지만 원하는 arraylist에 저장되지 않은 JSON

은 AsyncTask를이 JSON

public class DownloadDetailImages extends AsyncTask<Void, Void, String> { 

    Context context; 
    ArrayList<String> arrayList = new ArrayList<>(); 
    String urlAddress; 

    public DownloadDetailImages(Context context, ArrayList<String> arrayList, String urlAddress) { 
     this.context = context; 
     this.arrayList = arrayList; 
     this.urlAddress = urlAddress; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(String json) { 
     super.onPostExecute(json); 

     try { 
      JSONArray jsonArray = new JSONArray(json); 
      JSONObject jsonObject; 

      arrayList.clear(); 

      for (int i = 0; i < jsonArray.length(); i++) 
      { 
       jsonObject = jsonArray.getJSONObject(i); 

       String imageUrl = jsonObject.getString("ProductImage"); 
       arrayList.add(imageUrl); 
      } 

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

    @Override 
    protected String doInBackground(Void... params) { 
     HttpURLConnection httpURLConnection = Connector.connect(urlAddress); 

     try{ 
      InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

      String line; 
      StringBuffer jsonData = new StringBuffer(); 

      while((line = bufferedReader.readLine()) != null) 
      { 
       jsonData.append(line+"\n"); 
      } 

      bufferedReader.close(); 
      inputStream.close(); 

      httpURLConnection.disconnect(); 

      return jsonData.toString().trim(); 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

} 

을 구문 분석하는 코드입니다 이것은 이것이 내가 공용 클래스 커넥터 {

를 웹 서버에 연결하는 데 사용하는 클래스입니다 주 활동

public class MainActivity extends AppCompatActivity implements BaseSliderView.OnSliderClickListener, 
     ViewPagerEx.OnPageChangeListener { 

    SliderLayout sliderLayout; 
    ArrayList<String> images = new ArrayList<String>(); 
    String urlAddress = "http://10.10.90.70/slider/sliderImage.php"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     sliderLayout = (SliderLayout) findViewById(R.id.slider); 

     new DownloadDetailImages(this, images, urlAddress).execute(); 

     for (int i = 0; i < images.size(); i++) { 
      TextSliderView textSliderView = new TextSliderView(MainActivity.this); 
      textSliderView 
        .image(images.get(i).toString()) 
        .setScaleType(BaseSliderView.ScaleType.Fit) 
        .setOnSliderClickListener(this); 
      textSliderView.bundle(new Bundle()); 
      sliderLayout.addSlider(textSliderView); 
     } 

     sliderLayout.setPresetTransformer(SliderLayout.Transformer.Accordion); 
     sliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom); 
     sliderLayout.setCustomAnimation(new DescriptionAnimation()); 
     sliderLayout.setDuration(3000); 
     sliderLayout.addOnPageChangeListener(this); 

    } 

    @Override 
    protected void onStop() { 
     sliderLayout.stopAutoCycle(); 
     super.onStop(); 
    } 

    @Override 
    public void onSliderClick(BaseSliderView slider) { 

    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
     Log.d("Slider Demo", "Page Changed: " + position); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 

} 

입니다

public static HttpURLConnection connect(String urlAddress) 
{ 
    try { 
     URL url = new URL(urlAddress); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 

     //connection properties 
     httpURLConnection.setRequestMethod("GET"); 
     httpURLConnection.setConnectTimeout(3000); 
     httpURLConnection.setReadTimeout(3000); 
     httpURLConnection.setDoInput(true); 
     httpURLConnection.setDoOutput(true); 

     return httpURLConnection; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

,363,210

는 이것은

[{ 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/mejakerja.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/mejakerja.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/fax.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/fax.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/kursikerja.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/kursikerja.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/printer.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/printer.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/projector.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/projector.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/scanner.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/scanner.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/brankas.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/brankas.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/copier.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/copier.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/copier1.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/copier1.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/PC.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/PC.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/PC1.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/PC1.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/laptop1.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/laptop1.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/laptop2.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/laptop2.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/nikon.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/nikon.jpg" 
}, { 
    "0": "http:\/\/10.10.90.70\/babex\/Gambar\/handycam.jpg", 
    "ProductImage": "http:\/\/10.10.90.70\/babex\/Gambar\/handycam.jpg" 
}] 

감사합니다 JSON 응답입니다.

+0

예외가 있습니까? JSON 응답을 받았습니까? ProductImage 키가있는 JSON 응답을 보냈습니까? –

+0

예, 브라우저에서 PHP 파일을 시도했지만 필수 입력란이 있습니다. 그리고 예외가없는 브라우저에서 –

+0

, 당신은 logcat에 인쇄하여 asynctask의 게시물을 실행했는지 확인 했습니까? –

답변

0

당신이 AsyncTask를 완료하거나하지 않은 경우 다음 ArrayList를 액세스, 확인, ArrayList의를 accesing 때이

public class MainActivity extends AppCompatActivity implements BaseSliderView.OnSliderClickListener, 
      ViewPagerEx.OnPageChangeListener { 

     SliderLayout sliderLayout; 
     ArrayList<String> images = new ArrayList<String>(); 
     String urlAddress = "http://10.10.90.70/slider/sliderImage.php"; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      sliderLayout = (SliderLayout) findViewById(R.id.slider); 

      new DownloadDetailImages(this, images, urlAddress).execute(); 

      for (int i = 0; i < images.size(); i++) { 
       TextSliderView textSliderView = new TextSliderView(MainActivity.this); 
       textSliderView 
         .image(images.get(i).toString()) 
         .setScaleType(BaseSliderView.ScaleType.Fit) 
         .setOnSliderClickListener(this); 
       textSliderView.bundle(new Bundle()); 
       sliderLayout.addSlider(textSliderView); 
      } 

      sliderLayout.setPresetTransformer(SliderLayout.Transformer.Accordion); 
      sliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom); 
      sliderLayout.setCustomAnimation(new DescriptionAnimation()); 
      sliderLayout.setDuration(3000); 
      sliderLayout.addOnPageChangeListener(this); 

     } 

     @Override 
     protected void onStop() { 
      sliderLayout.stopAutoCycle(); 
      super.onStop(); 
     } 

     @Override 
     public void onSliderClick(BaseSliderView slider) { 

     } 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      Log.d("Slider Demo", "Page Changed: " + position); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 

    class DownloadDetailImages extends AsyncTask<String, Void, String> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onPostExecute(String json) { 
      super.onPostExecute(json); 

      try { 
       JSONArray jsonArray = new JSONArray(json); 
       JSONObject jsonObject; 

       images.clear(); 

       for (int i = 0; i < jsonArray.length(); i++) 
       { 
        jsonObject = jsonArray.getJSONObject(i); 

        String imageUrl = jsonObject.getString("ProductImage"); 
        images.add(imageUrl); 
       } 

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

     @Override 
     protected String doInBackground(String... params) { 
      HttpURLConnection httpURLConnection = Connector.connect(params[0]); 

      try{ 
       InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

       String line; 
       StringBuffer jsonData = new StringBuffer(); 

       while((line = bufferedReader.readLine()) != null) 
       { 
        jsonData.append(line+"\n"); 
       } 

       bufferedReader.close(); 
       inputStream.close(); 

       httpURLConnection.disconnect(); 

       return jsonData.toString().trim(); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

    } 

    } 
+0

여전히 작동하지 않습니다. 하지만 어쨌든 대답 주셔서 감사합니다. –

+0

images.clear()를 제거하십시오; –

+0

이 아직 작동하지 않으면 확인하십시오. –

0

이 당신의 AsyncTask를 클래스가 완료되지 않습니다 할 수있다보십시오.

관련 문제