2016-05-09 2 views
0

Я новичок в разработке приложения для Android, и в настоящее время я разрабатываю программное обеспечение для Android, которое требует от пользователя ввода большого количества данных и сохранения его на sharedPreferences в качестве базы данных. Вот мое кодирование:Задать пробел/пустое значение/значение по умолчанию

public static final String DEFAULT= "NONE"; 

При сохранении входных данных пользователя, часть кодирования, как показано на следующем:

public void OnClickSave(){ 
     button17=(Button)findViewById(R.id.button17); 
     button17.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         name = (EditText) findViewById(R.id.name); 
         material = (EditText) findViewById(R.id.material); 
         type = (EditText) findViewById(R.id.type); 
         proper1 = (EditText) findViewById(R.id.proper1); 
         p1 = (EditText) findViewById(R.id.p1); 
         p2 = (EditText) findViewById(R.id.p2); 
         p3 = (EditText) findViewById(R.id.p3); 
         po1 = (EditText) findViewById(R.id.po1); 
         po2 = (EditText) findViewById(R.id.po2); 
         po3 = (EditText) findViewById(R.id.po3); 
         c1 = (EditText) findViewById(R.id.c1); 
         c2 = (EditText) findViewById(R.id.c2); 
         c3 = (EditText) findViewById(R.id.c3); 

         SharedPreferences sharedPreferences = getSharedPreferences("Database", Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         editor.putString("name", name.getText().toString()); 
         editor.putString("material", material.getText().toString()); 
         editor.putString("type", type.getText().toString()); 
         editor.putString("proper1",proper1.getText().toString()); 
         editor.putString("p1", p1.getText().toString()); 
         editor.putString("p2", p2.getText().toString()); 
         editor.putString("p3", p3.getText().toString()); 
         editor.putString("po1", po1.getText().toString()); 
         editor.putString("po2", po2.getText().toString()); 
         editor.putString("po3", po3.getText().toString()); 
         editor.putString("c1", c1.getText().toString()); 
         editor.putString("c2", c2.getText().toString()); 
         editor.putString("c3", c3.getText().toString()); 
         editor.commit(); 
         Toast.makeText(MainActivity.this, "Saved!!!", Toast.LENGTH_LONG).show(); 
        } 
       } 
     ); 
    } 

Для загрузки данных,

public void OnClickLoad(){ 
      button38=(Button)findViewById(R.id.button38); 
      button38.setOnClickListener(
        new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
    SharedPreferences sharedPreferences = getSharedPreferences("Database", Context.MODE_PRIVATE); 
      String name = sharedPreferences.getString("name", DEFAULT); 
      String material = sharedPreferences.getString("material", DEFAULT); 
      String type = sharedPreferences.getString("type", DEFAULT); 
      String proper1 = sharedPreferences.getString("proper11", DEFAULT); 
      String p1 = sharedPreferences.getString("p1", DEFAULT); 
      String p2 = sharedPreferences.getString("p2", DEFAULT); 
      String p3 = sharedPreferences.getString("p3", DEFAULT); 
      String po1 = sharedPreferences.getString("po1", DEFAULT); 
      String po2 = sharedPreferences.getString("po2", DEFAULT); 
      String po3 = sharedPreferences.getString("po3", DEFAULT); 
      String c1 = sharedPreferences.getString("c1", DEFAULT); 
      String c2 = sharedPreferences.getString("c2", DEFAULT); 
      String c3 = sharedPreferences.getString("c3", DEFAULT); 
    } 
        } 
      ); 
AlertDialog.Builder a_builder = new AlertDialog.Builder(MainActivity12.this); 
      a_builder.setMessage(
        "Data input 1:"+ name + "\n"+ material +"\n"+ type +"\n"+ proper1 +"\n"+ 
        p1+ "\n"+p2 +"\n"+ p3 + "\n"+po1 +"\n"+ po2 +"\n"+po3 +"\n"+ s1 +"\n"+s2 +"\n"+s3 + "\n" ) 

        .setCancelable(false) 
        .setPositiveButton("Proceed", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }) 
        .setNegativeButton("Return", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }) 
      ; 
      AlertDialog alert= a_builder.create(); 
      alert.setTitle("Checking"); 
      alert.show(); 
     } 

