0

我的数据库连接有问题。我有一个创建数据库连接等的 DataManager。我还创建了一个创建此 DataManager 的应用程序类,以便 UI 线程可以获取数据。现在的问题是有一个后台线程也需要访问数据库,我不确定如何执行此操作(目前我在尝试在 AsyncActivity 中创建新 DataManager 时遇到错误,因为数据库没有关闭(这是正确的,因为 UIThread 已将其打开)。

所以我认为(这可能不是正确的方法,因为它是一个不同的线程)我可以访问应用程序并在新会话上使用相同的 DataManager。但是我如何才能从没有上下文或活动的“普通”类访问应用程序(我在想之前已经做过,但不记得了)。

后台任务的代码是:

public class SyncTask extends AsyncTask<String, Integer, String> {

    private static final String TAG = "Sync";

    /** application context. */
    private Context context;
    private ProgressDialog dialog;

    public SyncTask(Context aContext) {
        //this.activity = activity;
        this.context = aContext;
        dialog = new ProgressDialog(context);
    }

    protected void onPreExecute() {
        this.dialog.setMessage("Loading...");
        this.dialog.setMax(100);
        this.dialog.setProgress(0);
        this.dialog.show();
    }

    @Override
    protected void onPostExecute(final String errMessage) {
        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (errMessage == null) {
            Toast.makeText(context, "Update completed", Toast.LENGTH_LONG).show();
        } else {
            AlertDialog alertDialog = new AlertDialog.Builder(context).create();
            alertDialog.setTitle("Error...");
            alertDialog.setMessage(errMessage);
            alertDialog.show();
        }
    }

    protected void onProgressUpdate(Integer... progress) {
        Log.d(TAG, "Progress Update: " + progress[0].toString());

        super.onProgressUpdate(progress[0]);
        dialog.setProgress(progress[0]);
    }

    protected String doInBackground(final String... args) {
        try{
            publishProgress( new Float(50).intValue());
            iDomsAndroidApp app = ((iDomsAndroidApp) ?? cannot remember ??);
            DataManager manager = app.getDataManager();
            manager.updateData();

            return null;
        } catch (Exception e){
            Log.e(TAG, "error", e);
            return e.getMessage();
        }
    }

}
4

2 回答 2

0

您应该使用 aContentProvider来访问数据库,它是线程安全的,并且是处理数据的首选方式。

http://developer.android.com/guide/topics/providers/content-providers.html

于 2012-08-30T10:07:14.453 回答
0

您可以使用您拥有的任何 Context 实例的 getApplicationContext() 方法并将返回值转换为 YouApplication。它完全符合条件。

于 2012-08-30T15:41:46.670 回答