ImageView와 TextView가 포함 된 ListView를 사용했습니다. 나는 서버에서 이미지를 얻고 싶다. 나는 이미지를 성공적으로 얻을 수 있다고 말한 아래의 코드를 디버깅하지만, 돌아 왔을 때, 이미지는 사라졌다. 나는 이유를 모른다. 나는 안드로이드의 새로운 시작 자다. 누군가가 나를 도울 수 있기를 바랍니다.Android : 서버에서 이미지를 얻으려면
목록보기 어댑터 클래스 :
public View getView(int position, View convertView, ViewGroup parent) {
News news = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
newsImage = (ImageView) view.findViewById(R.id.news_image);
newsTitle = (TextView) view.findViewById(R.id.news_title);
newsTitle.setText(news.getTitle());
bitmap = HttpUtil.sendImageRequest(news.getImageUrl());
newsImage.setImageBitmap(ImageUtility.ImageSolution(bitmap, newsImage));
return view;
}
sendImageRequest 방법 :
public static Bitmap sendImageRequest(final String address){
final Bitmap[] bitmap = new Bitmap[1];
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) new URL(address).openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
InputStream in = connection.getInputStream();
bitmap[0] = BitmapFactory.decodeStream(in);
} catch (java.io.IOException e) {
e.printStackTrace();
} finally {
if (connection != null){
connection.disconnect();
}
}
}
}).start();
return bitmap[0];
}
ImageSolution 방법 :
public static Bitmap ImageSolution (Bitmap bitmap, ImageView imageView){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int newWidth = imageView.getWidth();
int newHeight = imageView.getHeight();
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
height, matrix, true);
return resizedBitmap;
}
주소가 http://p2.zhimg.com/10/7b/107bb4894b46d75a892da6fa80ef504a.jpg입니다.
정말 고마워요.
나는 그것에 대해 많이 모른다.따라서 비트 맵을 반환하려면 어떻게해야합니까? AsyncTask를 사용하여 서버에서 비트 맵을 가져온 다음 UI를 새로 고칠 수 있습니까? AsyncTask 클래스는 어디에 두어야합니까? –
가장 쉬운 해결책은 runOnUIThread를 사용하여 비트 맵을 이미지 뷰에 배치하는 것입니다. 비트 맵이있을 때 스레드의 run()에서이를 수행하십시오. 마지막 성명서. – greenapps
정말 고마워요. 나는 그 문제를 해결했다. 나는 HttpCallbackListener를 사용했다. –