我是Android编程新手(刚刚开始为我的最后一年项目而开始),我手头上的当前任务遇到了麻烦。我正在尝试访问我的Sphero的IMU并将数据输出到文本文件中。在我学习如何创建一个Android应用程序并使用我从https://github.com/orbotix/Sphero-Android-SDK获得的样本后,将数据流式传输到我的Android设备上并不是什么大问题。
然而,我一直被困在输出数据到文本阶段,我似乎无法解决。我设法弄清楚如何使用DataOutputStream和其他输出流方法(缓冲区,字节等)输出字符串消息和数组的文本文件。但是当涉及从sphero加速度计流输出数据时,我无法输出任何文件,因为应用程序在出错时仍然崩溃:
引起:java.lang.NullPointerException:尝试调用虚方法' java.util.ArrayList com.orbotix.async.DeviceSensorAsyncMessage.getAsyncData()'在空对象引用上
以下是我认为导致问题的输出部分:
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错误。有人可以请一下建议。提前谢谢你,我真的很感激任何建议。
答案 0 :(得分:0)
对于那些碰巧寻求相同答案的人,我不擅长编码的解释,因为我是新手,但我设法通过重组行动来解决问题。
这是我编写的新代码,最终按照我的意愿工作:
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();
}
}
这就是我必须分享的一切,并希望它有所帮助。