我正在开发一个仅以纵向模式运行的Android应用程序。
在我的活动中,我有一个启动CameraActivity
的按钮。
如果我以纵向模式拍摄照片,一切都按预期工作,活动恢复,照片设置在ImageView
。
但是如果我在横向模式下拍照,我会得到一张风景照片(没关系),但是我正在丢失上下文并且应用程序崩溃(仅限于像LG G4S这样的少数设备)。
据我所知,在此设备上,活动重新启动而不是恢复。有谁知道为什么这只发生在一些设备上?任何人都可以给我一个解决方案来解决这个问题吗?
java.lang.RuntimeException:无法启动活动 ComponentInfo {} app.CustomFormScreenActivity: java.lang.NullPointerException:尝试调用虚方法 空对象上的'java.lang.String app.CustomFormSurvey.getParentId()' 参考
问题是在这个设备上拍照后,活动重新启动(而不是恢复)并且我丢失了Bundle(这就是应用程序抛出NullPointerException的原因)。
答案 0 :(得分:0)
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView)findViewById(R.id.textview);
if(Build.VERSION.SDK_INT == Build.VERSION_CODES.M){
int permissionResult = checkSelfPermission(Manifest.permission.READ_PHONE_STATE);
if(permissionResult == PackageManager.PERMISSION_DENIED){
if(shouldShowRequestPermissionRationale(Manifest.permission.READ_PHONE_STATE)) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("Need Permission")
.setMessage("This needs to READ_PHONE_STATE Permission. Continue?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1000);
}
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_LONG).show();
}
})
.create()
.show();
}
else{
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1000);
}
}
else{
tv.setText(GetDeviceUUID(getBaseContext()));
}
}
tv.setText(GetDeviceUUID(getBaseContext()));
}
public static String GetDeviceUUID(Context mContext){
*/
TelephonyManager mgr = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
final String ID = mgr.getDeviceId();
return ID;
}
@Override
public Context getBaseContext() {
return super.getBaseContext();
}
在您的活动代码下。 活动会在方向更改时重新创建,因此您需要手动处理它。