从Android设备保存传感器数据并将所有数据发送到服务器
我有点麻烦,因为我对安卓开发有些陌生。我正在尝试读取传感器数据,将数据临时保存到数据库中,然后对我创建的服务器进行大容量插入,以便在线可视化数据 我的活动是一个从Android设备保存传感器数据并将所有数据发送到服务器,android,sqlite,http-post,android-sensors,Android,Sqlite,Http Post,Android Sensors,我有点麻烦,因为我对安卓开发有些陌生。我正在尝试读取传感器数据,将数据临时保存到数据库中,然后对我创建的服务器进行大容量插入,以便在线可视化数据 我的活动是一个SensorEventListener,我将每个事件的值写入TextViews。我正在读取事件数据。我认为过于频繁地向服务器发送数据可能是一个问题,因此我决定通过单击菜单按钮启动将数据保存到Android应用程序的内部数据库的操作,并从内部数据库获取数据并将其发送到服务器的操作通过另一个菜单按钮启动 我的onSensorChanged(S
SensorEventListener
,我将每个事件的值写入TextView
s。我正在读取事件数据。我认为过于频繁地向服务器发送数据可能是一个问题,因此我决定通过单击菜单按钮启动将数据保存到Android应用程序的内部数据库的操作,并从内部数据库获取数据并将其发送到服务器的操作通过另一个菜单按钮启动
我的onSensorChanged(SensorEvent事件)
方法如下所示:
@Override
public void onSensorChanged(SensorEvent event) {
// Accuracy is handled in the onAccuracy Changed ( - 1 )
for (int i = 0; i < mTextViews.length - 1; i++) {
mTextViews[i].setText("Value " + i + ": " + event.values[i]);
}
if (mSensorEvents == null) mSensorEvents = new ArrayList<>();
if (mSensorEvents.size() < VALS_MAX) {
mSensorEvents.add(event);
} else {
mSensorManager.unregisterListener(this);
new SensorEventLoggerTask().execute(mSensorEvents);
}
}
这些任务如下所示:
private class SensorEventLoggerTask extends AsyncTask<List<SensorEvent>, Void, Void> {
@Override
protected Void doInBackground(List<SensorEvent>... events) {
for (int i = 0; i < events.length; i++) {
SensorEvent event = events[0].get(i);
String value = Arrays.toString(event.values);
long timestamp = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 100000L;
ContentValues values = new ContentValues();
values.put(SensorDataHelper.COL_ACCURACY, event.accuracy);
values.put(SensorDataHelper.COL_NAME, mSensorName);
// TODO: get the email from the user
values.put(SensorDataHelper.COL_EMAIL, "jakehockey10@gmail.com");
values.put(SensorDataHelper.COL_TIMESTAMP, timestamp);
values.put(SensorDataHelper.COL_VALUE, value);
getActivity().getContentResolver().insert(SensorDataProvider.CONTENT_URI, values);
}
return null;
}
}
正如您所见,我还没有收到post请求,但这是因为我不太确定如何执行,尽管我在网上找到了一些示例。但是我无法获取我添加到内部数据库中的记录,如果我能弄清楚,我的下一步将是从这些记录中创建JSON
对象,并发出POST
请求
从你所看到的情况来看,你对我有什么建议吗?我这样做对吗?我在哪里搞砸了?如果您需要我发布更多的代码片段,请告诉我。我真的很想得到一些指导
private class SensorEventLoggerTask extends AsyncTask<List<SensorEvent>, Void, Void> {
@Override
protected Void doInBackground(List<SensorEvent>... events) {
for (int i = 0; i < events.length; i++) {
SensorEvent event = events[0].get(i);
String value = Arrays.toString(event.values);
long timestamp = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 100000L;
ContentValues values = new ContentValues();
values.put(SensorDataHelper.COL_ACCURACY, event.accuracy);
values.put(SensorDataHelper.COL_NAME, mSensorName);
// TODO: get the email from the user
values.put(SensorDataHelper.COL_EMAIL, "jakehockey10@gmail.com");
values.put(SensorDataHelper.COL_TIMESTAMP, timestamp);
values.put(SensorDataHelper.COL_VALUE, value);
getActivity().getContentResolver().insert(SensorDataProvider.CONTENT_URI, values);
}
return null;
}
}
private class SendSensorDataTask extends AsyncTask<String, String, String> {
private List<HashMap<String, String>> mData = null; // post data
/**
* constructor
*/
public SendSensorDataTask(){}
/**
* background
*/
@Override
protected String doInBackground(String... params) {
Cursor query = getActivity().getContentResolver().query(SensorDataProvider.CONTENT_URI, null, null, null, null);
return null;
}
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
Cursor cursor = getDatabase(false).rawQuery("select * from table", null);
return cursor;
}