【发布时间】:2015-12-29 13:07:44
【问题描述】:
我需要从 MyService(扩展服务)启动新的 AsyncLoadJSONDoc(this).execute(),但问题是“this”不存在。 如果我从 Activity 工作没有问题,我只需要创建构造函数以在 asynctask 中进行活动。 主要问题是我需要在服务的异步任务中打开我的数据库(空指针异常) 服务正在检查云中的新信息并保存在 android 数据库中。 (每分钟)
public class AsyncLoadJSONDoc extends AsyncTask<URL, Integer, ArrayList<Storage.JSONDocument>> {
private static final String TAG = "AsyncLoadJSONDoc";
Activity mActivity;`
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'kk:mm:ss.SSS'Z'");
Date date = new Date();
private static final String TAG = "AsyncLoadJSONDoc";
Activity mActivity;
public AsyncLoadJSONDoc(Activity activity){
mActivity = activity;
}
@Override
protected ArrayList<Storage.JSONDocument> doInBackground(URL... params) {
StorageService storageService = App42API.buildStorageService();
Storage storage = storageService.findAllDocuments(
Constants.CLOUD_DB_NAME, Constants.COLLECTION_NAME);
ArrayList<Storage.JSONDocument> jsonDocList = storage.getJsonDocList();
Log.i(TAG, "Velikost databaze> " + jsonDocList.size());
return jsonDocList;
}
protected void onPostExecute(ArrayList<Storage.JSONDocument> jsonDocList) {
saveToDatabase(jsonDocList);
}
private void saveToDatabase(ArrayList<Storage.JSONDocument> jsonDocs) {
Log.i(TAG, "saveToDatabase");
Log.i(TAG + " Start>", df.format(date));
SQLiteDatabase db = (new DatabaseHelper(mActivity)).getWritableDatabase(); // <---There is null exception
ContentValues cv=new ContentValues();
DatabaseHelper dq = new DatabaseHelper(mActivity);
dq.onUpgrade(db, 1, 2);
for(Storage.JSONDocument oneJsonDoc : jsonDocs) {
cv.put(Constants.UPDATED_AT, oneJsonDoc.getUpdatedAt());
cv.put(Constants.CREATED_AT, oneJsonDoc.getCreatedAt());
cv.put(Constants.DOC_ID, oneJsonDoc.getDocId());
cv.put(Constants.JSON, oneJsonDoc.getJsonDoc());
if (oneJsonDoc.getLocation() == null) {
Log.i(TAG, "Location NULL");
cv.put(Constants.LATITUDE, (byte[]) null);
cv.put(Constants.LONGITUDE, (byte[]) null);
} else {
cv.put(Constants.LATITUDE, oneJsonDoc.getLocation().getLat().floatValue());
cv.put(Constants.LONGITUDE, oneJsonDoc.getLocation().getLng().floatValue());
}
db.insert(Constants.TABLE_NAME, Constants.JSON, cv);
Log.i(TAG, "insert");
}
db.close();
Log.i(TAG + " End>", df.format(date));
}
}
【问题讨论】:
标签: android sqlite service android-asynctask nullpointerexception