map.put可以输入bitmap吗
时间: 2023-06-24 22:05:27 浏览: 58
在 Java 中,`Map` 是一个键值对的集合,其中键和值都是对象。`put` 方法的参数类型为键和值,通常情况下,键和值都应该是对象。如果您想将 `Bitmap` 对象放入 `Map` 中,可以将其作为值进行插入,例如:
```java
Map<String, Bitmap> map = new HashMap<>();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_bitmap);
map.put("myKey", bitmap);
```
这里,我们将 `Bitmap` 对象作为值插入了 `Map` 中,并使用字符串 `"myKey"` 作为键。
相关问题
private void initView(){ permission(); ivAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openCarema(); } }); int oid = getIntent().getIntExtra("oid", 1); imgFile = new File(path); btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String name = et_name.getText().toString(); String suit = et_zhengzhuang.getText().toString(); String effect = et_effect.getText().toString(); String notice = et_notice.getText().toString(); String use_info = et_num.getText().toString(); //把图片先转化成bitmap格式 BitmapDrawable drawable = (BitmapDrawable) ivAdd.getDrawable(); Bitmap bitmap = drawable.getBitmap(); //二进制数组输出流 ByteArrayOutputStream byStream = new ByteArrayOutputStream(); //将图片压缩成质量为100的PNG格式图片 bitmap.compress(Bitmap.CompressFormat.JPEG, 50, byStream); //把输出流转换为二进制数组 byte[] byteArray = byStream.toByteArray(); String base64 = Base64.encodeToString(byteArray, Base64.URL_SAFE); HashMap<String, Object> map = new HashMap<>(); // map.put("img",byteArray); map.put("img",base64); map.put("name",name); map.put("suit",suit); map.put("oid",oid); map.put("effect",effect); map.put("notice",notice); map.put("useInfo",use_info); RequestBody requestBody = getRequestBody(map); add(requestBody); } }); }
这是一个 Android 中的 initView() 方法,其中包含了一些 UI 控件的初始化和点击事件的处理。这个方法中包含了一个拍照功能的调用 openCarema(),以及一个将图片转化成 base64 格式的操作。最后,这个方法使用 Retrofit 发送一个 HTTP POST 请求,将上传的图片和其他信息提交给服务器。
Cursor cursor=db.rawQuery("select*from course",null); if(cursor.getCount()>0){ List<Map<String,Object>> mapList=new ArrayList<Map<String,Object>>(); cursor.moveToFirst(); while(cursor.moveToNext()){ Map<String,Object> listitem=new HashMap<String,Object>(); listitem.put("cnumber",cursor.getInt(1)); listitem.put("cname",cursor.getString(2)); listitem.put("cclass",cursor.getString(3)); listitem.put("cteacher",cursor.getString(4)); listitem.put("cterm,",cursor.getString(5)); String cimage=cursor.getString(6); imageView.setImageResource(Integer.parseInt(cimage)); mapList.add(listitem); } SimpleAdapter adapter=new SimpleAdapter(MainActivity3.this,mapList,R.layout.item,new String[]{"cname","cclass","cteacher","cteram"},new int[]{R.id.textView11,R.id.textView12,R.id.textView13,R.id.textView14}); listView.setAdapter(adapter);现在cursor有一条数据,输入这段代码listview什么都不显示
根据你提供的代码,我发现可能出现了以下几个问题:
1. 在 while 循环中,将数据存储到 mapList 中后,没有调用 adapter.notifyDataSetChanged() 方法来通知 ListView 更新数据。可以在 while 循环外面调用该方法,例如:
```
while (cursor.moveToNext()) {
// 将数据存储到 mapList 中
// ...
}
adapter.notifyDataSetChanged();
```
2. 在将图片设置到 ImageView 中时,使用了 Integer.parseInt(cimage) 方法,但是 cimage 可能不是一个有效的整数字符串,导致出现异常。可以使用其他方式来设置图片,例如:
```
// 从本地文件或网络下载图片,然后通过以下方法设置到 ImageView 中
// imageView.setImageBitmap(bitmap);
```
3. 在 SimpleAdapter 的构造方法中,指定了要显示的数据项名称为 "cteram",但是实际上应该是 "cterm",可能是因为笔误导致的。可以修改为以下代码:
```
SimpleAdapter adapter = new SimpleAdapter(
MainActivity3.this,
mapList,
R.layout.item,
new String[]{"cname", "cclass", "cteacher", "cterm"}, // 正确的数据项名称
new int[]{R.id.textView11, R.id.textView12, R.id.textView13, R.id.textView14}
);
```
希望以上解决方案能够帮助到你。