尝试在空对象引用上调用虚拟方法“java.util.ArrayList com.orbotix.async.DeviceSensorAsyncMessage.getAsyncData()”
Posted
技术标签:
【中文标题】尝试在空对象引用上调用虚拟方法“java.util.ArrayList com.orbotix.async.DeviceSensorAsyncMessage.getAsyncData()”【英文标题】:Attempt to invoke virtual method 'java.util.ArrayList com.orbotix.async.DeviceSensorAsyncMessage.getAsyncData()' on a null object reference 【发布时间】:2016-03-08 08:49:54 【问题描述】:我是 android 编程新手(刚开始我的期末项目),我手头的当前任务遇到了麻烦。我正在尝试访问我的 Sphero 的 IMU 并将数据输出到文本文件中。在我学习了如何创建一个 Android 应用并使用从https://github.com/orbotix/Sphero-Android-SDK 获得的示例之后,将数据流式传输到我的 Android 设备上并不是什么大问题。
但是,我一直卡在输出数据到文本阶段,我似乎无法解决。我设法弄清楚如何使用 DataOutputStream 和其他输出流方法(缓冲区、字节等)输出字符串消息和数组的文本文件。但是在从 sphero 加速度计流中输出数据时,我无法输出任何文件,因为应用程序不断因错误而崩溃:
原因:java.lang.NullPointerException:
这是我认为导致问题的输出部分:
public void write_data()
double accelX = ((DeviceSensorAsyncMessage) asyncMessage).getAsyncData().get(0).getAccelerometerData().getFilteredAcceleration().x;
ArrayList arrayList = new ArrayList();
while (running == true)
arrayList.add(accelX);
Toast.makeText(getApplicationContext(), "File Open", Toast.LENGTH_LONG).show();
int sz = arrayList.size();
for (int i = 0; i < sz; i++)
try
DataOutputStream dos = new DataOutputStream(new FileOutputStream(output_file, true));
dos.writeUTF("" + arrayList);
dos.writeChars("\n");
catch (IOException e)
Toast.makeText(getApplicationContext(), "Unable to copy data", Toast.LENGTH_LONG).show();
//e.printStackTrace();
try
dos.close();
catch (IOException e)
e.printStackTrace();
我不确定输出方法是否错误,因为我仍然不了解过去问题中的 NullPointException 错误。有人可以请教。提前感谢您,如果您有任何建议,我将不胜感激。
【问题讨论】:
【参考方案1】:对于那些碰巧寻求相同答案的人,我不擅长解释编码,因为我是新手,但我设法通过重组操作解决了问题。
这是我编写的新代码,最终可以按我的意愿工作:
public void handleAsyncMessage(AsyncMessage asyncMessage, Robot robot)
if( asyncMessage == null )
return;
//Check the asyncMessage type to see if it is a DeviceSensor message
if( asyncMessage instanceof DeviceSensorAsyncMessage )
DeviceSensorAsyncMessage message = (DeviceSensorAsyncMessage) asyncMessage;
if( message.getAsyncData() == null
|| message.getAsyncData().isEmpty()
|| message.getAsyncData().get( 0 ) == null )
return;
//Retrieve DeviceSensorsData from the async message
DeviceSensorsData data = message.getAsyncData().get( 0 );
//Extract the accelerometer data from the sensor data
displayAccelerometer(data.getAccelerometerData());
//Extract attitude data (yaw, roll, pitch) from the sensor data
displayAttitude(data.getAttitudeData());
//Extract gyroscope data from the sensor data
displayGyroscope( data.getGyroData() );
writeAccelerometer(data.getAccelerometerData());
public void writeAccelerometer(AccelerometerData accelerometer)
if (running == true)
try
dos.writeBytes(String.format("%.4f", accelerometer.getFilteredAcceleration().x));
dos.writeChars("\n");
dos.writeBytes(String.format("%.4f", accelerometer.getFilteredAcceleration().y));
dos.writeChars("\n");
dos.writeBytes(String.format("%.4f", accelerometer.getFilteredAcceleration().z));
dos.writeChars("\n");
System.out.println("Write Successful");
catch (IOException e)
e.printStackTrace();
这就是我要分享的全部内容,希望对您有所帮助。
【讨论】:
以上是关于尝试在空对象引用上调用虚拟方法“java.util.ArrayList com.orbotix.async.DeviceSensorAsyncMessage.getAsyncData()”的主要内容,如果未能解决你的问题,请参考以下文章
错误:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”
尝试在空对象引用上调用接口方法“java.lang.Object java.util.Map$Entry.getValue()”
NullPointerException:尝试在空对象引用上调用虚拟方法 findViewById(int)'
致命异常: main ,尝试在空对象引用上调用虚拟方法 [重复]
尝试在空对象引用上调用虚拟方法 com.google.firebase.iid.FirebaseInstanceId.getInstanceId()'