Java 调用其他类方法时出错

Java 调用其他类方法时出错,java,android,Java,Android,我正在尝试运行publish()方法类侦听器 但每当发生错误时。通过创建accessListener var=newlistener();var.publish()。他在监听器类中请求一个构建器。使公共侦听器(){}留空。我可以在Listener中调用System.out.printl(“blabla”),但是publish()不能 可能是因为Listener类中的方法publish()使用了connectionDetails,我可能必须将其传递给构造函数 可以从ActionListener/C

我正在尝试运行publish()方法类侦听器

但每当发生错误时。通过创建access
Listener var=newlistener();var.publish()
。他在
监听器
中请求一个构建器。使公共侦听器(){}留空。我可以在
Listener
中调用
System.out.printl(“blabla”)
,但是publish()不能

可能是因为
Listener
类中的方法
publish()
使用了
connectionDetails
,我可能必须将其传递给构造函数

可以从
ActionListener/Connect()
调用
Publish()

类侦听器:

package org.eclipse.paho.android.service.sample;
导入android.content.Context;
导入android.content.Intent;
导入android.util.Log;
导入android.view.MenuItem;
导入android.view.MenuItem.OnMenuItemClickListener;
导入android.widget.CheckBox;
导入android.widget.EditText;
导入android.widget.RadioGroup;
导入android.widget.TextView;
导入org.eclipse.paho.android.service.MqttAndroidClient;
导入org.eclipse.paho.android.service.sample.ActionListener.Action;
导入org.eclipse.paho.android.service.sample.Connection.ConnectionStatus;
导入org.eclipse.paho.client.mqttv3.MqttException;
导入org.eclipse.paho.client.mqttv3.MqttSecurityException;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.HashMap;
导入java.util.Map.Entry;
导入java.util.logging.LogManager;
/**
*处理在{@link ClientConnections}活动中执行的操作
*以及{@link ConnectionDetails}活动和相关片段
*
*/
公共类侦听器实现OnMenuItemClickListener{
/**{@link Connection}对象的句柄,该对象包含与此对象关联的{@link MqttAndroidClient}**/
私有字符串clientHandle=null;
/**{@link ConnectionDetails}引用,用于执行某些操作**/
私有ConnectionDetails ConnectionDetails=null;
/**{@link ClientConnections}引用,用于执行某些操作**/
私有ClientConnections ClientConnections=null;
/**{@link Context}用于加载和格式化字符串**/
私有上下文=null;
/**Paho是否已启用日志记录**/
静态布尔记录=false;
/**
*构造一个侦听器对象,用于{@link ConnectionDetails}活动和
*相关片段。
*@param connectionDetails{@link connectionDetails}的实例
*@param clientHandle处理要对其执行操作的客户端的句柄
*/
公共侦听器(ConnectionDetails、String clientHandle)
{
this.connectionDetails=connectionDetails;
this.clientHandle=clientHandle;
上下文=连接细节;
}
/**
*构造用于{@link ClientConnections}活动的侦听器对象。
*@param clientConnections
*/
公共侦听器(ClientConnections ClientConnections){
this.clientConnections=clientConnections;
context=this.clientConnections;
}
公众听众(){
}
/**
*根据显示的按钮执行所需的操作
*用户已单击。
*
*@param item单击的菜单项
*@return如果还有其他处理需要完成
*
*/
@凌驾
公共布尔onMenuItemClick(菜单项){
int id=item.getItemId();
开关(id)
{
案例R.id.publish:
发布();
打破
案例R.id.subscribe:
订阅();
打破
}
返回false;
}
/**
*发布用户指定的消息
*/
公开发布()
{
字符串主题=((EditText)connectionDetails.findViewById(R.id.lastWillTopic))
.getText().toString();
字符串消息=((EditText)connectionDetails.findViewById(R.id.lastWill)).getText()
.toString();
RadioGroup radio=(RadioGroup)connectionDetails.findViewById(R.id.qosRadio);
int checked=radio.getCheckedRadioButtonId();
int qos=ActivityConstants.defaultQos;
开关(已检查){
案例R.id.qos0:
qos=0;
打破
案例R.id.qos1:
qos=1;
打破
案例R.id.qos2:
服务质量=2;
打破
}
布尔保留=((复选框)connectionDetails.findViewById(R.id.retained))
.isChecked();
字符串[]args=新字符串[2];
args[0]=消息;
args[1]=主题+“qos:+qos+”保留:“+retained;
试一试{
Connections.getInstance(context.getConnection(clientHandle.getClient)()
.publish(主题,message.getBytes(),qos,保留,null,新建ActionListener(上下文,Action.publish,clientHandle,args));
}
捕获(MqttSecurityException e){
Log.e(this.getClass().getCanonicalName(),“未能从具有句柄“+clientHandle,e”的客户端发布消息);
}
捕获(MqttException e){
Log.e(this.getClass().getCanonicalName(),“未能从具有句柄“+clientHandle,e”的客户端发布消息);
}
}

}
这是一个著名的nullpointerexception。看看它在哪一行中断并解决它,你会很好。我尝试了各种方法来理解发生了什么,但我无法解决。有什么办法吗?