提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、创建一个存储页面
layout界面如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp"
android:background="#E6E6E6">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:background="@android:color/white"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="账号:"
android:textColor="#000"
android:textSize="20sp" />
<EditText
android:hint="输入的是数字"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_username"
android:layout_marginLeft="5dp"
android:background="@null"
android:padding="10dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@android:color/white"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_password"
android:padding="10dp"
android:text="密码:"
android:textSize="20sp"
android:textColor="#000"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_password"
android:layout_marginLeft="5dp"
android:background="@null"
android:inputType="textPassword"
android:padding="10dp"/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_login"
android:text="注册"
android:layout_marginTop="25dp"
android:background="#3c8dc4"
android:textColor="@android:color/white"
android:textSize="20sp"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_cancel"
android:text="返回"
android:layout_marginTop="25dp"
android:background="#3c8dc4"
android:textColor="@android:color/white"
android:textSize="20sp"/>
</LinearLayout>
activity代码如下
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.example.mydownload.R;
import com.example.mydownload.entity.Person;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileOutputStream;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener{
private EditText username, paswd;
private Button button, cancel;
private static final int REQUEST_CODE = 1024;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
init();
requestPermission();
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(RegisterActivity.this, SuccessActivity.class);
startActivity(intent);
}
});
}
//组件初始化
public void init(){
username = (EditText) findViewById(R.id.et_username);
paswd = (EditText) findViewById(R.id.et_password);
button = (Button) findViewById(R.id.btn_login);
cancel = (Button) findViewById(R.id.btn_cancel);
button.setOnClickListener(this);
}
//点击事件
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.btn_login:
String name_str =username.getText().toString();
String paswd_str =paswd.getText().toString();
//TODO 创建Person对象
Person person = new Person(1,name_str,paswd_str);
//将Person对象保存为XML格式
try{
// getExternalFilesDir(null);
File file= new File(Environment.getExternalStorageDirectory(),
"person_mes.xml");
FileOutputStream fi_out = new FileOutputStream(file);
//如果运行报错,就把上面两行注释,使用下面一行的语句
// FileOutputStream fi_out = RegisterActivity.this.openFileOutput("person_mes.xml", Context.MODE_PRIVATE);
//XML文件生成器
XmlSerializer serializer= Xml.newSerializer();
serializer.setOutput(fi_out,"UTF-8");
serializer.startDocument("UTF-8",true);
serializer.startTag(null,"persons");
serializer.startTag(null,"person");
//将Person对象的用户名属性写人
serializer.startTag(null,"name");
serializer.text(person.getUsername());
serializer.endTag(null,"name");
//将Person对象的密码写人
serializer.startTag(null,"password");
serializer.text(person.getPaswd());
serializer.endTag(null,"password");
//结束标签
serializer.endTag(null,"person");
serializer.endTag(null,"persons");
serializer.endDocument();
serializer.flush();
fi_out.close();
Toast.makeText(this,"注册成功",Toast.LENGTH_SHORT).show();
}catch(Exception e){
e.printStackTrace();
System.out.println("序列化错误");
Toast.makeText(this,"注册失败",Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
//权限申请
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 先判断有没有权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
writeFile();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
}
} else {
writeFile();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_CODE) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
writeFile();
} else {
//
System.out.println("写入失败");
}
}
}
/**
* 模拟文件写入
*/
private void writeFile() {
System.out.println("写入成功");
}
}
二、创建一个读取页面
layout界面如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_success"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mydownload.activity.SuccessActivity">
<TextView
android:id="@+id/info_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Test:"
android:textSize="30sp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/info_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Test:"
android:textSize="30sp"
android:layout_marginTop="36dp"
android:layout_below="@+id/info_username"
android:layout_alignLeft="@+id/info_username"
android:layout_alignStart="@+id/info_username" />
<TextView
android:id="@+id/info_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Test:"
android:textSize="30sp"
android:layout_marginTop="36dp"
android:layout_below="@+id/info_password"
android:layout_alignLeft="@+id/info_password"
android:layout_alignStart="@+id/info_password" />
<TextView
android:id="@+id/info_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Test:"
android:textSize="30sp"
android:layout_marginTop="36dp"
android:layout_below="@+id/info_sex"
android:layout_alignLeft="@+id/info_sex"
android:layout_alignStart="@+id/info_sex" />
<Button
android:id="@+id/bb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看图片"
android:textSize="30sp"
android:layout_marginTop="36dp"
android:layout_below="@+id/info_spinner"
android:layout_alignLeft="@+id/info_spinner"
android:layout_alignStart="@+id/info_spinner" />
</RelativeLayout>
activity代码如下
package com.example.mydownload.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.mydownload.R;
import com.example.mydownload.Service.PersonService;
import com.example.mydownload.entity.Person;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class SuccessActivity extends Activity {
Button button;
TextView tv1,tv2,tv3,tv4;
String sex,username,password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_success);
tv1=(TextView)findViewById(R.id.info_username);
tv2=(TextView)findViewById(R.id.info_password);
tv3=(TextView)findViewById(R.id.info_sex);
tv4=(TextView)findViewById(R.id.info_spinner);
InputStream xml= this.getClass().getClassLoader().getResourceAsStream("assets/student.xml");
List< Person> persons = null;
try {
persons = PersonService.getPersons(xml);
} catch (XmlPullParserException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
for(Person person:persons){
Toast.makeText(this,person.getUsername(),Toast.LENGTH_SHORT).show();
tv1.setText("你的姓名是 " +person.getUsername());
tv2.setText("你的Id是 "+person.getId());
tv3.setText("你的密码是 "+person.getPaswd());
// tv4.setText("你的专业是 " + text);
try {
Thread.sleep(1 * 1000); // 暂停1秒
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
button = findViewById(R.id.bb);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SuccessActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
三、增加权限和创建asstes资源文件
在AndroidManifest.xml文件中添加以下两段代码
<!-- 读写权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<!--跳转页面-->
<activity android:name=".activity.SuccessActivity"/>
创建assets文件
在asstes文件中创建一个xml文件(这个xml文件被用来读取数据)
<?xml version="1.0" encoding="utf-8" ?>
<persons>
<person id = "1">
<name>twk</name>
<age>22</age>
</person>
<person id = "2">
<name>xk</name>
<age>21</age>
</person>
</persons>
四、创建service类和工具类(重点)
代码如下:
personService类
作用:读取xml的内容(被SuccessActivity调用)。
import android.util.Xml;
import com.example.mydownload.entity.Person;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class PersonService {
public static List<Person> getPersons(InputStream xml) throws IOException, XmlPullParserException{
List <Person> persons = null;
Person person = null;
XmlPullParser pullParser = Xml.newPullParser();
try{
//为PULL解析器设置要解析的XML数据
pullParser.setInput(xml,"UTF-8");
int event= pullParser.getEventType();
while(event!= XmlPullParser.END_DOCUMENT){
switch (event){
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList< Person >();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if("name".equals(pullParser.getName())){
String name= pullParser.nextText();
person.setUsername(name);
}
if("age".equals(pullParser.getName())){
String age = pullParser.nextText();
person.setPaswd(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person= null;
}
break;
}
event = pullParser.next();
}
}catch(XmlPullParserException e){
e.printStackTrace();
}
return persons;
}
}
实体类
这个实体类乱写的,可以按照需求改一点。(能运行就行了)
package com.example.mydownload.entity;
public class Person {
private Integer id;
private String username;
private String paswd;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPaswd() {
return paswd;
}
public void setPaswd(String paswd) {
this.paswd = paswd;
}
public Person() {
}
public Person(Integer id, String username, String paswd) {
this.id = id;
this.username = username;
this.paswd = paswd;
}
}
总结
没啥总结的,如果运行不成功那就评论区dd我。看到的话会回来改的。