2017-01-06 2 views
0

정수 배열에서 R.drawable.img를 가져갈 때처럼 정수 배열에서 이미지를 가져 오려고합니다.서버에서 이미지를 가져 와서 안드로이드에서 int 배열로 설정합니다.

예컨대 : 당신은 서버에서 이미지를 촬영 할 때 int[] images = {R.drawable.a , R.drawable.b , R.drawable.c , R.drawable.d};

는이 같은 동일합니다. 배열의

선언 : 서버에서

    String images[] = new String[1000]; 

가져 오기 이미지와는 안될 배열을 int로 설정합니다.

  public void onResponse(String response) { 
      Log.d("TAG", "Message Response: " + response.toString()); 
      hideDialog(); 

      try { 
       JSONObject jsonObj = new JSONObject(response); 
       boolean error = false; 
       p = jsonObj.getJSONArray("response"); 

       for (int i = 0 ; i < p.length(); i++) { 

        JSONObject c = p.getJSONObject(i); 
        String profilepicture = c.getString("profile_picture"); 

        byte[] decodedString = Base64.decode(profilepicture, Base64.DEFAULT); 
        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 


        Drawable drawable = new BitmapDrawable(getResources(),decodedByte); 

        images[i] = drawable; 

} 

그리기 가능 값 [email protected]이다. 그러나 그것은 정수 배열을 설정하지 않습니다.

+0

최종 목표가 ImageView에 드로어 블을 표시하는 것이라면 Piccaso 또는 Android-Universal-Image-Loader를 사용하십시오. url 배열을 만들고 url을이 라이브러리에 전달하면이 라이브러리는 이미지 다운로드 및 표시 부분을 처리합니다. 또한 이미지 캐싱을 제공합니다. –

답변

2

당신은 드로어 블을 얻고 있습니다. Drawable을 정수 배열 또는 문자열 배열에 저장할 수 없습니다. 그리기 배열을 Drawable 배열로 만들어야합니다. 이 방법은 모든 이미지를 메모리에 저장하는 것이 좋습니다. 많은 메모리가 필요합니다. 비범 한 번호라면 OOM 예외가 발생할 가능성이 높습니다. 그 점에서, 이러한 모든 이미지를 Base64로 인코딩 된 문자열로 보내는 것은 권장하지 않습니다. 일을하는 더 좋은 방법은 서버가 다운로드 할 이미지의 URL을 보내고 필요할 때만 다운로드하도록하는 것입니다.

+0

고마워. 잘됐다. –

1

드로어 블을위한 어레이를 생성하면 작동 할 것이고, 정수 인덱스를 통해 그 어레이로부터 이미지를 얻을 수 있습니다. 하지만 당신이 시도하는 경우, 당신은 그 번호 BitmapDrawable @ 269a3b6d 코드를 디버깅에서 얻었을 것입니까? 권리? 이것은 memorey에있는 객체에 대한 참조이며 정수가 아닙니다! 따라서 정수 배열에 넣지 마십시오. 이제 배열 유형을 드로어 블로 만들거나 시나리오를 변경하십시오!