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

不兼容的类型: <匿名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 openwrt双栈NAT
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用