我在尝试使用已实现的接口构建通知时遇到问题。
该接口实现了一个有4个方法的处理程序,我遇到问题的方法是onNotificationReceived()
这是错误
The constructor NotificationCompat.Builder(new MQTTCommunicator.MQTTEventHandler(){}) is undefined
公共接口MQTT通讯器{void connect(字符串地址,int端口);//添加添加几个连接的能力
我能做些什么来解决这个问题?我尝试将is强制转换为MQTTEventHandler,但没有成功我之所以这样设置它,是因为所有代码都是在库中实现的,并且我希望避免对应用程序项目的任何类/引用进行硬编码。
接口基类
void disconnect();
void subscribe(String topic);
void unsubscribe(String topic);
void sendMessage(String topic, String message);
void addEventHandler(MQTTEventHandler handler);
void removeEventHandler(MQTTEventHandler handler);
CommunicatorStatus getStatus();
public interface MQTTEventHandler {
void onStatusChanged(CommunicatorStatus status, String message);
void onMessageReceived(String topic, String message);
void onException(String message);
void onNotificationReceived(String message);
}
这是在"活动"中,我在其中创建一个类的实例,该实例实现了我的基本接口类
我将这个对象命名为mComm,并且能够向它注册MQTTEventHandler
private void establishRecievers() {
MQTTEventHandler mHandler = new MQTTEventHandler() {
@Override
public void onStatusChanged(CommunicatorStatus status, String message) {
// TODO Auto-generated method stub
// Do something with status
}
@Override
public void onMessageReceived(String topic, String message) {
// TODO Auto-generated method stub
// Do something with the message
adapter.add(topic + "|||" + message);
adapter.notifyDataSetChanged();
}
@Override
public void onException(String message) {
// TODO Auto-generated method stub
// Do something with exception
}
public void onNotificationReceived(String message) {
// TODO Auto-generated method stub
// Do something with exception
Log.e("NOTIFICATION", message);
//ISSUE IS HERE
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!");
}
};
mComm.addEventHandler(mHandler);
}
我使用getApplicationContext();
解决了问题
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(getApplicationContext()).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(topic).setContentText(message);