Good day,
I use Load() method to download and writing to the database in MainActivity. Load() method is call in asynctask class in doInBackground()(asynctask class is in MainActivity) and it works good.
But, I don´t know why it doesn´t works in another class. I created another asynctask class and calling method in Load().
Error occurs in line db.updateContact
or db.addContact
in Load()
Load() method
public List<Contact> Load()
{
final String URL = "http://192.168.1.110/index.xml";
// XML node keys
final String KEY_SONG = "data"; // parent node
final String KEY_KEY = "id";
final String KEY_NAME = "temperature";
final String KEY_TEMPERATURE = "humidity";
final String KEY_LATITUDE = "latitude";
final String KEY_STATUS = "status";
Databaze db = new Databaze(this);
List<Contact> contacts;
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_SONG);
// looping through all mista nodes <mista>
for (int j = 0; j < nl.getLength(); j++)
{
Element e = (Element) nl.item(j);
String name = parser.getValue(e, KEY_NAME);
String temperature = parser.getValue(e, KEY_TEMPERATURE);
String latitude = parser.getValue(e, KEY_LATITUDE);
String status = parser.getValue(e, KEY_STATUS);
String key = parser.getValue(e, KEY_KEY);
int keyINT = Integer.valueOf(key);
if(keyINT == 1){
db.updateContact(new Contact(keyINT, name, temperature, latitude, status));
}
else{
db.addContact(new Contact(keyINT, name, temperature, latitude, status));
}
}
contacts = db.getAllContacts();
return contacts;
}
Asynctask
public class LoadDataTask extends AsyncTask<Void, Void, List<Contact>> {
private MainActivity mMainActivity;
@Override
protected void onPreExecute()
{
mMainActivity = new MainActivity();
}
@Override
protected List<Contact> doInBackground(Void... voids)
{
return mMainActivity.Load();
}
@Override
protected void onPostExecute(List<Contact> cont)
{
// do something
}
}
And error code
FATAL EXCEPTION: AsyncTask #2
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
at com.example.hello.Databaze.updateContact(Databaze.java:171)
at com.example.hello.MainActivity.Load(MainActivity.java:245)
at com.example.hello.MyWidgetIntentReceiver$LoadDataTask.doInBackground(MyWidgetIntentReceiver.java:156)
at com.example.hello.MyWidgetIntentReceiver$LoadDataTask.doInBackground(MyWidgetIntentReceiver.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
Thank you for your help