Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 需要帮助修复我的课堂:';此处理程序类应该是静态的,否则可能会发生泄漏';_Android - Fatal编程技术网

Android 需要帮助修复我的课堂:';此处理程序类应该是静态的,否则可能会发生泄漏';

Android 需要帮助修复我的课堂:';此处理程序类应该是静态的,否则可能会发生泄漏';,android,Android,我创建了一个简单的crossfade图像类用于我的应用程序。但是由于缺乏知识,我有一个错误无法修复。我找到了这个帖子,但我不知道如何在课堂上解决这个问题。这是一门非常简单的课。创建、初始化并开始使用它 我希望有人能帮助我修复此警告,在我们处理此警告时,也非常欢迎提供有关我的代码或注释的提示和提示;) MainActivity.java package com.example.crossfadeimage; import android.app.Activity; import android.

我创建了一个简单的crossfade图像类用于我的应用程序。但是由于缺乏知识,我有一个错误无法修复。我找到了这个帖子,但我不知道如何在课堂上解决这个问题。这是一门非常简单的课。创建、初始化并开始使用它

我希望有人能帮助我修复此警告,在我们处理此警告时,也非常欢迎提供有关我的代码或注释的提示和提示;)

MainActivity.java

package com.example.crossfadeimage;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    Xfade xfade = new Xfade();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // INIT(current activity, image id's, time between fades, fade speed)
        xfade.init(this, new int[]{ R.id.image1, R.id.image2, R.id.image3 }, 3000, 500);
        xfade.start();

    }

}
Xfade.java

package com.example.crossfadeimage;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;

public class Xfade {

    private Activity activity;

    // Handler
    private Handler handlerTimer = new Handler();
    private static final int UPDATE_STUFF_ON_DIALOG = 999;
    private int updateTime;

    private Animation fadeIn;
    private Animation fadeOut;

    public int[] xfadeImages;

    public int xfadeCounter = 1;

    public void init(Activity thisActivity, int[] images, int time,
            int animationSpeed) {

        activity = thisActivity;
        xfadeImages = images;
        updateTime = time;

        // Set Animations
        fadeIn = new AlphaAnimation(0, 1);
        fadeIn.setDuration(animationSpeed);

        fadeOut = new AlphaAnimation(1, 0);
        fadeOut.setDuration(animationSpeed);

        // Hide all images except the first
        // which is always visible
        for (int image = 1; image < xfadeImages.length; image++) {

            ImageView thisImage = (ImageView) activity
                    .findViewById(xfadeImages[image]);
            thisImage.setVisibility(4);

        }

    }

    public void start() {

        handlerTimer.removeCallbacks(taskUpdateStuffOnDialog);
        handlerTimer.postDelayed(taskUpdateStuffOnDialog, updateTime);

    }

    private Runnable taskUpdateStuffOnDialog = new Runnable() {
        public void run() {

            Message msg = new Message();
            msg.what = UPDATE_STUFF_ON_DIALOG;
            handlerEvent.sendMessage(msg);

            // Repeat this after 'updateTime'
            handlerTimer.postDelayed(this, updateTime);
        }
    };

    private Handler handlerEvent = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_STUFF_ON_DIALOG: {
                crossFade();
            }
                break;
            default: {
                super.handleMessage(msg);
            }
                break;
            }
        }
    };

    public void crossFade() {

        if (xfadeCounter == 0) {
            ImageView lastImage = (ImageView) activity
                    .findViewById(xfadeImages[xfadeImages.length - 1]);
            lastImage.setVisibility(4);
        }

        if (xfadeCounter < xfadeImages.length) {

            ImageView thisImage = (ImageView) activity
                    .findViewById(xfadeImages[xfadeCounter]);
            thisImage.setVisibility(0);
            thisImage.startAnimation(fadeIn);

            xfadeCounter++;

        } else {

            // Hide all images except the first
            // before fading out the last image
            for (int image = 1; image < xfadeImages.length; image++) {

                ImageView thisImage = (ImageView) activity
                        .findViewById(xfadeImages[image]);
                thisImage.setVisibility(4);

            }

            // Fadeout
            ImageView lastImage = (ImageView) activity
                    .findViewById(xfadeImages[xfadeImages.length - 1]);
            lastImage.startAnimation(fadeOut);

            // LastImage is faded to alpha 0 so it doesn't have to be hidden
            // anymore
            xfadeCounter = 1;

        }

    }

}
package com.example.crossfadeimage;
导入android.app.Activity;
导入android.os.Handler;
导入android.os.Message;
导入android.view.animation.AlphaAnimation;
导入android.view.animation.animation;
导入android.widget.ImageView;
公共类Xfade{
私人活动;
//处理者
私有处理程序handlerTimer=新处理程序();
对话框上的私有静态最终整型更新=999;
私有int更新时间;
私人动画;
私人动画淡出;
公共图像;
公共int xfadeCounter=1;
public void init(活动thisActivity,int[]图像,int time,
int动画速度){
活动=此活动;
xfadeImages=图像;
更新时间=时间;
//设置动画
fadeIn=新的字母动画(0,1);
设置持续时间(动画速度);
淡出=新字母动画(1,0);
淡出。设置持续时间(动画速度);
//隐藏除第一个图像以外的所有图像
//它总是可见的
对于(int image=1;image
这允许您修改视图并将处理程序设置为静态

package com.testing.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity implements Runnable {

    private static final int THREAD_RESULT = 1000;

    private TextView mTextView;

    private static Handler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.text);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mHandler = new CustomHandler(this);
        new Thread(this).start();
    }

    @Override
    public void run() {

        // Do some threaded work

        // Tell the handler the thread is finished
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                mHandler.sendEmptyMessage(THREAD_RESULT);
            }
        });
    }

    private class CustomHandler extends Handler {

        private MainActivity activity;

        public CustomHandler(MainActivity activity) {
            super();
            this.activity = activity;
        }

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case THREAD_RESULT:
                activity.mTextView.setText("Success!");
                break;
            }
        }

    }

}

请看这里:这与我在问题中的链接完全相同。尝试了此链接,但我收到大量“无法对非静态字段进行静态引用”错误。我不能让它们都是静态的?啊,对了,为你更新了我的答案。实际上,您可能需要考虑使用异步任务来代替。对我来说,它们更有意义,在实现时更容易阅读和理解@腾讯我不确定Runnable界面在这里的用途是什么?我试图复制您的模式(Runnable除外):但我仍然在IncomingHandler构造函数上得到“Handler类应该是静态的”吗?