gpt4 book ai didi

使用相机 Intent 时,Android 局部变量丢失

转载 作者:行者123 更新时间:2023-11-29 16:21:20 24 4
gpt4 key购买 nike

我正在处理一个与相机使用有关的随机问题。在我调用相机 Intent 之前 - 我生成 UUID 以存储具有此名称的文件。我将此 UUID 存储在私有(private)变量中,如下所示:

private String requestedFileName;

相机完成后 - 我正在处理这个文件,看起来像这样:

public void onPictureTaken(int index)
{
//First of all - remember picture in database for reference.
FileData.InsertFile(mContext, UUID.fromString(requestedFileName));

//Reduce taken picture if needed, otherwise let it be original.
if (Preferences.getImageSize(mContext) > 0)
{
Imaging.scaleImageFile(mContext, requestedFileName, Preferences.getImageSize(mContext));
}

我看到用户报告问题异常归结为 requestedFileName == nullonPictureTaken 调用

Caused by: java.lang.NullPointerException
at java.util.UUID.fromString(UUID.java:210)
at com.idatt.views.FourImagesView.onPictureTaken(FourImagesView.java:151)
at com.idatt.views.TrailerUnitView.onPictureTaken(TrailerUnitView.java:233)

在我的手机 (Nexus S) 和模拟器上一切正常。但是用户报告了这个异常,我不确定为什么会这样。

最佳答案

我在 Nexus 手机和其他一些手机上看到过这种情况。如果您使用 DDMS 观察正在发生的事情,我敢打赌您会看到您的进程实际上正在终止然后重新启动。因此,您的本地状态正在丢失。您需要坚持它,因为如果您切换到新任务(并且大多数相机捕获 Intent 设置 NEWTASK 标志),Android 基本上可以终止您的进程并在需要时重新启动它。

如果你的类是一个Activity,你可以使用onSaveInstanceState()存储您的文件名,然后从您在 onCreate() 中获得的 Bundle 中读回它.

如果您不是 Activity,您可以使用 SharedPreferences 存储作为保存文件名的临时位置:

private static void saveTempFileName(Context context, String filename) {
SharedPreferences settings = context.getSharedPreferences("whatever", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("com.yourstuff.whatever", filename);
editor.commit();
}

关于使用相机 Intent 时,Android 局部变量丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7179706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com