Android 从第一个活动到第二个活动的返回按钮会使应用程序崩溃
好的,这就是我的问题,我有两个活动,它们都是用来输入信息的。一个通向另一个。 当我在第二个活动中按下返回按钮时,应用程序崩溃,我不知道为什么 这是第一个活动的代码:Android 从第一个活动到第二个活动的返回按钮会使应用程序崩溃,android,android-activity,back,Android,Android Activity,Back,好的,这就是我的问题,我有两个活动,它们都是用来输入信息的。一个通向另一个。 当我在第二个活动中按下返回按钮时,应用程序崩溃,我不知道为什么 这是第一个活动的代码: import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; impor
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.support.design.widget.Snackbar;
public class Add_Score extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__score);
final Button Next = (Button)findViewById(R.id.buttonNext);
final Intent Add_Comment_Picture = new Intent(this, Add_Comment_Picture.class);
Next.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String score = ((EditText) findViewById(R.id.editText)).getText().toString();
String desc = ((EditText)findViewById(R.id.editTextDesc)).getText().toString();
if(score.compareTo("") != 0 && desc.compareTo("") != 0){
startActivity(Add_Comment_Picture);
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
}
else{
Snackbar.make(v , "Please fill in the score and description" , Snackbar.LENGTH_LONG).show();
}
}
});
}
}
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class Add_Comment_Picture extends AppCompatActivity {
static final int CAM_REQUEST = 1;
static final int RESULT_LOAD_IMAGE = 2;
ImageView imageView;
ImageButton button;
ImageButton buttonGallery;
String mCurrentPhotoPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__comment__picture);
button = (ImageButton) findViewById(R.id.imageButtonCamera);
imageView = (ImageView) findViewById(R.id.imageView);
buttonGallery = (ImageButton) findViewById(R.id.imageButtonGallery_f);
Calendar c = Calendar.getInstance();
String hours = Globals.getTimePadding(c.get(Calendar.HOUR));
String minutes = Globals.getTimePadding(c.get(Calendar.MINUTE));
String time = hours + ":" + minutes;
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
TextView scoreText = (TextView) findViewById(R.id.textViewScore);
scoreText.setText("Score: " + value);
TextView t = (TextView) findViewById(R.id.textViewDatec);
t.setText(time);
TextView descText = (TextView) findViewById(R.id.textViewDesc);
descText.setText(value2);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = getFile();
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(camera_intent, CAM_REQUEST);
}
});
buttonGallery.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent_gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent_gallery , RESULT_LOAD_IMAGE);
}
});
}
private String createFileName(){
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
return "JPEG_" + timeStamp + "_.jpg";
}
@Override
protected void onStart() {
super.onStart();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWritePermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
int hasReadPermission = checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA);
List<String> permissions = new ArrayList<String>();
if (hasWritePermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (hasReadPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.CAMERA);
}
if (!permissions.isEmpty()) {
requestPermissions(permissions.toArray(new String[permissions.size()]), 111);
}
}
}
private File getFile() {
File folder = new File("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos");
if (!folder.exists()) {
folder.mkdir();
}
mCurrentPhotoPath = createFileName();
File image_file = new File(folder,mCurrentPhotoPath);
return image_file;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CAM_REQUEST){
copyFile("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos/" + mCurrentPhotoPath , getFilesDir().toString() + "/" + mCurrentPhotoPath);
File d = new File("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos/" + mCurrentPhotoPath);
d.delete();
imageView.setImageDrawable(Drawable.createFromPath(getFilesDir().toString() + "/" + mCurrentPhotoPath));
}
if(requestCode == RESULT_LOAD_IMAGE){
if(data != null){
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
mCurrentPhotoPath = createFileName();
copyFile(picturePath, getFilesDir().toString() + "/" + mCurrentPhotoPath);
imageView.setImageDrawable(Drawable.createFromPath(getFilesDir().toString() + "/" + mCurrentPhotoPath));
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 111: {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
System.out.println("Permissions --> " + "Permission Granted: " + permissions[i]);
} else if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
System.out.println("Permissions --> " + "Permission Denied: " + permissions[i]);
}
}
}
break;
default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
public void copyFile(String path1 , String path2){
InputStream inStream = null;
OutputStream outStream = null;
try{
File file1 =new File(path1);
File file2 =new File(path2);
inStream = new FileInputStream(file1);
outStream = new FileOutputStream(file2); // for override file content
//outStream = new FileOutputStream(file2,<strong>true</strong>); // for append file content
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
if (inStream != null)inStream.close();
if (outStream != null)outStream.close();
System.out.println("File Copied..");
}catch(IOException e){
e.printStackTrace();
}
}
}
这是第二个活动的代码:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.support.design.widget.Snackbar;
public class Add_Score extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__score);
final Button Next = (Button)findViewById(R.id.buttonNext);
final Intent Add_Comment_Picture = new Intent(this, Add_Comment_Picture.class);
Next.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String score = ((EditText) findViewById(R.id.editText)).getText().toString();
String desc = ((EditText)findViewById(R.id.editTextDesc)).getText().toString();
if(score.compareTo("") != 0 && desc.compareTo("") != 0){
startActivity(Add_Comment_Picture);
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
}
else{
Snackbar.make(v , "Please fill in the score and description" , Snackbar.LENGTH_LONG).show();
}
}
});
}
}
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class Add_Comment_Picture extends AppCompatActivity {
static final int CAM_REQUEST = 1;
static final int RESULT_LOAD_IMAGE = 2;
ImageView imageView;
ImageButton button;
ImageButton buttonGallery;
String mCurrentPhotoPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__comment__picture);
button = (ImageButton) findViewById(R.id.imageButtonCamera);
imageView = (ImageView) findViewById(R.id.imageView);
buttonGallery = (ImageButton) findViewById(R.id.imageButtonGallery_f);
Calendar c = Calendar.getInstance();
String hours = Globals.getTimePadding(c.get(Calendar.HOUR));
String minutes = Globals.getTimePadding(c.get(Calendar.MINUTE));
String time = hours + ":" + minutes;
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
TextView scoreText = (TextView) findViewById(R.id.textViewScore);
scoreText.setText("Score: " + value);
TextView t = (TextView) findViewById(R.id.textViewDatec);
t.setText(time);
TextView descText = (TextView) findViewById(R.id.textViewDesc);
descText.setText(value2);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = getFile();
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(camera_intent, CAM_REQUEST);
}
});
buttonGallery.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent_gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent_gallery , RESULT_LOAD_IMAGE);
}
});
}
private String createFileName(){
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
return "JPEG_" + timeStamp + "_.jpg";
}
@Override
protected void onStart() {
super.onStart();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasWritePermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
int hasReadPermission = checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA);
List<String> permissions = new ArrayList<String>();
if (hasWritePermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (hasReadPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.CAMERA);
}
if (!permissions.isEmpty()) {
requestPermissions(permissions.toArray(new String[permissions.size()]), 111);
}
}
}
private File getFile() {
File folder = new File("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos");
if (!folder.exists()) {
folder.mkdir();
}
mCurrentPhotoPath = createFileName();
File image_file = new File(folder,mCurrentPhotoPath);
return image_file;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CAM_REQUEST){
copyFile("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos/" + mCurrentPhotoPath , getFilesDir().toString() + "/" + mCurrentPhotoPath);
File d = new File("sdcard/data/data/com.yuvaleliav1gmail.foodchain/photos/" + mCurrentPhotoPath);
d.delete();
imageView.setImageDrawable(Drawable.createFromPath(getFilesDir().toString() + "/" + mCurrentPhotoPath));
}
if(requestCode == RESULT_LOAD_IMAGE){
if(data != null){
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
mCurrentPhotoPath = createFileName();
copyFile(picturePath, getFilesDir().toString() + "/" + mCurrentPhotoPath);
imageView.setImageDrawable(Drawable.createFromPath(getFilesDir().toString() + "/" + mCurrentPhotoPath));
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 111: {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
System.out.println("Permissions --> " + "Permission Granted: " + permissions[i]);
} else if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
System.out.println("Permissions --> " + "Permission Denied: " + permissions[i]);
}
}
}
break;
default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
public void copyFile(String path1 , String path2){
InputStream inStream = null;
OutputStream outStream = null;
try{
File file1 =new File(path1);
File file2 =new File(path2);
inStream = new FileInputStream(file1);
outStream = new FileOutputStream(file2); // for override file content
//outStream = new FileOutputStream(file2,<strong>true</strong>); // for append file content
byte[] buffer = new byte[1024];
int length;
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
if (inStream != null)inStream.close();
if (outStream != null)outStream.close();
System.out.println("File Copied..");
}catch(IOException e){
e.printStackTrace();
}
}
}
您正在调用
startActivity
两次,一次是在添加额外内容之前,一次是在添加额外内容之后
startActivity(Add_Comment_Picture);
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
通过这种方式,您实际上是在开始活动之前,在意图中添加了额外的内容。只需删除第一个呼叫并保持如下状态:
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
这只是一条建议:用小写字母命名变量并使用驼峰大小写是一种常规做法(您可以称之为Add\u Comment\u Picture
,而不是addCommentPictureIntent
)。另外,当变量很多时,在末尾连接它所表示的类型是区分变量的一种好方法。您可以在线阅读更多关于约定的内容,但它们对于遵循约定并使代码更具可读性非常有用
您正在调用
startActivity
两次,一次是在添加额外内容之前,一次是在添加额外内容之后
startActivity(Add_Comment_Picture);
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
通过这种方式,您实际上是在开始活动之前,在意图中添加了额外的内容。只需删除第一个呼叫并保持如下状态:
Add_Comment_Picture.putExtra("score", score);
Add_Comment_Picture.putExtra("desc" , desc );
startActivity(Add_Comment_Picture);
这只是一条建议:用小写字母命名变量并使用驼峰大小写是一种常规做法(您可以称之为Add\u Comment\u Picture
,而不是addCommentPictureIntent
)。另外,当变量很多时,在末尾连接它所表示的类型是区分变量的一种好方法。您可以在线阅读更多关于约定的内容,但它们对于遵循约定并使代码更具可读性非常有用
这是
NPE
,所以我建议你去看看,以便更好地理解NPE
在您的情况下,bundle
是null
,这意味着您正试图从null
对象访问字符串。因此,最好在访问之前检查getIntent().getExtras()
是否为null
,以防止类似的崩溃
if(getIntent().getExtras() !=null){
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
...
}
或对于特定密钥的预先检查,您可以这样做
Bundle extras = getIntent().getExtras();
if(extras != null){
if (extras.containsKey("score") && extras.containsKey("desc")){
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
...
}
}
这是NPE
,所以我建议你去看看,以便更好地理解NPE
在您的情况下,bundle
是null
,这意味着您正试图从null
对象访问字符串。因此,最好在访问之前检查getIntent().getExtras()
是否为null
,以防止类似的崩溃
if(getIntent().getExtras() !=null){
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
...
}
或对于特定密钥的预先检查,您可以这样做
Bundle extras = getIntent().getExtras();
if(extras != null){
if (extras.containsKey("score") && extras.containsKey("desc")){
String value = getIntent().getExtras().getString("score");
String value2 = getIntent().getExtras().getString("desc");
...
}
}
使用下面的代码(您的问题是在放入额外内容之前开始活动):
使用下面的代码(您的问题是在放入额外内容之前开始活动):
可能重复的可能重复的可能重复的为什么你真的偷了我的答案,告诉我吧?@Vucko对不起,伙计。但我没有从任何人那里偷任何东西。我只是给出了我认为正确的答案。如果你把你的答案和我的答案相比较,我想你可以做到这一点。不管怎么说,我觉得“偷”这个词不太合适。我甚至不在乎,这太可怕了。如果你不在乎,你就不用“告诉我那件事”。如果你不在乎,你就不用“告诉我那件事”。我认为最可怕的是你的粗鲁。不管怎样,我只是关心尤瓦利亚夫的问题已经解决,如果尤瓦利亚夫将你的答案标记为已接受的答案,我将表示欢迎。你为什么真的偷了我的答案,告诉我吧?@Vucko抱歉的人。但我没有从任何人那里偷任何东西。我只是给出了我认为正确的答案。如果你把你的答案和我的答案相比较,我想你可以做到这一点。不管怎么说,我觉得“偷”这个词不太合适。我甚至不在乎,这太可怕了。如果你不在乎,你就不用“告诉我那件事”。如果你不在乎,你就不用“告诉我那件事”。我认为最可怕的是你的粗鲁。不管怎样,我只关心YuvalEliav的问题已经解决,如果YuvalEliav将您的答案标记为已接受的答案,我将表示欢迎。