2015-11-02 42 views
2

我已經編寫了一個應用程序的更新版本,該應用程序與存儲在資產資源文件夾內的目錄中的文本文件一起工作。該應用程序工作正常,如果它安裝在沒有以前的版本的設備上。但是,如果我在安裝了先前版本的設備上安裝更新版本,資源文件看起來並未更新。使用Android Studio進行安裝時以及使用谷歌Play商店更新應用程序時都會發生這種情況。我曾嘗試使用以下電話啓動資源:資產沒有被版本升級所取代?

final Context context = getApplicationContext(); 
    context.getAssets(); 

但它沒有幫助。

感謝您的任何建議。

+0

裏面是什麼資產文件夾? html文件?你的應用程序是一個web應用程序? –

+0

@Randyka。感謝回覆。不,它們是以文本形式存儲的數字數據集。 –

回答

1

Android應用程序的AFAIK Assets文件夾將在安裝時初始化一次。應用程序打包並安裝後,您無法更新資產文件夾。安裝完成後,如果您對資源進行了任何更改,它將不會反映到您較早安裝的版本。由於Asset文件夾是隻讀的,因此無法寫入或更新其中存在的任何文件。

如果你想更新它,那麼你需要卸載舊版本並安裝新版本:Source。 或者您可以將您的文本放在資源原始文件夾中。 像這樣的東西(txt文件的名稱是「幫助」):

try { 
     Resources res = getResources(); 
     InputStream in_s = res.openRawResource(R.raw.help); 

     byte[] b = new byte[in_s.available()]; 
     in_s.read(b); 
     txtHelp.setText(new String(b)); 
    } catch (Exception e) { 
     // e.printStackTrace(); 
     txtHelp.setText("Error: can't show help."); 
    } 

是的,基本上你只用刪除現有資產的文件夾:

public void clearApplicationData() { 
     File cache = getCacheDir(); 
     File appDir = new File(cache.getParent()); 
     if (appDir.exists()) { 
      String[] children = appDir.list(); 
      for (String s : children) { 
       if (!s.equals("lib")) { 
        deleteDir(new File(appDir, s)); 
        Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************"); 
       } 
      } 
     } 
    } 

    public static boolean deleteDir(File dir) { 
     if (dir != null && dir.isDirectory()) { 
      String[] children = dir.list(); 
      for (int i = 0; i < children.length; i++) { 
       boolean success = deleteDir(new File(dir, children[i])); 
       if (!success) { 
        return false; 
       } 
      } 
     } 

     return dir.delete(); 
    } 
+0

Randyka,您的回答意味着置於資產文件夾中的項目永遠不會在應用程序的使用期限內發生變化。它是否正確?這似乎是一個不合理的限制。 –

+0

我不知道這是否有幫助,但如果我「清除數據」,那麼較新的版本開始工作。在新的應用程序版本開始時有沒有辦法「清除數據」? –

+0

@EricS編輯了我的答案。但我建議將您的文本文件保存到您的資源中,因爲刪除您的資產文件夾意味着刪除您保存的首選項,並且更糟糕的是您的應用程序數據庫。 –