0

アニメーションのある時点で自分のビューに自分のイメージを設定しようとしています。ただし、nullpointer 例外が発生します。初歩的な間違いを犯していることはわかっていますが、何をすべきかわかりません...画像をonStart()に設定すると正常に動作します...しかし、画像をonAnimationEndに設定するとnullポインターが取得されます。 ..助けてください!

public class PhotoSyncActivity extends Activity implements AnimationListener {

private Bitmap[] images;
private AnimationPhotoViewA apa1;
private AnimationPhotoViewB apa2;
private static final int move1 = 1;
private static final int move2 = 2;
private static final int move3 = 3;
private static final int move4 = 4;
private static final int move5 = 5;
private int animationmove = 0;
ArrayList<String> photoPaths;
Bitmap resizedimage2= null;




@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.photo_sync_screen);
    ArrayList<String> photoPaths = new ArrayList<String>();
    photoPaths = getAllPhotos(Environment.getExternalStorageDirectory(),
            photoPaths);
    images = new Bitmap[photoPaths.size()];
    Log.v(ACCESSIBILITY_SERVICE, "photo array!" + photoPaths);

    apa1 = (AnimationPhotoViewA) findViewById(R.id.animation_viewA);
    apa2 = (AnimationPhotoViewB) findViewById(R.id.animation_viewB);
    animationmove = PhotoAnimationProcess.moveOne(this,apa1,animationmove);

    File imgFile1 = new File(photoPaths.get(0));

    File imgFile2 = new File(photoPaths.get(1));

    if (imgFile1.exists() && imgFile2.exists())
    {
        images[0] = decodeFile(imgFile1);
        images[1] = decodeFile(imgFile2);
    }
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();

    // RESIZE THE IMAGE TO A STANDARD SIZE
    Bitmap resizedimage1 = setPictureSize(images[0]);
    resizedimage2 = setPictureSize(images[1]);

    // SET IMAGE IN THE VIEW

    apa1.setImageBitmap(resizedimage1);
    apa2.setImageBitmap(resizedimage2);//HERE THE CODE WORKS WITH NO PROBLEM!!

private ArrayList<String> getAllPhotos(File dir,ArrayList<String> photoPaths)
        {
    File[] files = dir.listFiles();
    if (files != null)
    {
        for (File f : files) 
        {
            if (f != null)
            {
                if (f.isDirectory())
                {
                    getAllPhotos(f, photoPaths);
                } else
                {
                    String filePath = f.getAbsolutePath();
                    if (filePath.matches(".*\\.(jpeg|jpg)$"))
                    {
                        photoPaths.add(filePath);
                    }
                }
            }
        }
    }
    return photoPaths;
}

public void onAnimationStart(Animation animation)
{
    // TODO Auto-generated method stub

}

public void onAnimationEnd(Animation animation)
{
    // TODO Auto-generated method stub

    switch (animationmove) 
    {
    case move1:
        animationmove = PhotoAnimationProcess.moveOne(this, apa1, animationmove);
        break;
    case move2:

        //HERE I AM GETTING THE NULL POINTER WHEN SETTING IMAGEapa2.setImageBitmap(resizedimage2);
        animationmove = PhotoAnimationProcess.moveTwo(this,apa1,animationmove);

        break;
    case move3:
        animationmove = PhotoAnimationProcess.moveThree(this,apa1,animationmove);
        break;
    case move4:
        animationmove = PhotoAnimationProcess.moveFour(this,apa1,animationmove);;
        break;
    case move5:
        animationmove = PhotoAnimationProcess.moveFive(this,apa1,animationmove);
        break;

    default:
        break;
    }

    Log.v(ALARM_SERVICE, "Animation Type" + animation.toString());

}



public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub

}


// Downgrade the photos
private Bitmap decodeFile(File f)
{
    Bitmap ret = null;
    try 
    {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 70;

        // Find the correct scale value. It should be the power of 2.
        int scale = 1;
        while (o.outWidth / scale / 2 >= REQUIRED_SIZE
                && o.outHeight / scale / 2 >= REQUIRED_SIZE)
            scale *= 2;

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        ret = BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();

    }
    return ret;

}

private Bitmap setPictureSize(Bitmap bitmapOrg)
{

    int width = bitmapOrg.getWidth();

    int height = bitmapOrg.getHeight();

    int newWidth = 250;

    int newHeight = 250;

    // calculate the scale - in this case = 0.4f

    float scaleWidth = ((float) newWidth) / width;

    float scaleHeight = ((float) newHeight) / height;

    Matrix matrix = new Matrix();

    matrix.postScale(scaleWidth, scaleHeight);
    // matrix.postRotate(x);
    // this will create image with new size
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width,
            height, matrix, true);
    return resizedBitmap;
}


}

エラー:

04-08 21:27:14.764: E/AndroidRuntime(1654): FATAL EXCEPTION: main
04-08 21:27:14.764: E/AndroidRuntime(1654): java.lang.NullPointerException
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.graphics.Canvas.throwIfRecycled(Canvas.java:972)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.graphics.Canvas.drawBitmap(Canvas.java:998)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at com.uiu.registrationwizard.activities.AnimationPhotoViewB.drawPicture(AnimationPhotoViewB.java:79)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at com.uiu.registrationwizard.activities.AnimationPhotoViewB.onDraw(AnimationPhotoViewB.java:67)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.View.draw(View.java:7014)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.View.draw(View.java:7017)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.View.draw(View.java:7017)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.View.draw(View.java:7017)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2054)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewRoot.draw(ViewRoot.java:1632)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.os.Looper.loop(Looper.java:150)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at android.app.ActivityThread.main(ActivityThread.java:4385)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at java.lang.reflect.Method.invokeNative(Native Method)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at java.lang.reflect.Method.invoke(Method.java:507)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
04-08 21:27:14.764: E/AndroidRuntime(1654):     at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

0

見た目からするresizedImage2と、 onAnimationEnd に設定すると null になります (注:デバッガーを使用してこれを確認してください! )。Android はいつでもあなたの活動を停止させる可能性があることを認識することが重要です。アクティビティはonCreate、onAnimationEnd を受け取ると再作成されます (つまり、呼び出されます) が、表示されません (つまり、 no onStart)。これは、resizedImage2そのアクティビティの が初期化されておらず、まだ null であることを意味します。

簡単な解決策はresizedImage2onCreate代わりに で初期化することです。

別の解決策は、 onSaveInstanceStateresizedImage2に保存し、バンドルが存在する場合は復元することです。onCreate

于 2012-04-08T18:53:52.547 に答える