恢复用户图像后,如何将其保存在 Drawable 中
Posted
技术标签:
【中文标题】恢复用户图像后,如何将其保存在 Drawable 中【英文标题】:Once you have recovered an image of the user how to save it in Drawable 【发布时间】:2019-01-24 18:00:06 【问题描述】:一旦你恢复了用户的图像,如何将它保存在应用程序中的drawable中? 用于其他活动。
从用户的图库中检索图像并将其放入 ImageView 中:
public class Profil extends AppCompatActivity
private Button btnImport;
public ImageView selectedImg;
static final int RESULT_LOAD_IMG = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.profil);
ImageView btn_supervisor = findViewById(R.id.btn_supervisor);
ImageView btn_add = findViewById(R.id.btn_add);
ImageView btn_profile = findViewById(R.id.btn_profile);
btnImport = findViewById(R.id.modifie_button);
selectedImg = findViewById(R.id.modifie_image);
btnImport.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, RESULT_LOAD_IMG);
);
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data)
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == RESULT_OK)
try
final Uri imageUri = data.getData();
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
selectedImg.setImageBitmap(selectedImage);
catch (FileNotFoundException e)
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Une erreur s'est produite",Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(),"Vous n'avez pas choisi d'image", Toast.LENGTH_LONG).show();
提前谢谢你。
【问题讨论】:
什么意思??(请多解释),我想你不能这样,你可以把它保存在本地或服务器。 是的,如何创建将存储在我的数据库中的图像变量? 【参考方案1】:您不应该保存图像可绘制/位图以在其他活动中使用。相反,您可以将图像文件的 Uri 保存在应用程序类中的某个变量或某些静态属性持有者中,然后可以跨所有活动从该 Uri 获取位图。
【讨论】:
好吧,怎么做?请 如何创建将存储在我的数据库中的图像变量? 您没有在数据库中保存变量。您将 Uri 表示的路径保存为数据库中的文本。如果您使用过 SharedPrefs,请尝试将其保存在 SharedPrefs 中。SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); prefs.edit().putString("imageUri", uri.getPath()).apply();
然后您可以使用 -SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); String imagePath = prefs.getString("imageUri"); Uri imageUri = Uri.parse(imagePath);
获取此 uri
为此,您需要在 Sqlite 数据库中创建一个表并为所有 uris 插入条目。如果想了解如何使用 sqlite db,可以参考developer.android.com/training/data-storage/sqlite。【参考方案2】:
你可以使用 BitmapDrawable 来实现这个
//将位图转换为drawable。
Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);
【讨论】:
【参考方案3】:您可以将位图转换为字节数组并保存在领域数据库中。
像这样:
Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
注意:Realm 支持以下字段类型:boolean、byte、short、ìnt、long、float、double、String、Date 和 byte[]
您也可以使用this 在android 中进行领域配置。
您可以通过以下方式将 imageview 转换为 bitmap:
imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();
【讨论】:
以上是关于恢复用户图像后,如何将其保存在 Drawable 中的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据保存到sqlite当没有网络并在flutter中恢复网络连接后发送到服务器
在recycleview时间轴中为每个视图添加drawable