【问题标题】:What is wrong in this code to use camera in android studio? [closed]这段代码在android studio中使用相机有什么问题? [关闭]
【发布时间】:2017-01-01 07:09:38
【问题描述】:

我复制了以下代码: https://developer.android.com/training/camera/photobasics.html

我还在清单文件中添加了权限。但是应用程序一启动就崩溃了。这里有什么问题?

MainActivity.java

import android.content.Intent;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity
{
static final int REQUEST_IMAGE_CAPTURE = 1;
ImageView  mImageView=(ImageView) findViewById(R.id.img);

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button b1=(Button) findViewById(R.id.imgButton);


    //
    View.OnClickListener imgButtonClickListener=new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            dispatchTakePictureIntent();
        }
    };
    //

    b1.setOnClickListener(imgButtonClickListener);

}

private void dispatchTakePictureIntent()
{
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null)
    {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
    {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

}

MainActivity.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.nirvan.cameraexample.MainActivity">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/img"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="177dp" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="IMG"
    android:id="@+id/imgButton"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="76dp" />


</RelativeLayout>

【问题讨论】:

  • 您的日志中有哪些错误消息?
  • 如果崩溃了,会有异常是什么?始终在问题中包含错误消息和异常。
  • 有投票结束这个问题。请编辑问题并提供有关您遇到的异常的更多数据,并说明您如何尽快编译代码。

标签: android android-camera android-camera-intent android-camera2


【解决方案1】:

只需换行

ImageView mImageView=(ImageView) findViewById(R.id.img);

ImageView mImageView;

并在onCreate() 中添加以下行

mImageView=(ImageView) findViewById(R.id.img);

【讨论】:

    【解决方案2】:

    线

    ImageView mImageView=(ImageView) findViewById(R.id.img);
    

    应该在您的 setContentView 之后的 onCreate()

    setContentView(R.layout.activity_main);
    ImageView mImageView=(ImageView) findViewById(R.id.img);
    

    该行将findViewById(R.id.img) 的结果分配给mImageView,它需要在您将setContentView(R.layout.activity_main) 中的布局膨胀后运行。

    【讨论】:

    • 如果添加整行 ImageView mImageView=(ImageView) findViewById(R.id.img);在 oncreate() 中,mImageView 将无法在 onResultActivity() 中访问。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多