下面是具体代码,其中MainActivity.java的部分代码有修改,在文章后面给出
logindemo_layout.java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:andro>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/background1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:padding="30dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_marginLeft="30dp"
android:drawableLeft="@mipmap/ic_launcher_round"
android:text="家庭记账本"
android:textSize="40sp"
android:layout_height="wrap_content"/>
<EditText
android:layout_width="match_parent"
android:layout_marginTop="30dp"
android:id="@+id/et_username"
android:layout_height="wrap_content"
android:hint="用户名" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_password"
android:hint="密码" />
<Button
android:layout_width="match_parent"
android:text="登录"
android:textSize="20sp"
android:id="@+id/bt_login"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="没有账号,立即去注册"
android:textColor="#00ffff"
android:textSize="16sp" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
MainActivity.java
package com.example.logindemo; import androidx.appcompat.app.AppCompatActivity; import android.nfc.Tag; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { private static final String TAG ="MainActivity"; private TextView mUsername; private TextView mPassword; private Button mLogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.logindemo_layout); //第一步,找到控件 initViews(); //第二步,给我们的登录按钮设置监听事件 initListener(); } /** * 这个方法,我们用来找对应的控件 */ private void initViews(){ mUsername= (TextView)this.findViewById(R.id.et_username); mPassword= (TextView)this.findViewById(R.id.et_password); mLogin = (Button)this.findViewById(R.id.bt_login); } /** * 这个方法就是给登录按钮设置点击的监听 */ private void initListener(){ mLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG,"点击了登录按钮"); handlerLoginEvent(v); } }); } /** * 处理登录事件 * @param v */ private void handlerLoginEvent(View v) { //第三部,我们要拿到界面上的信息,包括账号和密码 //账号 String usernameText =mUsername.getText().toString(); //密码 String passwordText =mPassword.getText().toString(); //把账号和密码保存起来 saveUserInfo(usernameText,passwordText); } private void saveUserInfo(String usernameText,String passwordText){ Log.d(TAG,"保存用户信息"); File file =new File("info.txt"); try { FileOutputStream fileOutputStream = new FileOutputStream(file); //以特定的格式存储 fileOutputStream.write((usernameText+"***"+passwordText).getBytes()); fileOutputStream.close(); }catch (Exception e){ e.printStackTrace(); } } }
点击登录后,发现程序崩了
为什么我们直接写一个文件名的时候,去写文件,报出的异常是read-only。
在安卓系统中,每一个应用就相当于一个用户,每个用户(应用)的权限是特定的,不能够操作其它应用的内容
找到我们的项目
查看我们的info文件应该存放的目录
修改其中saveUserInfo方法
private void saveUserInfo(String usernameText,String passwordText){ Log.d(TAG,"保存用户信息"); try { File file =new File("/data/data/com.example.logindemo/info.txt"); if(file.exists()){ file.createNewFile(); } FileOutputStream fileOutputStream = new FileOutputStream(file); //以特定的格式存储 fileOutputStream.write((usernameText+"***"+passwordText).getBytes()); fileOutputStream.close(); }catch (Exception e){ e.printStackTrace(); } }
点击登录
查看发现info.txt文件,且内容为zzw***123说明保存成功。
还有另一种方法
通过Android Devices Monitor查看
https://www.cnblogs.com/rivers-enduring/p/9212111.html
打开后,在File Explorer下找到包/data/data/com.example.logindemo/
选中info.txt,右上角有导出
导出到桌面,进行查看