Android数据的简单存储-File
Android数据的简单存储-File
又是一个学习的美好一天。前几天学习了一下安卓里的存储机制,那么这也就急着来拿出小本本总结一波啦~
那么总结之前我们先来看一下存储的不同使用方法图(图片如下)
今天我们就主要讲解一下File和ShredPreferences这两种存储方式
-
Fdile的使用
那么我们先来布置一下布局吧(当然得先装潢一波)
小提示:这里我用的是约束布局 <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="177dp" android:layout_marginEnd="41dp" android:hint="请输入数据" android:inputType="textPersonName" app:layout_constraintEnd_toStartOf="@+id/btn1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="32dp" android:text="保存" app:layout_constraintBaseline_toBaselineOf="@+id/editText" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/editText" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="310dp" android:text="转换到活动2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" />
布局外置好了,那我们来装扮装扮内饰(MainActivity.java)
public class MainActivity extends AppCompatActivity { private EditText edit;//输入框 private Button btn1;//保存的按钮 private Button btn2;//跳转的按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = findViewById(R.id.editText); btn1 = findViewById(R.id.btn1); btn2 = findViewById(R.id.btn2); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //获取edit数据(这里的trim()起到了去空格的作用) String data = edit.getText().toString().trim(); //本地保存数据 save(data);//调用save()方法 Toast.makeText(getApplicationContext(), load(), Toast.LENGTH_SHORT).show();//显示一下康康保存木有~ } }); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //这里就是比较简单的intent跳转 Intent intent = new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } }); } public void save(String str) { FileOutputStream out = null; BufferedWriter writer = null; try { out = openFileOutput("key", MainActivity.MODE_PRIVATE); writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(str); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } /**可以看到主要用到了Stream类,StreamWrite类和当前上下文的OpenFileOutput方法。 OpenFileOutput方法中第一个参数”key”是文件名,第二个参数FileCreationMode.Private说明当文件同名时,会覆盖原文件中的内容,如果是FileCreationMode.Append则会追加内容。 */
保存的代码完成后,为了代码逻辑更加的清晰,这里我们再另建一个活动
先看看布局内容吧
<TextView android:id="@+id/editText" android:layout_width="250dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:layout_marginTop="223dp" android:textSize="30sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="119dp" android:text="接收" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editText" />
然后便是接收的java代码了
public class Main2Activity extends AppCompatActivity { private TextView edit ; private Button btn ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); edit = findViewById(R.id.editText); btn = findViewById(R.id.btn1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = load();//返回值赋给str edit.setText(str);//显示文本 } }); } public String load(){ FileInputStream in = null ; BufferedReader reader = null ; StringBuilder builder = new StringBuilder(); try { in = openFileInput("key"); reader = new BufferedReader(new InputStreamReader(in)); String line = " "; while ((line = reader.readLine()) != null){ builder.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return builder.toString(); } } /** 可以看到先通过OpenFileInput方法打开文件并返回一个Stream对象, 再把这个对象做为StreamReader的构造方法参数来得到StreamReader对象,最后用ReadLine()方法来一行一行读取文件中的数据。 */
下面再来一波真机演示(动图如下)
-
SharedPreferences的使用
那么我们先来布置一下布局吧(当然得先装潢一波)
小提示:这里我用的是约束布局 <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="220dp" android:text="保存" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="3dp" android:layout_marginTop="95dp" android:text="读取" app:layout_constraintStart_toStartOf="@+id/btn1" app:layout_constraintTop_toBottomOf="@+id/btn1" /> <TextView android:id="@+id/textView" android:layout_width="171dp" android:layout_height="56dp" android:text="TextView" android:gravity="center_horizontal" app:layout_constraintBottom_toTopOf="@+id/btn2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/btn1" /> <EditText android:id="@+id/ed1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="64dp" android:ems="10" android:inputType="textPersonName" android:hint="姓名" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/ed2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:ems="10" android:hint="性别" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ed1" /> <EditText android:id="@+id/ed3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="12dp" android:ems="10" android:hint="班级" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ed2" />
布局外置好了,那我们来装扮装扮内饰(MainActivity.java)
public class MainActivity extends AppCompatActivity { private EditText ed1;//名字 private EditText ed2;//年龄 private EditText ed3;//班级 private TextView tv1;//显示文本 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed1 = findViewById(R.id.ed1); ed2 = findViewById(R.id.ed2); ed3 = findViewById(R.id.ed3); tv1 = findViewById(R.id.textView); //保存按钮点击监听事件 findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String name = ed1.getText().toString().trim();//去空格 String age = ed2.getText().toString().trim(); String classroom = ed3.getText().toString().trim(); //调用getSharedPreferences方法创建(已存在则打开)名为key的文件并返一个ISharedPreferences接口 //再通过这个接口的Edit方法得到ISharedPreferencesEditor接口 SharedPreferences.Editor editor = getSharedPreferences("key", MODE_PRIVATE).edit();// //再通过PutInt等方法添加要保存的数据, editor.putString("name", name); editor.putString("age", age); editor.putString("classroom", classroom); //最后调用Apply方法或者commit方法提交数据。 editor.commit(); } }); findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //提取preference的信息 SharedPreferences pref = getSharedPreferences("key", MODE_PRIVATE); String name = pref.getString("name", ""); String age = pref.getString("age", ""); String classroom = pref.getString("classroom", ""); //这里使用安卓的TextUtils的isEmpty方法来检测输入是否为空 if (android.text.TextUtils.isEmpty(name) || android.text.TextUtils.isEmpty(age) || android.text.TextUtils.isEmpty(classroom)) { tv1.setText("输入数据为空\n请完成所有选项"); } else { tv1.setText("姓名:" + name + "\n" + "年龄:" + age + "\n" + "班级:" + classroom + "\n"); }
}
});
}
}
```
下面再来一波真机演示(动图如下)
那么SharedPreferences和File的存储方式也就都介绍一遍了~
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
大雄先生!
喜欢就支持一下吧