我想定一段代码,在一个界面 中有一个ImageView但是有两个ImageButton,一个负责打开文件寻找Sd卡中图片并把它显示在ImageView中。如果没有合格图片用户可以调用照像机照像将照片放在ImageView中显示,请教各位大虾们程序该如何写。
附上我写的一段代码,它老报The application has stopped unexception
package com.tmxk;import java.io.FileNotFoundException;import com.yarin.android.FileManager.FileManager;import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;public class second extends Activity{
 /** Called when the activity is first created. */
public String location;
private ImageButton btn1;
private ImageButton btn2;
private ImageButton btn3;
private ImageButton btn4;
private ImageButton btn5;
private EditText edt;
private EditText edt1;
private ImageView img1;
static int b=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Intent intent = getIntent();
        location =intent.getStringExtra("location");
        findview();
        btn1.setOnClickListener(new MyButtonListener());//打开gallay文件
        btn2.setOnClickListener(new MyButton2Listener());//照像打开照像机
    }
    public void findview(){
     btn1 = (ImageButton) findViewById(R.id.btn1);
     btn2 = (ImageButton) findViewById(R.id.btn2);
     btn3 = (ImageButton) findViewById(R.id.btn3);
     btn4 = (ImageButton) findViewById(R.id.btn4);
     btn5 = (ImageButton) findViewById(R.id.btn5);
     edt = (EditText) findViewById(R.id.edt0);
     edt1 =(EditText) findViewById(R.id.edt1);
     img1 = (ImageView) findViewById(R.id.img1);
    }
    class MyButtonListener implements OnClickListener {
    
     @Override
     public void onClick (View v)
     {
     //TODO Auto-generated method stub
     Intent intent = new Intent();
     /* 开启Pictures画面Type设定为image */ 
            intent.setType("image/*"); 
            /* 使用Intent.ACTION_GET_CONTENT这个Action */ 
            intent.setAction(Intent.ACTION_GET_CONTENT);  
            /* 取得相片后返回本画面 */ 
            startActivityForResult(intent, 1); 
            b=1;
     }
    }
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        if (resultCode == RESULT_OK) { 
            Uri uri = data.getData(); 
            Log.e("uri", uri.toString()); 
            ContentResolver cr = this.getContentResolver(); 
            try { 
                Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); 
                //ImageView imageView = (ImageView) findViewById(R.id.img1); 
                /* 将Bitmap设定到ImageView */ 
                img1.setImageBitmap(bitmap); 
            } catch (FileNotFoundException e) { 
                Log.e("Exception", e.getMessage(),e); 
            } 
        } 
        super.onActivityResult(requestCode, resultCode, data); 
    } 
       class MyButton2Listener implements OnClickListener {
    
     @Override
     public void onClick (View v)
     {
     //TODO Auto-generated method stub
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
     /* 开启Pictures画面Type设定为image */ 
      startActivityForResult(intent, 1);
            b=1;
     }
    }
       //@Override
       protected void onActivityResult1(int requestCode, int resultCode, Intent data)
       {
       super.onActivityResult(requestCode, resultCode, data);
       Bundle bundle = data.getExtras();
        Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
        img1.setImageBitmap(bitmap);
        
}    }

