gpt4 book ai didi

StartActivityForResult 上的 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-01 12:53:58 26 4
gpt4 key购买 nike

我是 Android 编程新手,我正在尝试实现一个应用程序,该应用程序有两个按钮来打开相机并制作照片以及打开图库并选择照片。

我知道如何在设计器模式下使用 onClick() 来做到这一点,但问题是,我不想将所有内容都放在一个大类中。因此,我创建了两个不同的类来处理相机和图库选择。

这是我的代码:

public class Camera extends Activity implements Button.OnClickListener {

private static final int CAMERA_REQUEST = 1888;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap original = (Bitmap) extras.get("data");
ImageView iv = (ImageView) findViewById(R.id.oko);
iv.setImageBitmap(original);
}
}

@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
}

画廊类:

public class Gallery extends Activity implements Button.OnClickListener {

@Override
public void onActivityResult(int requestCode , int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
if(requestCode ==1) {
ImageView oko = (ImageView)findViewById(R.id.oko);
oko.setImageURI(data.getData()); // pobranie z galerii
Bitmap okobit = ((BitmapDrawable) oko.getDrawable()).getBitmap();
ImageView iv = (ImageView) findViewById(R.id.oko);
iv.setImageBitmap(okobit);
}
}
}

@Override
public void onClick(View view) {
Intent gallery = new Intent();
gallery.setType("image/*");
gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(gallery, "Select Image"), 1); // here is a NULL exception
}
}

以及使用这些类的方法:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button gallery = (Button)findViewById(R.id.gallery);
gallery.setOnClickListener(new Gallery());

Button camera = (Button)findViewById(R.id.camera);
camera.setOnClickListener(new Camera());
}

现在我想知道为什么会出现空指针异常?两者,在startActivityForResult中与Camera连接,startActivityForResult与Gallery连接

java.lang.NullPointerException
at android.app.Activity.startActivityForResult(Activity.java:3390)
at android.app.Activity.startActivityForResult(Activity.java:3351)
at com.example.teczowka.app.Gallery.onClick(Gallery.java:39)

我的 xml 文件:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.teczowka.app.MainActivity"
android:background="#dbff56"
android:name="android.hardware.camera"
android:required="true">

<ImageView
android:layout_width="550dp"
android:layout_height="350dp"
android:id="@+id/oko"
android:visibility="visible" />

<Button
android:layout_width="110dp"
android:layout_height="50dp"
android:text="Recognize"
android:id="@+id/recognize"
android:layout_alignParentBottom="true" />

<Button
android:layout_width="110dp"
android:layout_height="50dp"
android:text="Gallery"
android:id="@+id/gallery"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

<Button
android:layout_width="110dp"
android:layout_height="50dp"
android:text="Camera"
android:id="@+id/camera"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:longClickable="true"
android:onClick="onClick" />

最佳答案

您的其他 Activity (图库和相机)将需要一个布局,如果没有布局, Activity 创建将会失败。

我建议您不要让 Gallery 和 Camera 扩展 Activity 类,而是可以发送父 Activity 的上下文并使用它来启动 Activity

更新:这是解决方案,希望有帮助

主要 Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_camera);

Button gallery = (Button) findViewById(R.id.gallery);
gallery.setOnClickListener(new Gallery(this));

Button camera = (Button) findViewById(R.id.camera);
camera.setOnClickListener(new Camera(this));

}

@Override
public void onActivityResult(int requestCode , int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
if(requestCode ==1) {
ImageView oko = (ImageView)findViewById(R.id.oko);
oko.setImageURI(data.getData()); // pobranie z galerii
Bitmap okobit = ((BitmapDrawable) oko.getDrawable()).getBitmap();
ImageView iv = (ImageView) findViewById(R.id.oko);
iv.setImageBitmap(okobit);
}
}
}

画廊类

public class Gallery implements View.OnClickListener {

private Activity mContext;

public Gallery(Activity activity){
this.mContext = activity;
}

@Override
public void onClick(View view) {
Intent gallery = new Intent();
gallery.setType("image/*");
gallery.setAction(Intent.ACTION_GET_CONTENT);
mContext.startActivityForResult(Intent.createChooser(gallery, "Select Image"), 1); // here is a NULL exception
}
}

相机类别

public class Camera implements View.OnClickListener {
private static final int CAMERA_REQUEST = 1888;
private Activity mContext;

public Camera(Activity activity) {
this.mContext = activity;
}

@Override
public void onClick(View view) {
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mContext.startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
}

关于StartActivityForResult 上的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026855/

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