2016-06-14 49 views
1

我是新开发的Android应用程序,目前我正在开发一个android软件,需要用户输入相当数量的数据并将其作为数据库保存在sharedPreferences上。这里是例如我的编码:根据输入呼叫句子

public static final String DEFAULT= "no data found"; 

然后:

protected void storeData(SharedPreferences.Editor editor, String key, EditText et) { 
    String content = et.getText().toString(); 
    if ("".equals(content)) { 
     editor.remove(key); 
    } else { 
     editor.putString(key, content); 
    } 
} 

用户输入的节约:

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); 
          gender = (EditText) findViewById(R.id.gender); 
          age = (EditText) findViewById(R.id.age); 
          fruit = (EditText) findViewById(R.id.fab_fruit); 
          music = (EditText) findViewById(R.id.fab_music); 
SharedPreferences sharedPreferences = getSharedPreferences("Database", Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = sharedPreferences.edit(); 
         storeData(editor,"name", name); 
         storeData(editor,"gender", gender); 
         storeData(editor,"age", age); 
         storeData(editor,"fruit", fruit); 
         storeData(editor,"music", music); 
         editor.commit(); 
         Toast.makeText(MainActivity7.this, "Data was saved!!!", Toast.LENGTH_SHORT).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 gender = sharedPreferences.getString("gender", DEFAULT); 
      String age = sharedPreferences.getString("age", DEFAULT); 
      String fruit = sharedPreferences.getString("fruit", DEFAULT); 
      String music = sharedPreferences.getString("music", DEFAULT); 
      } 
        } 
      ); 
AlertDialog.Builder a_builder = new AlertDialog.Builder(MainActivity12.this); 
      a_builder.setMessage(
        "Data 1 name is :"+ name + "\n"+ 
        "Data 1 gender is :"+ gender + "\n"+ 
        "Data 1 age is :"+ age + "\n"+ 
        "Data 1 favorite fruit is :"+ fruit + "\n"+ 
        "Data 1 favorite music is :"+ music + "\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(); 
     } 

由于我已经设置了Sente NCE在构建器,所以当用户没有回答的问题之一,输出将变得像

   Data 1 name is : Sample1 
       Data 1 gender is : male 
       Data 1 age is : no data found 
       Data 1 favorite fruit is : apple 
       Data 1 favorite music is : no data found 

我想知道是否有任何其他的方式,因此,如果用户没有输入任何东西,相关句子不会出现,如下所示:

 Data 1 name is : Sample1 
     Data 1 gender is : Male 
     Data 1 favorite fruit is : apple 

这是编码的例子,在我的应用程序中,我需要用户输入20-30数据。感谢所有愿意帮助的人。 *如果标题引起混淆,我很抱歉,因为我不确定它应该引用什么。

回答

2

而不是使用一个默认String你的喜好,你可以使用null作为默认值:

String name = sharedPreferences.getString("name", null); 
String gender = sharedPreferences.getString("gender", null); 
// ... 

之后,你可以简单地进行null值检查,并相应地构建您的留言:

StringBuilder messageBuilder = new StringBuilder(); 

if(name != null) { 
    messageBuilder.append("Data 1 name is: " + name); 
    messageBuilder.append("\n"); 
} 
if(gender != null) { 
    messageBuilder.append("Data 1 gender is: " + gender); 
    messageBuilder.append("\n"); 
} 
// ... 

a_builder.setMessage(messageBuilder.toString());