ここでAndroidを初めて使用します(およびプログラミング全般)
この例に従って、遅延画像読み込みアダプターを作成しようとしています : http://thinkandroid.wordpress.com/2012/06/13/lazy-loading-images-from-urls-to-listviews/ Student の代わりに Album" を使用しますが、それ以外はほとんど同じです。
アダプターから次のように呼び出すと:
Album getItem(int position) {
return items.get(position);
}
「タイプの不一致: オブジェクトからアルバムに変換できません」というメッセージが表示されます。サンプルからコードをそのままコピーしようとしましたが、同じエラーが発生しました..
誰かが私が間違っていることと、それを修正する方法を説明してもらえますか? ありがとうございました。
コードは次のとおりです。
アルバムのクラス:
package another.music.player;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.util.Log;
public class Album {
private String album;
private String imageUri;
private Bitmap image;
private AlbumAdapter albumAdapter;
public Album(String album, String imageUri) {
this.album = album;
this.imageUri = imageUri;
// Default image
this.album = null;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getImageUri() {
return imageUri;
}
public void setImageUri(String imageUri) {
this.imageUri = imageUri;
}
public Bitmap getImage() {
return image;
}
public AlbumAdapter getAdapter() {
return albumAdapter;
}
public void setAdapter(AlbumAdapter albumAdapter) {
this.albumAdapter = albumAdapter;
}
public void loadImage(AlbumAdapter albumAdapter) {
// Hold a reference to the adapter
this.albumAdapter = albumAdapter;
if (imageUri != null && !imageUri.equals("")) {
new ImageLoadTask().execute(imageUri);
}
}
// Async task
private class ImageLoadTask extends AsyncTask<String, String, Bitmap> {
@Override
protected void onPreExecute() {
Log.i("ImageLoadTask", "Loading Image..");
}
// Param[0] is Image URI
protected Bitmap doInBackground(String... param) {
Log.i("ImageLoadTask", "Attempting to load image Uri: " + param[0]);
try {
Bitmap bitmap = ImageService.getBitmapFromURI(param[0]);
return bitmap;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
protected void onProgressUpdate(String... progress) {
// No Op
}
protected void onPostExecute(Bitmap ret) {
if (ret != null) {
Log.i("ImageLoadTask", "Successfully loaded" + album + " image");
image = ret;
if (albumAdapter != null) {
// When image is loaded, notify the adapter
albumAdapter.notifyDataSetChanged();
}
} else {
Log.e("ImageLoadTask", "Failed to load " + album + " image");
}
}
}
}
AlbumAdapter クラス:
package another.music.player;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class AlbumAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List items = new ArrayList();
public AlbumAdapter(Context context, List items) {
mInflater = LayoutInflater.from(context);
this.items = items;
}
public int getCount() {
return items.size();
}
public Album getItem(int position) {
return items.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
Album album = items.get(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row_layout, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(album.getName());
if (s.getImage() != null) {
holder.pic.setImageBitmap(s.getImage());
} else {
// MY DEFAULT IMAGE
holder.pic.setImageResource(R.drawable.generic_profile_man);
}
return convertView;
}
static class ViewHolder {
TextView name;
ImageView pic;
}
}