为了寻找2B 2017-08-24 09:44 采纳率: 100%
浏览 6288
已采纳

不兼容的类型: <匿名OnClickListener>无法转换为Context

遇到的问题Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

Compilation failed; see the compiler error output for details.

代码如下
package com.example.notificationtest1;

import android.app.Notification;
import android.app.NotificationManager;
import android.graphics.BitmapFactory;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button sendNotice = (Button) findViewById(R.id.send_notice);
    sendNotice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            NotificationManager manager = (NotificationManager)
                    getSystemService(NOTIFICATION_SERVICE);
            Notification notification = new NotificationCompat.Builder(this)
                    .setContentTitle("This is content title")
                    .setContentText("This is content text")
                    .setWhen(System.currentTimeMillis())
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                    .build();
            manager.notify(1,notification);
        }
    });
}

}
就是在 Notification notification = new NotificationCompat.Builder(this)这一句里面的this出错了,在使用按钮控件的时候设置监听器也会,
Button button = (Button) findViewByid(R.id.button1);
button.setOnClickListener(this)也会出现类似的问题,求哪位大佬帮忙解释下~

  • 写回答

5条回答 默认 最新

  • xcc410922911 2017-08-25 09:37
    关注

    class A{ #在此作用域内的所以this都是指 new A()这个对象。#}
    new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    #此处this指 new View.OnClickListener()对象#
    }
    };
    new NotificationCompat.Builder(context);括号里需要传递context,而楼主传的是 new View.OnClickListener()对象,显然会报错。
    解决办法:1,在onCreate方法中直接 mContext = this;#此处this是activity,activity是Context的实现类(暂且认为子类)#
    new NotificationCompat.Builder(mContext);
    2.new NotificationCompat.Builder(MainActivity.this);#内部类(除静态内部类)都可以获取其外部类的引用 ClassName.this#

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器