2013-09-09 4 views
0

Я пытаюсь создать «Список дел», и у меня есть все, кроме сохранения данных. Я довольно новичок и задаюсь вопросом, может ли кто-нибудь показать мне, как выполнить сохранение данных внутри страны.Как сохранить мои данные изнутри?

Вот мой код:

Main_ToDoList.java

public class Main_ToDoList extends Activity implements OnClickListener 
{ 
private Button btnAdd; 
private EditText et; 
private ListView lv; 
ArrayList<String> list = new ArrayList<String>(); 
ArrayAdapter<String> adapter; 

final Context context = this; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 

    btnAdd = (Button)findViewById(R.id.addTaskBtn); 
    btnAdd.setOnClickListener(this); 
    et = (EditText)findViewById(R.id.editText); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, list); 

    // set the lv variable to your list in the xml 
    lv=(ListView)findViewById(R.id.list); 
    lv.setAdapter(adapter); 

    // set ListView item listener 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, final int position, long id) 
     { 
      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
      alertDialogBuilder.setTitle("Confirm Delete"); 
      alertDialogBuilder.setMessage("Sure you want to delete?"); 
      alertDialogBuilder.setCancelable(false); 
      alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) 
       { 
        adapter.remove(adapter.getItem(position)); 
       } 
      }); 
      alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) 
       { 
        dialogInterface.cancel(); 
       } 
      }); 
      AlertDialog alertDialog = alertDialogBuilder.create(); 
      alertDialog.show(); 
     } 
    }); 
} 
public void onClick(View v) 
{ 
    String input = et.getText().toString(); 
    if(input.length() > 0) 
    { 
     adapter.add(input); 
     et.setText(""); 
    } 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main__to_do_list, menu); 
    return true; 
} 
} 

Как будет идти о сохранении данных я вхожу? Благодаря!

+0

http://developer.android.com/guide/topics/data/data-storage.html – auselen

+0

Какие данные вы хотите сохранить? –

ответ

0

У вас есть 3 способа сделать это: SharedPreferences Файл Database

Если вы хотите хранить большое количество данных, чем использование базы данных, если вы хотите сохранить, скажем, 10-30tasks вы можете использовать SharedPreferences, который является самым быстрым способом.

В любом случае, если вы знакомы с написанием/чтением файлов, это также будет хорошим путем, но может потребовать больше работы.

0

У меня было что-то похожее, я хотел хранить небольшое количество данных, но не хотел использовать контент-провайдер или файл, поэтому использовал SharePreferences. (п.с. я использовал случайное число на конце ключа просто, чтобы сделать его уникальным, но пользователь выбрал позже из списка, так что я знаю значение тогда)

SharedPreferences sp = this.getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
Random rand = new Random(); 
int randomNum = rand.nextInt(1000); 
editor.putString("EQUATION_KEY_" + String.valueOf(randomNum), textToSave); 
editor.commit(); 
+0

Позволяет ли sharedPreference создавать элементы динамически? Поскольку это список дел и каждый раз, когда добавляется новое значение, мне нужно его сохранить, но я также удалю элементы из него. Поэтому я не хочу, чтобы элементы, которые я удалил, чтобы показать – JustAnotherUser32

+0

, да, я также удаляю из SharedPrefs, используя «editor.remove (KEY_TO_DELETE)»; где KEY_TO_DELETE - это ключ элемента, который пользователь выбрал из ListView. –

+0

Итак, чтобы быть ясным, сначала я заполняю общие префы с помощью вышеуказанного кода, а затем все общие привилегии представляются пользователю, и они могут выбрать один из сохраненные значения, или они могут удалить их. Тот факт, что ключ случайный, не имеет значения для меня, поскольку пользователь выбирает элемент из списка, в какой момент я получаю ключ, а затем я могу передать его функции удаления, чтобы удалить ее из общей pref –

0

