0

私はすでに一日中解決策を探してきました。残念ながら、私を助けることができるものは何も見つかりませんでした。

15 分前の値を変更する必要があります。本業ではやりませんが、今は別のクラスです。そんなことはどうでもいいと思っていたのですが、行き詰ってしまいました。テスト メッセージを出力したかったのですが、指定されたコンテキストに問題があります。おそらく、「タイマー」に一般的な問題があります。

私のコードは次のとおりです。

主な活動:

tm = new TimerLoerg(this.getApplicationContext());
tm.startTimer();    

そして、ここで私のタイマークラス(未完成)

package at.android.dertestloerk;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Handler;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.Toast;

    public class TimerLoerg extends Activity{

    private Handler handler = new Handler();
    int ms;
    Toast toast;

    private ImageView imageViewLoerg;
    private AnimationDrawable animatedLoerg;

    private Context context;
    Activity activity;

    public TimerLoerg(Context context, Activity activity){
        this.context = context;
        this.activity = activity;
    }

    public void startTimer() {
        ms = 5000;
        handler.postDelayed(timedTask, ms);

        activity.runOnUiThread(new Runnable() {
            public void run() {
                toast = Toast.makeText(context, "Timer gestartet", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            }
        });
    }

    public void changeLoerg() {
        int stufe;
        // layout = (RelativeLayout)findViewById(R.id.LayoutMain);
        imageViewLoerg = (ImageView)activity.findViewById(R.id.imageViewLoerg);

        stufe = SettingsLoerg.getLevel(context);

        Object tag = imageViewLoerg.getTag();

        if (stufe == 1) {
            int loergId = R.drawable.animatedegg;

            if( tag != null && ((Integer)tag).intValue() == loergId) {
                loergId = R.drawable.animatedloerg;
                animatedLoerg.stop();
                //playAnimationNodelay();
                imageViewLoerg.setTag(loergId);
                imageViewLoerg.setBackgroundResource(loergId);
                playAnimationNodelay();
            }
        }
    }

    public void changeStats() {
        int hunger;

        hunger = SettingsLoerg.getHunger(context);
        if (hunger < 15) {
            toast = Toast.makeText(context, "Loerg is very hungry!", Toast.LENGTH_SHORT);
            toast.show();
        }
        else {
            hunger = hunger - 15;
            SettingsLoerg.setHunger(hunger, context);
        }
    }

    private void playAnimation() {
        if (this.imageViewLoerg.getDrawable() instanceof AnimationDrawable) {
            this.animatedLoerg = (AnimationDrawable)this.imageViewLoerg.getDrawable();
            Handler handler = new Handler(getMainLooper());
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    animatedLoerg.start();              
                }
            }, 1500);
        }
    }

    private void playAnimationNodelay() {
        if (this.imageViewLoerg.getDrawable() instanceof AnimationDrawable) {
            this.animatedLoerg = (AnimationDrawable)this.imageViewLoerg.getDrawable();
            animatedLoerg.start();
        }
    }

    private Runnable timedTask = new Runnable(){
          @Override
          public void run() {
           changeLoerg();
           handler.postDelayed(timedTask, 5000);
          }};
}

ログ:

01-05 20:33:02.521: E/AndroidRuntime(7199): FATAL EXCEPTION: main
01-05 20:33:02.521: E/AndroidRuntime(7199): java.lang.NullPointerException
01-05 20:33:02.521: E/AndroidRuntime(7199):     at at.android.dertestloerk.TimerLoerg$2.run(TimerLoerg.java:29)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at android.os.Handler.handleCallback(Handler.java:615)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at android.os.Looper.loop(Looper.java:137)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at java.lang.reflect.Method.invokeNative(Native Method)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at java.lang.reflect.Method.invoke(Method.java:511)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-05 20:33:02.521: E/AndroidRuntime(7199):     at dalvik.system.NativeStart.main(Native Method)

ご覧のとおり、Timer クラスはレイアウトにリンクされていません。問題を引き起こす可能性があるかどうかはわかりませんか?いくつかの活動方法が必要でした。

4

1 に答える 1