java - 安卓:空指针异常 'double java.lang.Double.doubleValue()'

标签 java android nullpointerexception textview ros

我是 android 编程的新手,我的代码有问题。任何人都可以帮助我或指出我错误的原因,因为我不确定为什么它在 TextView 时或是否可能会给我一个 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 时,都必须检查它是否不为 null。

关于java - 安卓:空指针异常 'double java.lang.Double.doubleValue()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58230939/

相关文章:

java - 阅读文本文件后如何打印完整句子?

java - 如何使用 EL 将字段绑定(bind)到重复的数据源?

android - 使用Gradle在设备上运行Android应用

java - 什么是 NullPointerException,我该如何解决?

java - 速度中的 session 范围

java - 如何在运行时在启用 Spring 的 Web 应用程序中安排新方法?

android - 如何在 Android 中实现叶/中间证书固定?

Android:如何改变图像的色调?

Java - 2D 字符串数组、动态表和空指针异常

java - 什么是NullPointerException,我该如何解决?