Android:我们可以在运行UI线程时将数据插入sqlite吗?
我找到了同样的问题,但没有答案。这就是为什么我想在这里再次问: 以下是我的主线程上的类:Android:我们可以在运行UI线程时将数据插入sqlite吗?,android,sqlite,xml-parsing,ui-thread,Android,Sqlite,Xml Parsing,Ui Thread,我找到了同样的问题,但没有答案。这就是为什么我想在这里再次问: 以下是我的主线程上的类: private class DownloadTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { // TODO Auto-generated met
private class DownloadTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... urls)
{
// TODO Auto-generated method stub
XMLParser parser1 = new XMLParser();//System.out.println("XML before catching");
String result = parser1.getXmlFromUrl("http://exampl1.com/arrival.XML");
xml=result;
Document doc = parser1.getDomElement(xml);
NodeList nl = doc.getElementsByTagName(DOM_KEY_CONTENT);
arrayList = new ArrayList<HashMap<String,String>>();
databaseAirport myDbHelper ;
myDbHelper = new databaseAirport(ctx);
myDbHelper.open();
for (int i = 0; i < nl.getLength(); i++)
{
// creating new HashMap
HashMap<String, String> mapData= new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
mapData.put(DOM_KEY_ID, parser1.getValue(e, DOM_KEY_ID));
mapData.put(DOM_KEY_PRI_ID,parser1.getValue(e,DOM_KEY_PRI_ID));
mapData.put(DOM_KEY_FDATE, parser1.getValue(e, DOM_KEY_FDATE));
mapData.put(DOM_KEY_ORDER, parser1.getValue(e, DOM_KEY_ORDER));
arrayList.add(mapData);
a1、b1、c1和d1按正常方式打印
下面是错误:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
**Caused by: java.lang.NullPointerException**
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.airport.serverside.databaseAirport.open(databaseAirport.java:76)
at com.airport.serverside.AirportActivity$DownloadWebPageTask.doInBackground(AirportActivity.java:133)
at com.airport.serverside.AirportActivity$DownloadWebPageTask.doInBackground(AirportActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
已编辑
74 public databaseAirport open() throws SQLException
75 {
76 db = DBHelper.getWritableDatabase();
77 return this;
78 }
有人能帮我吗?
提前感谢…我也面临着数据库被锁定的问题。我用内容提供商解决了这个问题。也许这对你也有帮助
我参考了谷歌IO应用程序。我被困在这太长的日子里了。您是否认为,这是因为不允许主线程使用数据库进行访问?不,这是因为数据库被锁定用于写入,并且是从多个线程并行访问的。我可以向您保证,这个问题将通过content provider.hmmmm解决。如果没有其他方法可以通过访问数据库来解决,我将尝试使用它
74 public databaseAirport open() throws SQLException
75 {
76 db = DBHelper.getWritableDatabase();
77 return this;
78 }