2012-08-30 30 views
0

我的數據庫連接有問題。我有一個創建數據庫連接等的DataManager。我還創建了一個創建此DataManager的Application類,以便UI線程可以獲取數據。現在的問題是,有一個後臺線程也需要訪問數據庫,我不完全確定如何做到這一點(目前,當我嘗試在AsyncActivity中創建新的DataManager時因爲數據庫未關閉而出現錯誤(這是正確的,因爲UIThread已打開)從'普通'Java類訪問Android應用程序

所以我認爲(這可能不是正確的方式來做到這一點,因爲它是一個不同的線程)我會獲得應用程序和使用但是我怎樣才能在沒有Context或Activity的情況下從'普通'類訪問應用程序(我已經做過了,但是我沒有想到,但記不清了)

背景的代碼任務是:

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(); 
     } 
    } 

} 
+0

爲什麼你沒有上下文?您將它傳遞給構造函數。如果你需要更多的東西,你可以把它傳遞給構造函數,我想象? – Thilo

+0

我確實意識到這一點,但認爲這是一種通用的方式。我可以將上下文傳遞給後臺任務。但是,我如何獲得應用程序,因爲上下文本身不給getApplication()並將上下文轉換爲應用程序看起來不正確(或者是否?)。 –

+0

您可以使用任何Context實例的getApplicationContext()方法,並將其返回給YouApplication。這絕對是合格的。 –

回答

0

您可以使用您有任何上下文實例,並投返回YouApplication的getApplicationContext()方法。這絕對是合格的。