解决方案 »

  1.   

    05-11 10:36:11.743: INFO/ActivityManager(52): Starting activity: Intent { cmp=com.tmxk/.second (has extras) }
    05-11 10:36:12.263: INFO/ActivityManager(52): Displayed activity com.tmxk/.second: 450 ms (total 450 ms)
    05-11 10:36:15.682: INFO/ActivityManager(52): Starting activity: Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.android.camera/.Camera }
    05-11 10:36:15.772: INFO/ActivityManager(52): Start proc com.android.camera for activity com.android.camera/.Camera: pid=206 uid=10003 gids={1015, 1006, 2001, 3003}
    05-11 10:36:15.912: DEBUG/ddm-heap(206): Got feature list request
    05-11 10:36:16.042: INFO/WindowManager(52): Setting rotation to 1, animFlags=0
    05-11 10:36:16.462: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
    05-11 10:36:17.082: DEBUG/CameraService(31): CameraService::connect E (pid 206, client 0xd338)
    05-11 10:36:17.082: DEBUG/CameraService(31): Client::Client E (pid 206)
    05-11 10:36:17.082: DEBUG/CameraHardwareStub(31): initHeapLocked: preview size=176x144
    05-11 10:36:17.172: ERROR/MediaPlayerService(31):   error: -2
    05-11 10:36:17.172: ERROR/MediaPlayer(31): Unable to to create media player
    05-11 10:36:17.172: ERROR/CameraService(31): Failed to load CameraService sounds.
    05-11 10:36:17.172: ERROR/MediaPlayerService(31):   error: -2
    05-11 10:36:17.182: ERROR/MediaPlayer(31): Unable to to create media player
    05-11 10:36:17.182: ERROR/CameraService(31): Failed to load CameraService sounds.
    05-11 10:36:17.182: DEBUG/CameraService(31): Client::Client X (pid 206)
    05-11 10:36:17.182: DEBUG/CameraService(31): CameraService::connect X
    05-11 10:36:17.182: DEBUG/CameraService(31): getParameters(picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144)
    05-11 10:36:17.182: DEBUG/CameraService(31): getParameters(picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144)
    05-11 10:36:17.192: DEBUG/Camera(206): app passed NULL surface
    05-11 10:36:17.192: DEBUG/CameraService(31): setPreviewDisplay(0x0) (pid 206)
    05-11 10:36:17.192: DEBUG/CameraService(31): getParameters(picture-format=jpeg;picture-size=213x350;preview-format=yuv422sp;preview-frame-rate=15;preview-size=176x144)
    05-11 10:36:17.202: DEBUG/CameraService(31): setParameters(preview-size=176x144;preview-format=yuv422sp;jpeg-quality=85;picture-size=213x350;picture-format=jpeg;preview-frame-rate=15)
    05-11 10:36:17.202: DEBUG/CameraHardwareStub(31): initHeapLocked: preview size=176x144
    05-11 10:36:17.212: VERBOSE/camera(206): startPreview
    05-11 10:36:17.212: DEBUG/CameraService(31): startPreview (pid 206)
    05-11 10:36:17.212: DEBUG/CameraService(31): startCameraMode(0) (pid 206)
    05-11 10:36:17.212: DEBUG/CameraService(31): mSurface is not set yet.
    05-11 10:36:17.212: DEBUG/CameraService(31): startPreviewMode (pid 206)
    05-11 10:36:17.262: DEBUG/Camera-JNI(206): dataCallback(16, 0x112b30)
    05-11 10:36:17.323: VERBOSE/camera(206): Got first frame
    05-11 10:36:17.522: WARN/IInputConnectionWrapper(200): showStatusIcon on inactive InputConnection
    05-11 10:36:17.732: DEBUG/CameraService(31): setPreviewDisplay(0x1b930) (pid 206)
    05-11 10:36:17.772: INFO/ActivityManager(52): Displayed activity com.android.camera/.Camera: 2018 ms (total 2018 ms)
    05-11 10:36:17.792: INFO/ARMAssembler(52): generated scanline__00000077:03010104_00000009_00000000 [ 28 ipp] (47 ins) at [0x3bf030:0x3bf0ec] in 944722 ns
    05-11 10:36:17.912: DEBUG/qemud(35): fdhandler_accept_event: accepting on fd 10
    05-11 10:36:17.922: DEBUG/qemud(35): created client 0x150b8 listening on fd 15
    05-11 10:36:17.922: DEBUG/qemud(35): client_fd_receive: attempting registration for service 'sensors'
    05-11 10:36:17.922: DEBUG/qemud(35): client_fd_receive:    -> received channel id 8
    05-11 10:36:18.022: DEBUG/qemud(35): client_registration: registration succeeded for client 8
    05-11 10:36:18.033: DEBUG/SensorManager(206): found sensor: Goldfish 3-axis Accelerometer, handle=0
    05-11 10:36:18.033: DEBUG/qemud(35): fdhandler_event: disconnect on fd 15
    05-11 10:36:18.062: DEBUG/LocationManager(206): Constructor: service = android.location.ILocationManager$Stub$Proxy@44df3778
    05-11 10:36:19.412: VERBOSE/camera(206): Start autofocus.
    05-11 10:36:19.462: DEBUG/CameraService(31): autoFocus (pid 206)
    05-11 10:36:19.472: VERBOSE/camera(206): doSnap: mFocusState=1
    05-11 10:36:19.582: VERBOSE/camera(206): mAutoFocusTime = 152ms
    05-11 10:36:19.582: VERBOSE/camera(206): mLastOrientation = -1, orientation = 0
    05-11 10:36:19.602: DEBUG/CameraService(31): setParameters(preview-size=176x144;preview-format=yuv422sp;jpeg-quality=85;picture-size=213x350;rotation=0;picture-format=jpeg;preview-frame-rate=15)
    05-11 10:36:19.602: DEBUG/CameraHardwareStub(31): initHeapLocked: preview size=176x144
    05-11 10:36:19.612: DEBUG/CameraService(31): takePicture (pid 206)
    05-11 10:36:19.772: VERBOSE/camera(206): mShutterLag = 184ms
    05-11 10:36:19.922: DEBUG/Camera-JNI(206): dataCallback(256, 0x2d0d18)
    05-11 10:36:20.042: DEBUG/dalvikvm(52): GC freed 13895 objects / 655088 bytes in 255ms
    05-11 10:36:20.072: VERBOSE/camera(206): mShutterToRawCallbackTime = 299ms
    05-11 10:36:20.072: VERBOSE/camera(206): mPictureDisplayedToJpegCallbackTime = 6ms
    05-11 10:36:21.272: DEBUG/CameraService(31): stopPreview (pid 206)
    05-11 10:36:21.272: DEBUG/CameraService(31): stopPreview(), hardware stopped OK
    05-11 10:36:21.292: DEBUG/Camera-JNI(206): release camera
    05-11 10:36:21.292: DEBUG/CameraService(31): Client::disconnect() E (pid 206 client 0xd338)
    05-11 10:36:21.292: DEBUG/CameraService(31): hardware teardown
    05-11 10:36:21.292: DEBUG/CameraService(31): removeClient (pid 206) done
    05-11 10:36:21.292: DEBUG/CameraService(31): Client::disconnect() X (pid 206)
    05-11 10:36:21.302: DEBUG/CameraService(31): Client::~Client E (pid 31, client 0xd338)
    05-11 10:36:21.312: DEBUG/LocationManager(206): removeUpdates: listener = com.android.camera.Camera$LocationListener@44dca6d0
    05-11 10:36:21.322: DEBUG/CameraService(31): Client::disconnect() E (pid 31 client 0xd338)
    05-11 10:36:21.322: DEBUG/CameraService(31): Client::~Client X (pid 31)
    05-11 10:36:21.322: DEBUG/LocationManager(206): removeUpdates: listener = com.android.camera.Camera$LocationListener@44dca7d0
    05-11 10:36:21.332: INFO/WindowManager(52): Setting rotation to 0, animFlags=0
    05-11 10:36:21.462: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
    05-11 10:36:21.722: DEBUG/AndroidRuntime(200): Shutting down VM
    05-11 10:36:21.762: WARN/dalvikvm(200): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    05-11 10:36:21.762: ERROR/AndroidRuntime(200): Uncaught handler: thread main exiting due to uncaught exception
    05-11 10:36:21.852: ERROR/AndroidRuntime(200): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.tmxk/com.tmxk.second}: java.lang.NullPointerException
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3329)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3371)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.access$2700(ActivityThread.java:119)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1893)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.os.Handler.dispatchMessage(Handler.java:99)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.os.Looper.loop(Looper.java:123)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.main(ActivityThread.java:4363)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at java.lang.reflect.Method.invoke(Method.java:521)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at dalvik.system.NativeStart.main(Native Method)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200): Caused by: java.lang.NullPointerException
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at com.tmxk.second.onActivityResult(second.java:74)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.Activity.dispatchActivityResult(Activity.java:3828)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3325)
    05-11 10:36:21.852: ERROR/AndroidRuntime(200):     ... 11 more
    05-11 10:36:21.962: INFO/Process(52): Sending signal. PID: 200 SIG: 3
    05-11 10:36:21.975: INFO/dalvikvm(200): threadid=7: reacting to signal 3
    05-11 10:36:22.042: INFO/dalvikvm(200): Wrote stack trace to '/data/anr/traces.txt'
    05-11 10:36:23.843: DEBUG/dalvikvm(52): GC freed 1706 objects / 79424 bytes in 128ms
    05-11 10:36:23.912: INFO/Process(200): Sending signal. PID: 200 SIG: 9
    05-11 10:36:23.942: INFO/WindowManager(52): WIN DEATH: Window{44e185a8 com.tmxk/com.tmxk.second paused=false}
    05-11 10:36:23.952: INFO/ActivityManager(52): Process com.tmxk (pid 200) has died.
    05-11 10:36:23.972: INFO/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in com.tmxk
    05-11 10:36:24.172: WARN/IInputConnectionWrapper(206): showStatusIcon on inactive InputConnection
      

  2.   

    java.lang.NullPointerException 表示空数据出错位置:
    at com.tmxk.second.onActivityResult(second.java:74)
    也就是在second.java这个文件的第74行。位于onActivityResult里面,也就是返回时未获得数据。
      

  3.   

    把onActivityResult里面的代码改成onActivityResult1里面的代码。
      

  4.   

    楼主是否可以考虑换一种思路?
    我也调用过摄像程序拍照
    我的方法是,调用时,传参告诉摄像程序,文件要存储在内存卡中的哪个路径
    然后,如果摄像程序返回结果是拍摄成功的话
    根据前面的那个路径,从内存卡中的文件载入图像
    我之前有遇到一个问题,
    就是返回结果,那个data的值为null
    我猜楼主也是这个问题,这个断点调试一下就知道了