目录
一、assets介绍
Android的assets目录是一种用于存储应用程序内部资源文件的文件夹。与res(资源)文件夹不同,assets文件夹中的文件不会在编译时被压缩成二进制格式,而是保留原始文件格式,并作为应用程序的一部分打包到APK文件中。
这使得开发者可以使用相对路径访问assets目录下的文件,而无需通过资源ID来引用它们。assets目录通常用于存储大型数据文件或其他需要以原始形式访问的文件,如HTML、CSS、JavaScript文件等。
使用assets目录可以允许应用程序访问含有自定义格式的数据文件,例如SQLite数据库文件或者字体文件等。 但需要注意的是,由于assets目录中的文件未经压缩,在运行时读取文件时可能会导致性能瓶颈,因此建议只在必要时使用该目录存储文件。
二、 在assets文件夹创建json文件
创建assets文件夹:
在assets文件夹下创建文件(注意文件名的后缀是.json):
三、例子
效果图:
添加依赖:
implementation 'com.google.code.gson:gson:2.8.5'
MainActivity:
package com.example.json;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
TextView name1,name2,name3;
TextView sex1,sex2,sex3;
List<MyBean.Student> mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
mList = new ArrayList<>();
AnalyseJson analyseJson = new AnalyseJson();
mList = analyseJson.getStudentData(MainActivity.this);
name1.setText(mList.get(0).getName());
name2.setText(mList.get(1).getName());
System.out.println(mList.get(1).getName());
name3.setText(mList.get(2).getName());
System.out.println(mList.get(2).getName());
sex1.setText(mList.get(0).getSex());
sex2.setText(mList.get(1).getSex());
sex3.setText(mList.get(2).getSex());
}
private void initView() {
name1 = findViewById(R.id.name1);
name2 = findViewById(R.id.name2);
name3 = findViewById(R.id.name3);
sex1 = findViewById(R.id.sex1);
sex2 = findViewById(R.id.sex2);
sex3 = findViewById(R.id.sex3);
}
}
activity_main:
<?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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="15sp"
android:text="姓名:"
/>
<TextView
android:id="@+id/name1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
<TextView
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="性别:"/>
<TextView
android:id="@+id/sex1"
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="15sp"
android:text="姓名:"
/>
<TextView
android:id="@+id/name2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
<TextView
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="性别:"/>
<TextView
android:id="@+id/sex2"
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textSize="15sp"
android:text="姓名:"
/>
<TextView
android:id="@+id/name3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
<TextView
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="性别:"/>
<TextView
android:id="@+id/sex3"
android:textSize="15sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
AnalyseJson:
package com.example.json;
import android.content.Context;
import android.widget.Toast;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class AnalyseJson {
/**
* 返回String类型的Json
* @param context
* @param fileName
* @return
*/
public String loadJSONFromAsset(Context context, String fileName) {
String json = null;
try {
InputStream inputStream = context.getAssets().open(fileName);
int size = inputStream.available();
byte[] buffer = new byte[size];
inputStream.read(buffer);
inputStream.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
/**
* 解析json数据
* @param context
* @return
*/
public List<MyBean.Student> getStudentData(Context context){
Gson gson = new Gson();
MyBean myBean = gson.fromJson(loadJSONFromAsset(context,"data.json"),MyBean.class);
Toast.makeText(context,"code:"+myBean.getCode()+",Message:"+myBean.getMessage(),Toast.LENGTH_LONG).show();
final List<MyBean.Student> dataBeans = myBean.getData();
return dataBeans;
}
}
MyBean :
package com.example.json;
import java.util.List;
public class MyBean {
private int code;
private String message;
private List<Student> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<Student> getData() {
return data;
}
public void setData(List<Student> data) {
this.data = data;
}
class Student {
String id;
String name;
String sex;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}}
在assets下的data.json文件的json数据:
{
"code": 200,
"message": "获取成功",
"data":[
{
"id":"001",
"name":"小明",
"sex":"男"
},
{
"id":"002",
"name":"小花",
"sex":"女"
},
{
"id":"003",
"name":"小王",
"sex":"男"
}
]
}
四、将数据封装成JSON格式
public String translate_into_Json(){
JSONObject person = new JSONObject();
try {
person.put("name","小明");
person.put("id",10);
person.put("age",19);
} catch (JSONException e) {
e.printStackTrace();
}
return person.toString();
}
运行结果: