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

标签 android android-image

我正在处理一个与相机使用有关的随机问题。在我调用相机 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/

相关文章:

android - 如何在 ListView 高度设置为 fill_parent 后显示其他 View

Android 保存文件权限被拒绝

android - 从适用于 Android 的 Adob​​e Illustrator 导出 .png 时应选择哪些选项?

java - 使用 DrawerLayout 后退按钮返回到上一个 Activity

java - RxJava 全局处理程序和 Android Vitals

android - 如何在使用 Android 填充 ListView 时停止显示 TextView 的 setEmptyView?

android - 将我的 Android 手机连接到 DDMS SDK 实用程序

android - 单击按钮后将一张图片替换为另一张图片

android - 在android中更改图像形状

android - 如何在 Android 中检查图像是纵向还是横向?