将静态数据保存在 Android
Keeping static data in Android
我有一个简单的应用程序:在按下按钮时,它以格式名称/年龄/品种显示有关 dog/cat 的数据
我使用两个 fragment
和 eventbus
库来设置它们之间的通信
fragment
按下按钮时在其他片段中发送数据非常简单
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.greenrobot.eventbus.EventBus;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class DogFragment extends Fragment{
public DogFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.dog_activity, container, false);
ButterKnife.bind(this,view);
return view;
}
@OnClick({R.id.dog1,R.id.dog2,R.id.dog3})
public void setViewOnClickEvent(View view) {
EventBus bus = EventBus.getDefault();
switch (view.getId()) {
case R.id.dog1:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog1),
getResources().getString(R.string.Two),
getResources().getString(R.string.Husky)));
break;
case R.id.dog2:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog2),
getResources().getString(R.string.One),
getResources().getString(R.string.Malamute)));
break;
case R.id.dog3:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog1),
getResources().getString(R.string.One),
getResources().getString(R.string.Samoyed)));
break;
}
}
}
为用户接受和显示数据的片段
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import butterknife.ButterKnife;
public class InformationFragment extends Fragment {
private TextView nameText,ageText,breedText;
EventBus bus = EventBus.getDefault();
@Override
public void onStart(){
super.onStart();
}
public InformationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.information_layout, container, false);
ButterKnife.bind(this,view);
bus.register(this);
nameText= view.findViewById(R.id.name);
ageText = view.findViewById(R.id.age);
breedText = view.findViewById(R.id.breed);
return view;
}
@Subscribe
public void onEvent(SendTextEvent event) {
nameText.setText(event.nameText);
ageText.setText(event.ageText);
breedText.setText(event.BreedText);
}
@Override
public void onDetach() {
bus.unregister(this);
super.onDetach();
}
}
将由事件总线发送的数据的构造函数
public class SendTextEvent {
public String nameText;
public String ageText;
public String BreedText;
public SendTextEvent(String setName,String setAge, String setBreed) {
this.nameText = setName;
this.ageText = setAge;
this.BreedText = setBreed;
}
}
资源值
<string name="One">1</string>
<string name="Two">2</string>
<string name="Dog1">Dog1</string>
<string name="Dog2">Dog2</string>
<string name="Dog3">Dog3</string>
<string name="Husky">husky</string>
<string name="Samoyed">samoyed</string>
<string name="Malamute">Malamute</string>
当它很简单并且有 3 个具有 3 个特征的“狗”时,它看起来不错。
但是,例如,如果我想为 30 只“狗”和 20 只猫创建 50 个按钮,每个 dog/cat 具有 20 个特征,如身高、体重、眼睛颜色 e.t.c,手动编写所有这些将是愚蠢的在价值观中,它在代码中看起来不太好
所以我的问题是:
我如何以格式名称/年龄/品种/身高/体重 e.t.c 存储静态数据,这些数据将在创建应用程序时预加载,然后我可以检索它并在按下特定按钮时将其发送到 beetwen 片段?
提前致谢。
您可以在 assets
文件夹中创建一个 json 文件,结构如下:
{
"dogs": [
{
"name": "dog1",
"age": 1,
"characteristic": "husky"
},
{
"name": "dog2",
"age": 3,
"characteristic": "husky"
},
...,
{
"name": "dog30",
"age": 3,
"characteristic": "husky"
}
],
"cats": [
{
"name": "cat1",
"age": 1,
"characteristic": "british"
},
{
"name": "cat2",
"age": 2,
"characteristic": "short hair"
},
...,
{
"name": "cat20",
"age": 2,
"characteristic": "short hair"
}
]
}
并在打开应用程序时阅读此 json 文件。阅读可以看this tutorial.
我有一个简单的应用程序:在按下按钮时,它以格式名称/年龄/品种显示有关 dog/cat 的数据
我使用两个 fragment
和 eventbus
库来设置它们之间的通信
fragment
按下按钮时在其他片段中发送数据非常简单
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.greenrobot.eventbus.EventBus;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class DogFragment extends Fragment{
public DogFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.dog_activity, container, false);
ButterKnife.bind(this,view);
return view;
}
@OnClick({R.id.dog1,R.id.dog2,R.id.dog3})
public void setViewOnClickEvent(View view) {
EventBus bus = EventBus.getDefault();
switch (view.getId()) {
case R.id.dog1:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog1),
getResources().getString(R.string.Two),
getResources().getString(R.string.Husky)));
break;
case R.id.dog2:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog2),
getResources().getString(R.string.One),
getResources().getString(R.string.Malamute)));
break;
case R.id.dog3:
bus.post(new SendTextEvent(getResources().getString(R.string.Dog1),
getResources().getString(R.string.One),
getResources().getString(R.string.Samoyed)));
break;
}
}
}
为用户接受和显示数据的片段
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import butterknife.ButterKnife;
public class InformationFragment extends Fragment {
private TextView nameText,ageText,breedText;
EventBus bus = EventBus.getDefault();
@Override
public void onStart(){
super.onStart();
}
public InformationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.information_layout, container, false);
ButterKnife.bind(this,view);
bus.register(this);
nameText= view.findViewById(R.id.name);
ageText = view.findViewById(R.id.age);
breedText = view.findViewById(R.id.breed);
return view;
}
@Subscribe
public void onEvent(SendTextEvent event) {
nameText.setText(event.nameText);
ageText.setText(event.ageText);
breedText.setText(event.BreedText);
}
@Override
public void onDetach() {
bus.unregister(this);
super.onDetach();
}
}
将由事件总线发送的数据的构造函数
public class SendTextEvent {
public String nameText;
public String ageText;
public String BreedText;
public SendTextEvent(String setName,String setAge, String setBreed) {
this.nameText = setName;
this.ageText = setAge;
this.BreedText = setBreed;
}
}
资源值
<string name="One">1</string>
<string name="Two">2</string>
<string name="Dog1">Dog1</string>
<string name="Dog2">Dog2</string>
<string name="Dog3">Dog3</string>
<string name="Husky">husky</string>
<string name="Samoyed">samoyed</string>
<string name="Malamute">Malamute</string>
当它很简单并且有 3 个具有 3 个特征的“狗”时,它看起来不错。
但是,例如,如果我想为 30 只“狗”和 20 只猫创建 50 个按钮,每个 dog/cat 具有 20 个特征,如身高、体重、眼睛颜色 e.t.c,手动编写所有这些将是愚蠢的在价值观中,它在代码中看起来不太好
所以我的问题是:
我如何以格式名称/年龄/品种/身高/体重 e.t.c 存储静态数据,这些数据将在创建应用程序时预加载,然后我可以检索它并在按下特定按钮时将其发送到 beetwen 片段?
提前致谢。
您可以在 assets
文件夹中创建一个 json 文件,结构如下:
{
"dogs": [
{
"name": "dog1",
"age": 1,
"characteristic": "husky"
},
{
"name": "dog2",
"age": 3,
"characteristic": "husky"
},
...,
{
"name": "dog30",
"age": 3,
"characteristic": "husky"
}
],
"cats": [
{
"name": "cat1",
"age": 1,
"characteristic": "british"
},
{
"name": "cat2",
"age": 2,
"characteristic": "short hair"
},
...,
{
"name": "cat20",
"age": 2,
"characteristic": "short hair"
}
]
}
并在打开应用程序时阅读此 json 文件。阅读可以看this tutorial.