Вы можете сделать один DatabaseHandler Class

 package com.connection; 

     import java.io.File; 
     import java.io.FileOutputStream; 
     import java.io.IOException; 
     import java.io.InputStream; 
     import java.io.OutputStream; 
     import java.util.ArrayList; 
     import android.content.ContentValues; 
     import android.content.Context; 
      import android.database.Cursor; 
     import android.database.sqlite.SQLiteDatabase; 
     import android.database.sqlite.SQLiteOpenHelper; 
     import android.database.sqlite.SQLiteStatement; 
      import android.util.Log; 

     public class DatabaseHandler extends SQLiteOpenHelper { 



// ====================== String Variables ====================== 
// The Android's default system path of your application database. 
private static String DB_PATH = "/data/data/com.example/databases/"; // Package name 
private static final String DATABASE_NAME = "test"; // Database Name 

// ++++++++++++++++++++++ int Variables ++++++++++++++++++++++ 
private static final int DATABASE_VERSION = 1; // Database Version 

// = = = = = = = = = = = Other Variables = = = = = = = = = = == 
private SQLiteDatabase myDataBase; 
private final Context myContext; 
SQLiteDatabase db; 





public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    this.myContext = context; 



} 
public void db_open() 
{ 
    db = this.getWritableDatabase(); 
} 
/** 
* Creates a empty database on the system and rewrites it with your own 
* database. 
* */ 
public void createDataBase() throws IOException { 
    boolean dbExist = databaseExist(); 

    if (dbExist) { 
     // do nothing - database already exist 
    } else { 
     // By calling this method and empty database will be created into 
     // the default system path 
     // of your application so we are gone a be able to overwrite that 
     // database with our database. 
     this.getReadableDatabase(); 
     try { 
      copyDataBase(); // call method to copy database 
      db = this.getWritableDatabase(); 
     } catch (IOException e) { 
      throw new Error("Error copying database"); 
     } 
    } 
} 

/** 
* Mrthod to check database is exist or not 
* @return 
*/ 
public boolean databaseExist() 
{ 
    File dbFile = new File(DB_PATH + DATABASE_NAME); 
    return dbFile.exists(); 
} 

/** 
* Copies your database from your local assets-folder to the just created 
* empty database in the system folder, from where it can be accessed and 
* handled. This is done by transfering bytestream. 
* */ 
private void copyDataBase() throws IOException { 
    // Open your local db as the input stream 
    InputStream myInput = myContext.getAssets().open(DATABASE_NAME); 

    // Path to the just created empty db 
    String outFileName = DB_PATH + DATABASE_NAME; 

    // Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    // transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer)) > 0) { 
     myOutput.write(buffer, 0, length); 
    } 

    // Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

} 


/** 
* Close Database 
*/ 
@Override 
public synchronized void close() { 



    if (myDataBase != null) 
     myDataBase.close(); 
    super.close(); 
} 

public void DB_close() 
{ 
    if(db!=null) 
     db.close(); 
} 


/** 
* Method to add data 

*/ 
public boolean addData(int vno,String content1,String content2){ 
    boolean status=false; 

    ContentValues values = new ContentValues(); 
    String checkEntry = "select id from yourtable where id="+vno;// +"' AND userid="+userid; 

    Cursor magazinecursor = db.rawQuery(checkEntry, null); 
    if (magazinecursor.moveToFirst()) { 

    } else { 

     values.put("id", vno); 
     values.put("content1", content1); 
     values.put("content2", content2); 




     long check = db.insert("yourtable", null, values); 
     if (check > -1) { 
      Log.i("inserstatus", "yourtable insert successfull"); 
      status = true; 
     } else { 
      Log.i("insertstatus", "yourtable insert unsuccessful"); 
     } 
    } 

    return status; 
} 





@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

}

И тогда в вашей деятельности, где вы хотите сохранить данные

   DatabaseHandler myDbHelper; 

      myDbHelper = new DatabaseHandler(MainActivity.this); 
      myDbHelper.db_open(); 
      myDbHelper.addData(1,"sample",sample); 

Надеюсь, это поможет вам или другим ...

+0

Извините, если не использовать базу данных. Меня больше интересует sharedPreferences. – JustAnotherUser32