Android设置图像位图问题
我正在做一个与web服务器通信并下载一些照片的项目。我希望这些照片在下载后显示在listview上,但这给我带来了一个Android设置图像位图问题,android,image,bitmap,Android,Image,Bitmap,我正在做一个与web服务器通信并下载一些照片的项目。我希望这些照片在下载后显示在listview上,但这给我带来了一个NullPointerException。以下是我正在使用的代码: private ArrayList <HashMap<String, Object>> items; private static final String NAMEKEY = "bookname"; private static final String INFOK
NullPointerException
。以下是我正在使用的代码:
private ArrayList <HashMap<String, Object>> items;
private static final String NAMEKEY = "bookname";
private static final String INFOKEY = "bookprice";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mystampii_layout);
}
});
ListView listView = (ListView)findViewById(R.id.mystampii_listview);
items = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> hm;
final Bitmap b = BitmapFactory.decodeFile("/sdcard/MediaCard2a44bb1f782925923195ee546e7ef395.jpg", null);
ImageView brum = (ImageView) findViewById(R.id.main_img);
brum.setImageBitmap(b);
hm = new HashMap<String, Object>();
hm.put(NAMEKEY, "Moto GP 2010");
hm.put(INFOKEY, "98 Stampii");
items.add(hm);
// Define SimpleAdapter and Map the values with Row view R.layout.listbox
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.main_listview,
new String[]{NAMEKEY,INFOKEY}, new int[]{R.id.main_img,R.id.main_name, R.id.main_info});
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
私有数组列表项;
私有静态最终字符串NAMEKEY=“bookname”;
私有静态最终字符串INFOKEY=“bookprice”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mystampii_布局);
}
});
ListView ListView=(ListView)findViewById(R.id.mystampii_ListView);
items=newarraylist();
HashMap-hm;
最终位图b=BitmapFactory.decodeFile(“/sdcard/MediaCard2a44bb1f782925923195ee546e7ef395.jpg”,null);
ImageView brum=(ImageView)findViewById(R.id.main\u img);
brum.setImageBitmap(b);
hm=新的HashMap();
hm.put(姓名钥匙,“2010年摩托车大奖赛”);
hm.put(信息键,“98 Stampii”);
添加项目(hm);
//定义SimpleAdapter并使用Row view R.layout.listbox映射值
SimpleAdapter=new SimpleAdapter(此,项,R.layout.main\u列表视图,
新字符串[]{NAMEKEY,INFOKEY},新int[]{R.id.main\u img,R.id.main\u name,R.id.main\u info});
setAdapter(适配器);
listView.setChoiceMode(listView.CHOICE\u MODE\u SINGLE);
}
我知道,为什么我会得到NullPointerException:因为我的ImageView brum
被放置在R.layout.main\u listview
中,我正在设置为此活动R.layout.mystampii\u layout
的内容。我真的知道如何将SD卡中的图像设置为另一个布局中的ImageView
有什么建议可以这样做,或者如何在listview中显示从SD卡下载的图像
谢谢你的帮助 试试简单的代码::
ImageView image = (ImageView) findViewById(R.id.test_image);
FileInputStream in;
BufferedInputStream buf;
try {
in = new FileInputStream("/sdcard/test2.png");
buf = new BufferedInputStream(in);
Bitmap bMap = BitmapFactory.decodeStream(buf);
image.setImageBitmap(bMap);
if (in != null) {
in.close();
}
if (buf != null) {
buf.close();
}
} catch (Exception e) {
Log.e("Error reading file", e.toString());
}
实现所需功能的最佳方法是实现自定义适配器,并在适配器中使用.getView()充气R.layout.main\u listview创建自定义适配器,如下所示:
import java.util.ArrayList;
import com.stampii.stampii.R;
import com.stampii.stampii.comm.rpc.CollectionRPCPacket;
import com.stampii.stampii.comm.rpc.UserDatabaseHelper;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyArrayAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] names;
CollectionRPCPacket rpcPacket;
Cursor cursor;
String title;
public MyArrayAdapter(Activity context, String[] names) {
super(context, R.layout.main_listview, names);
this.context = context;
this.names = names;
}
// static to save the reference to the outer class and to avoid access to
// any members of the containing class
static class ViewHolder {
public ImageView imageView;
public TextView textView,textView2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder will buffer the assess to the individual fields of the row
// layout
ViewHolder holder;
// Recycle existing view if passed as parameter
// This will save memory and time on Android
// This only works if the base layout for all classes are the same
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.main_listview, null, true);
holder = new ViewHolder();
holder.textView = (TextView) rowView.findViewById(R.id.main_name);
holder.textView2 = (TextView) rowView.findViewById(R.id.main_info);
holder.imageView = (ImageView) rowView.findViewById(R.id.main_img);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
final Bitmap b = BitmapFactory.decodeFile("/sdcard/MediaCard2a44bb1f782925923195ee546e7ef395.jpg", null);
holder.textView.setText();
holder.textView2.setText("");
holder.imageView.setImageBitmap(b);
return rowView;
}
}
希望有帮助 查看throwin me异常
java.lang.ArrayIndexOutOfBoundsException
如果您实现了适配器,您可以使用getView:,以便在放置ImageView和设置所需的所有内容的位置扩大布局
ListView lv1 = (ListView)findViewById(R.id.listViewOne);
String[] names = new String[] { "ONE", "TWO", "THREE"};
lv1.setAdapter(new MyArrayAdapter(this, names));