我正在处理与相机使用有关的随机问题。在我调用相机意图之前 - 我生成UUID来存储具有此名称的文件。我将这个UUID存储在私有变量中,如下所示:
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));
}
我看到用户报告问题异常,当 onPictureTaken 调用
时归结为 requestedFileName == nullCaused 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)和模拟器中的一切都很好用。但是用户报告了这个例外,我不确定为什么会发生这种情况..
答案 0 :(得分:3)
我已经看到这种情况发生在Nexus手机和其他一些手机上。如果您使用DDMS观察正在发生的事情,我敢打赌您会看到您的进程实际上已被终止然后重新启动。因此,你的当地国家正在迷失。你需要坚持下去,因为Android可以基本上杀死你的进程并在你想要的时候重新启动它,如果你切换到一个新任务(并且大多数相机捕获意图设置NEWTASK标志)。
如果您的课程是Activity
,则可以使用onSaveInstanceState()来存储您的文件名,然后从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();
}
商店作为保存文件名的临时地点:
{{1}}
答案 1 :(得分:1)
正如@jeffamaphone所说,您可能在应用程序配置更改方面遇到问题。当发生影响应用程序运行时环境的事件时,会发生应用程序配置更改。最值得注意的是:方向改变或键盘隐藏/显示。
尝试此操作:启动您的应用,调用相机应用(通过您的应用操作),更改方向,返回您的应用(通过适当的操作)。这个序列是否会产生错误?然后你遇到配置更改的问题 - 当方向通常发生变化时(取决于你的应用程序设置)Android系统重新启动(杀死并创建新实例)你的Activity,这可能会创建所有新视图(没有设置UUID)。