Android “对话投掷”;无法添加窗口—;令牌null不适用于应用程序”;

Android “对话投掷”;无法添加窗口—;令牌null不适用于应用程序”;,android,Android,我的代码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NoticeBoard.init(MainA

我的代码:


    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NoticeBoard.init(MainActivity.this);
        NoticeBoard.getInstance().setButton();
        setContentView(NoticeBoard.getInstance());
    }

}

    public class NoticeBoard extends ImageView {
    private static NoticeBoard instance = null;
    private static Paint paint;
    protected  Context mContext;
    private static WindowManager mWindowManager;

    public NoticeBoard(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public static NoticeBoard getInstance() {
        return instance;
    }

    public static void init(Context context) {
        instance = new NoticeBoard(context);
        instance.setImageResource(R.drawable.ic_launcher);
        instance.invalidate();
    }

    public NoticeBoard(Context context) {
        super(context);
        mWindowManager = (WindowManager) getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
        mContext = context;
        setBackgroundColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint = new Paint(Paint.LINEAR_TEXT_FLAG);
        paint.setColor(Color.GRAY);
        paint.setTextSize(12.0F);
        canvas.drawText("Hello World", 100, 200, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

    public void setButton() {
        Activity a =(Activity) mContext;
        ImageButton btn = new ImageButton(a);
        btn.setBackgroundResource(R.drawable.ic_launcher);
        android.view.WindowManager.LayoutParams paramsSplit = new android.view.WindowManager.LayoutParams();
        paramsSplit.width=2;
        paramsSplit.height=2;
        instance.mWindowManager.addView(btn, paramsSplit);
    }
}
我试图找到答案,我将getApplicationContext()更改为MainActivity.this,并将上下文更改为(活动)上下文,但它仍然不起作用。怎么了? 我是中国人,我的英语不是很好。感谢您的帮助。

在下面的一行:

    mWindowManager = (WindowManager) getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
删除对应用程序上下文的引用

    mWindowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 

活动的上下文就足够了。

@EJK I将getApplicationContext()更改为MainActivity。这样做,但仍然不起作用。这只是猜测,但将“mWindowManager=(WindowManager)getContext().getApplicationContext().getSystemService(context.WINDOW_SERVICE);”更改为“mWindowManager=(WindowManager)”怎么样getContext().getSystemService(Context.WINDOW_SERVICE);”为了澄清我的上述评论:只需删除该行的“getApplicationContext()”部分。