2013-02-25 35 views
21

Tôi chỉ muốn chạy một đoạn mã một lần trong ứng dụng của mình và khi tôi chạy nó lần đầu tiên (ứng dụng mới được cài đặt). Làm thế nào tôi có thể làm điều này, bất cứ ai có thể giải thích cho một đoạn mã.Chỉ chạy một đoạn mã một lần khi ứng dụng được cài đặt

Thực ra, trong dự án android của tôi, tôi muốn tạo cơ sở dữ liệu và chỉ chèn một số giá trị vào lần chạy đầu tiên. Sau đó, đoạn mã cụ thể đó không nên chạy lại. Làm cách nào tôi có thể đạt được cơ chế này thông qua SharedPreferences hoặc Tuỳ chọn.

Mã mẫu sẽ hữu ích hơn.

Trả lời

33

Trước khi tất cả các bạn có thể sử dụng SQLiteOpenHelper. Đó là cách ưa thích để làm việc với cơ sở dữ liệu. Lớp này có phương thức onCreate(SQLiteDatabase), được gọi khi tạo cơ sở dữ liệu đầu tiên. Tôi nghĩ nó phù hợp với bạn.

Nếu bạn muốn linh hoạt hơn và logic thời gian đầu tiên của bạn không bị ràng buộc chỉ với cơ sở dữ liệu, bạn có thể sử dụng mẫu được cung cấp trước đó. Bạn chỉ cần đặt nó ở vị trí khởi động.

Có 2 điểm khởi động. Nếu bạn chỉ có hoạt động duy nhất, bạn có thể đặt mã của bạn trong onCreate phương pháp, vì vậy nó sẽ là như thế này:

public void onCreate(Bundle savedInstanceState) { 
    // don't forget to call super method. 
    super.onCreate(savedInstanceState); 

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    if (!prefs.getBoolean("firstTime", false)) { 
    // <---- run your one time code here 
    databaseSetup(); 

    // mark first time has runned. 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstTime", true); 
    editor.commit(); 
    } 
} 

Đừng quên đặt activity declaration in manifest, cũng như nó intentfilters (action = MAIN, category = LAUNCHER).

Nếu bạn có nhiều hoạt động và bạn không muốn sao chép logic khởi động, bạn có thể đặt logic khởi tạo trong cá thể Ứng dụng, được tạo trước tất cả các hoạt động (và các thành phần khác, chẳng hạn như dịch vụ, người phát sóng phát sóng , các nhà cung cấp nội dung).

Chỉ cần tạo lớp như thế:

public class App extends Application { 

    @Override 
    public void onCreate() { 
    super.onCreate(); 

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    if (!prefs.getBoolean("firstTime", false)) { 
     // <---- run your one time code here 
     databaseSetup(); 

     // mark first time has runned. 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putBoolean("firstTime", true); 
     editor.commit(); 
    } 
} 

Tất cả bạn cần để làm việc này, được đặt trong application thẻ trong AndroidManifest.xml thuộc tính android: name = "App.".

<!-- other xml stuff --> 

<application ... android:name=".App"> 

    <!-- yet another stuff like nextline --> 
    <activity ... /> 
</application> 
+0

Cảm ơn bạn rất nhiều, mã của bạn đã cứu tôi khỏi thế giới. –

9

Bạn có thể thử:

SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this); 
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true); 
if (isFirstRun) 
{ 
    // Code to run once 
    SharedPreferences.Editor editor = wmbPreference.edit(); 
    editor.putBoolean("FIRSTRUN", false); 
    editor.commit(); 
} 

Viết này trong hoạt động đầu tiên của bạn trên tạo ra. Sau đó, sau khi mã sẽ không thực thi lại.

+0

ví dụ diễn ra sau khi super.onCreate (savedInstanceState); – pollaris

3

Bất cứ nơi nào bạn cần phải chạy mã này trong ứng dụng của bạn:

  1. Kiểm tra nếu boolean firstTime là True trong tùy chọn chia sẻ
  2. Nếu không

    • Run mã một lần
    • Lưu firstTime là đúng trong các tùy chọn được chia sẻ

Something như thế này:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
if(!prefs.getBoolean("firstTime", false)) { 
    // run your one time code here 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstTime", true); 
    editor.commit(); 
} 
2

đây là những gì tôi làm trong những tình huống:

wmbPreference = PreferenceManager.getDefaultSharedPreferences(this); 


    isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true); 

    if (isFirstRun) 
    { 

     // Do your magic here 

     SharedPreferences.Editor editor = wmbPreference.edit(); 
     editor.putBoolean("FIRSTRUN", false); 
     editor.commit(); 
    }else{ 
     //what you do everytime goes here 
    } 

hy vọng điều này giúp

Các vấn đề liên quan