将静态数据保存在 Android

Keeping static data in Android

我有一个简单的应用程序:在按下按钮时,它以格式名称/年龄/品种显示有关 dog/cat 的数据 我使用两个 fragmenteventbus 库来设置它们之间的通信 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.