Когда пользователь не вводил никаких данных и не нажимал кнопку сохранения, данные показывают, что это данные DEFAULT, которые НЕ установлены как установлено.

public static final String DEFAULT= "NONE"; 

Однако, когда пользователь не вводит никаких данных и не нажимает кнопку сохранения, выходные данные становятся пустыми.

Возникает вопрос, возможно ли установить пустой ввод или ввод в космос данных DEFAULT? (Означает, что пользователь не вставлял какие-либо входные данные (или только пробел) и сохранял, соответствующие загруженные данные были НЕТ.)

Я имел в виду какое-то решение, подобное this, зная, что я могу сделать это вручную 1 на 1, но является ли это альтернативным решением сделать его быстрее и положить в Sharepreferances?

Благодарим заранее всех, кто интересуется и помогает! Извините за мой плохой язык.

+0

Что будет вы делаете, когда кто-то вводит «NONE» в один из этих текстов редактирования? – petey

+0

@petey Это нормально, если кто-то либо оставляет его пустым, либо вводит «NONE», так как он будет указывать то же значение, когда у них нет данных. Я пытаюсь сделать выходные данные не пустыми. Надеюсь, ты поможешь. Благодарю. – GentleG

+0

@GentleG Удалить в Get Preferences в DEFAULT и использовать двойную Quata. –

ответ

0

Однако, когда пользователь не вводил никаких данных и не нажимал кнопку сохранения, выходные данные становятся пустыми.

Это пустая строка "".

Возникает вопрос, можно ли установить пустой ввод или пробел в данные DEFAULT?

Вы делаете это неправильно. Вы не должны введите запись в общие настройки, если есть отметка. Затем во время чтения вы получите свой DEFAULT. Так что помощник как

protected void storeData(SharedPreferences.Editor editor, String key, EditText et) { 
    String content = et.getText().toString(); 

    // is there any content? Empty string is no content 
    if ("".equals(content)) { 
     // ensure we do not retain previously stored value for that key 
     editor.remove(key); 
    } else { 
     // save new data in the storage 
     editor.putString(key, content); 
    } 
} 

, а затем заменить все вызовы у вас есть, что положить строковые данные непосредственно, как этот:

editor.putString("p1", p1.getText().toString()); 

с вызовами нашего помощника:

storeData(editor, "p1", p1); 
+0

Благодарим вас за помощь, оценили и извините за беспорядок, поскольку я перепутал различные методы, найденные через Интернет, и в конечном итоге с этим. Не могли бы вы объяснить это более подробно? Я пытаюсь реализовать данное решение, но не удалось. Как сделать данные помощника/вызова? На самом деле я ожидаю, что пользователь будет вводить все данные, но в случае, если они пропускают часть EditText, я хочу поменять пустую строку на NONE при загрузке. В любом случае, это что-то другое между двумя ниже? editor.putString ("p1", p1.getText(). ToString()); storeData (редактор, "p1", p1); – GentleG

+0

Прочтите мой ответ. Вы добавляете помощник 'storeData' в свой класс, а затем вы заменяете все вызовы' editor.putString() 'вызовами помощника (как показано в ответе). «Трюк» - это не сохранение записи в общих настройках, если данные равны «" »(пустая строка). Таким образом, когда вы будете читать, данные не будут найдены, и вы получите значение по умолчанию. Я добавил несколько комментариев к коду –

+0

Ваши добавленные комментарии действительно очень помогают мне понять вспомогательную функцию. Это то, что мне нужно, и это помогает решить мою проблему. Поистине оцененный! Я добавлю свое решение, даю вам кредит. Еще раз спасибо! – GentleG

Смежные вопросы