java - Android:NullPointerException'double java.lang.Double.doubleValue()'
问题描述
我是 android 编程新手,我的代码有问题。任何人都可以帮助我或指出我的错误的原因,因为我不确定为什么它在文本视图或可能的情况下给我一个 NullPointerException。
日志猫:
java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference
at com.example.app.rosbridge.MainActivity$2$1.run(MainActivity.java:133)
这是该行的代码:
current.setText(String.format("%.4f%s", batteryStateData.msg.current * Math.pow(10, 6), "A"));
但是当我运行我的应用程序时,我的电压设置为空,这是电压的代码:
voltage.setText(String.format("%.4f%s", batteryStateData.msg.voltage, "v"));
这是完整的代码:
public class MainActivity extends Activity {
private TextView voltage, current, percentage, status;
private SubscribedData<BatteryState> batteryStateData;
private RosbridgeListener rosbridge;
private boolean subscribed = false;
private boolean advertised = false;
/** Indicates that Lint should ignore the specified warnings for the annotated element. */
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity);
Button settings_btn = (Button) findViewById(R.id.connect_btn);
voltage = findViewById(R.id.voltage_txt);
current = findViewById(R.id.current_txt);
percentage = findViewById(R.id.percentage_txt);
status = findViewById(R.id.status_txt);
connectButton = findViewById(R.id.connect_btn);
batteryStateData = new SubscribedData<>();
final Type batteryStateType = new TypeToken<SubscribedData<BatteryState>>() {
}.getType();
// ROSBRIDGE protocol allows access to underlying ROS messages and services as serialized JavaScript Object Notation (JSON) objects
WebSocket protocol communicates to a server for the connection from a user's web browser
//A connection to the rosbridge thru the IP address of the robot from the socket
rosbridge = new RosbridgeListener("ws://10.24.204.231:9090");
rosbridge.setOnDataReceivedListener(new RosbridgeMessageListener() {
// a running thread that when the connection is made the data of the topic will serialize and deserialized java objects to (and from) JSON. @param msg
@Override
public void onDataReceived(final String msg) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
batteryStateData = new Gson().fromJson(msg, batteryStateType);
voltage.setText(String.format("%.4f%s", batteryStateData.msg.voltage, "v"));
current.setText(String.format("%.4f%s", batteryStateData.msg.current * Math.pow(10, 6), "A"));
percentage.setText(String.format("%.2f%s", batteryStateData.msg.percentage, "%"));
status.setText(String.format("%s", PowerSupplyStatus.values()[batteryStateData.msg.powerSupplyStatus]));
}
});
Log.d("B9T", String.format("Received data: %s", msg));
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!subscribed) {
rosbridge.Subscribe("/battery", "sensor_msgs/BatteryState");
subscribed = true;
connectButton.setText("Disconnect");
} else {
rosbridge.UnSubscribe("/battery");
subscribed = false;
connectButton.setText("Connect");
}
}
});
解决方案
每次将文本设置为 textview 时,都必须检查它是否不为空。
推荐阅读
- r - 随时间推移计算不同统计数据的 Cronbach Alpha
- python - 用于多输入图像的 VGG16 网络
- r - 查找直线方程以拟合 R 中的数据
- linux - 是否可以在 linux 中为 100 个目录限制具有一定大小限制的目录(不创建挂载点)
- testing - 如何使用 NUnit 测试方法从 azure 获取当前正在执行的测试用例详细信息
- python - 使 python mixins 的使用更安全(并告诉 linter 闭嘴)
- ads - Facebook 自定义转化无效
- reactjs - 如何构建 Firestore 数据库以使用最少的调用
- java - 使用 Sqllite 从 Db 浏览器检索数据以获得条形图
- php - mysql 按某些条件排序,不区分大小写