2012-07-13 123 views
0

我有一個非常奇怪的問題。我有一些數據顯示在對話框中。如果我關閉應用程序並重新打開它,我的ArrayList總是會再次添加原始數據(前5個條目 - >關閉&重新打開 - > 10個條目 - >關閉&重新打開 - > 15個條目等)。ArrayList不斷填充相同的數據

這是我分析我的數據到該ArrayList(這只是我的TabHost發生一次):

JSONArray jPDFs = json.getJSONArray("pdfs"); 
      for (int i = 0; i < jPDFs.length(); i++) { 
       JSONObject c3 = jPDFs.getJSONObject(i); 

       String pdf_title = c3.getString("title"); 
       String pdf_url = c3.getString("url"); 

       pdfListTitle.add(pdf_title); 
       pdfListTitle2.add(pdf_title); 
       pdfListURL.add(pdf_url); 
      } 

這裏是我的代碼,我表現出與所分析的數據的對話框:

public void showDialog() { 
    items = null; // have tried with and without... 
    builder = null; // have tried with and without... 

    builder = new AlertDialog.Builder(this); 
    Log.e(TabHost.LOG_TAG, "pdfListTitle=" + TabHost.pdfListTitle.size()); // this always hops from 5 -> 10 -> 15 on every reopen (without killing the app with a taskkiller...) 

    items = TabHost.pdfListTitle.toArray(new CharSequence[TabHost.pdfListTitle.size()]); 

    builder.setTitle(R.string.choose_document); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 
      WebView wv = (WebView) findViewById(R.id.webviewpdf); 
      wv.setWebViewClient(new WebViewClient()); 
      wv.getSettings().setJavaScriptEnabled(true); 
      wv.getSettings().setBuiltInZoomControls(true); 
      wv.loadUrl("http://docs.google.com/gview?embedded=true&url=" 
        + TabHost.pdfListURL.get(item)); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

非常感謝您的幫助!

回答

2

我想你已經採取pdfListTitle靜態TabHost,這可能是問題

pdfListTitle應該初始化每次當你的活動通話

比如你可以這樣寫代碼onCreate()這樣的方法

ArrayList<T> pdfListTitle; 

protected void onCreate(Bundle savedInstanceState) { 

    pdfListTitle = new ArrayList<T>; <---- 

} 
+0

看起來像這樣!但我怎麼能改變它?因爲現在它說:不能作出非靜態引用,靜態字段TabHost.pdfListTitle – user754730 2012-07-13 12:21:05

+0

請參閱編輯答案,可能會幫助你 – MAC 2012-07-13 12:25:34

+0

所以我必須在我的標籤中做到這一點?或者在我的TabHost? 因爲現在我實例化並在TabHost中填充我的ArrayList並獲取Tab本身中的條目... – user754730 2012-07-13 12:33:24

1

我猜的方法TabHost.pdfListTitle.toArray(..),您應該重置您填寫每一次數據列表..

+0

每次清除列表之前,你填充數據到它 – ozmank 2012-07-13 12:18:52

0

簡單和幼稚的解決方法是添加

pdfListTitle.clear()

您填寫前與數據列表。

但是,這不會解決每次顯示對話框時調用方法的問題,除非您需要。

0

正如以前的用戶所說,你應該手動清理你的清單(pdfListTitle.clear()),但是更深入地理解問題是有用的。

正如我所看到的,您在pdfListTitle靜態字段存儲在你的類TabHost(順便說一下,它不能很好地使用這樣的名字,如TabHost因爲TabHost在Android的API(http://developer.android.com/reference/android/widget/TabHost.html)靜態字段都被初始化首先是在類加載的時候,並且沒有任何擔保,Android系統會正確卸載這些類,因爲在android中沒有「關閉」應用程序,這對你閱讀Java中的類加載器很有用(你可以谷歌它很簡單)