package com.example.database;
import android.os.AsyncTask;
import com.example.database.data.Data;
import com.example.database.query.Query;
import org.alfonz.utility.Logcat;
import java.lang.ref.WeakReference;
public class DatabaseCallTask extends AsyncTask<Void, Void, Data<?>>
{
private Query mQuery;
private WeakReference<DatabaseCallListener> mListener;
private Exception mException = null;
public DatabaseCallTask(Query query, DatabaseCallListener listener)
{
mQuery = query;
setListener(listener);
}
@Override
protected Data<?> doInBackground(Void... params)
{
try
{
Data<?> data = mQuery.processData();
if(isCancelled()) return null;
else return data;
}
catch(Exception e)
{
mException = e;
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(Data<?> data)
{
if(isCancelled()) return;
DatabaseCallListener listener = mListener.get();
if(listener != null)
{
if(data != null)
{
listener.onDatabaseCallRespond(this, data);
}
else
{
listener.onDatabaseCallFail(this, mException);
}
}
}
@Override
protected void onCancelled()
{
Logcat.d("");
}
public Query getQuery()
{
return mQuery;
}
public void setListener(DatabaseCallListener listener)
{
mListener = new WeakReference<>(listener);
}
}