1

SDカードから画像を読み取り、アクティビティ内の配列にパスを格納します。これは正常に機能し、この読み取りはメソッド内にあります。2回目は、別のアクティビティから同じメソッドを呼び出しましたが、カーソルがnullを返します........問題は「this」にあると言えますが、どこを変更すればよいかわかりません。メソッドのコードの下。

 public void LoadImagesFromSDCard()
{
    try
    {
        String[] projection = {MediaStore.Images.Media.DATA};           

        ContentResolver cr = this.getContentResolver();

        cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection,null,null,null);
        imageCount = cursor.getCount();
        imagePath = new String[imageCount + 1];
        cursor.moveToFirst();

        int cursor_index = 0;
        do
        {
                int id = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
                imagePath[cursor_index++] = cursor.getString(id);

        }while(cursor.moveToPosition(cursor_index));

     ........

そして私はこのような別の活動からそれを二度目に呼びます

    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] imageData, Camera c) {


        if (imageData != null) {

            Intent mIntent = new Intent();

            StoreByteImage(mContext, imageData, 50,"ImageName");
            mCamera.startPreview();
            setResult(FOTO_MODE, mIntent);
            CameraTaken = true;

            IS.LoadImagesFromSDCard();
            finish();


        }
    }
};

実際、これは情報のためのカメラ活動です。助けてくれてありがとう:)

これがlogcatです

E/CameraTest(19169): onCreate
E/CameraTest(19169): onResume
E/CameraTest(19169): surfaceCreated
D/CameraHardwareStub(   34): initHeapLocked: preview size=320x240
E/CameraTest(19169): surfaceChanged
D/CameraHardwareStub(   34): initHeapLocked: preview size=320x240
I/ActivityManager(   59): Displayed activity com.android.print/.CameraActivity: 1013   ms (total 1013 ms)
D/AudioSink(   34): bufferCount (4) is too small and increased to 12
I/global  (19169): Default buffer size used in BufferedOutputStream constructor. It would be better to be explicit if an 8k buffer is required.
E/Error reading file(19169): java.lang.NullPointerException
E/CameraTest(19169): surfaceDestroyed
E/CameraTest(19169): onStop
4

2 に答える 2

0

ここでソースコードを参照してください http://www.codeproject.com/Articles/107270/Recording-and-Playing-Video-on-Android

于 2012-05-25T11:09:06.933 に答える
0

私がやったことはうまくいっているので、私は問題を解決したと思います。ポイントは、最初のアクティビティがバックグラウンドにあり、最初のアクティビティからカメラ アクティビティを呼び出すことです。これにより、最初のアクティビティがバックグラウンドになります。そのため、マニフェスト ファイルの最初のアクティビティに android:launchMode="singleTask" を追加する必要がありました。次に、 IS.LoadImagesFromSDCard();の代わりに、バックグラウンドで実行されている最初のアクティビティを明示的に呼び出します。. そうすることで、最初のアクティビティで onCreate() の代わりに onNewIntent() を呼び出します。そして onNewIntent() 内で LoadFrom...() メソッドを呼び出します。

    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] imageData, Camera c) {


        if (imageData != null) {

            Intent mIntent = new Intent();
            Intent inent = new Intent();

            StoreByteImage(mContext, imageData, 50,"ImageName");
            mCamera.startPreview();
            setResult(FOTO_MODE, mIntent);
            CameraTaken = true;
            ImageSelectionIntent.setClassName("your package name", "your package name + class name");
            startActivity(intent);
            finish();

私の最初の活動には以下のコードがあります

 protected void onNewIntent(Intent intent) {
      super.onNewIntent(intent);
      setIntent(intent);        
      LoadImagesFromSDCard();
    }
        }
    }
};

下記リンク参照

2 つのアクティビティ間で通信し、一方が他方を呼び出してバックグラウンドで実行中

于 2012-05-25T12:20:17.943 に答える