首页 > 解决方案 > 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");

      }
          }
    });

标签: javaandroidnullpointerexceptiontextviewros

解决方案


每次将文本设置为 textview 时,都必须检查它是否不为空。


推荐阅读