ActiveAndroid - 如何将数据保存到Android数据库中

时间:2016-09-01 20:47:38

标签: android sqlite android-studio android-sqlite activeandroid

我有一个Android应用,我从API获取数据。现在我需要将API中的数据保存到ActiveAndroid表中。

所以我被困在那一部分。

这是我的合作伙伴表(Active Android):

@Table(name = "Partners")
public class Partners extends Model {

    @Column(name = "Name")
    public String name;

    public Partners() {}

    public Partners(String name) {
        this.name = name;
    }
}

这是我的POJO模型:

public class Partner {

    @Expose
    @Column(name = "name")
    private List<String> name;


    public List<String> getName() {
        return name;
    }
    public void setName(List<String> name) {
        this.name = name;
    }
}

以下是我获取数据并尝试将其保存到ActiveAndroid表中的代码的一部分:

public class DownloadMain extends Fragment implements Callback<Partner> {

    private static final String TAG = DownloadMain.class.getSimpleName();

    private Button dloadPartners;
    private Call callPartners;

    public DownloadMain() {}

    public DownloadMain newInstance() { return new DownloadMain(); }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.download_main, container, false);

        dloadPartners = (Button) view.findViewById(R.id.downloadPartners);
        dloadPartners.setOnClickListener(btnListener);

        callPartners = APIHelper.getApiService().getPartners();

        return view;
    }

    Button.OnClickListener btnListener = (new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            callPartners.clone().enqueue(DownloadMain.this);
            insertPartners();
        }
    });

    @Override
    public void onResponse(Call call, Response response) {

        if(response.body() == null) {
            try {
                response.errorBody().string();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Toast.makeText(getActivity(), "No Partners!", Toast.LENGTH_SHORT).show();
        } else {
            List<String> partners = (List<String>) response.body();
            Log.d(TAG, "Number of partners received: " + partners.size());
            Toast.makeText(getActivity(), "Partners downloaded!", Toast.LENGTH_SHORT).show();
        }
    }
    @Override
    public void onFailure(Call call, Throwable t) {
    }

    private void insertPartners() {
        ActiveAndroid.beginTransaction();
        try {
            for (int i = 0; i < 100; i++) {
                Partner partner = new Partner();
                partner.getName();
                //partner.save();
            }
            ActiveAndroid.setTransactionSuccessful();
        } finally {
            ActiveAndroid.endTransaction();
        }
    }
}

问题是如何将我从API中获取的数据保存到表中,因此我需要一些提示和建议如何正确地执行此操作。

问题:我需要一些提示,如何保存我从网上获得的数据,并将其改装到ActiveAndroid表中?

2 个答案:

答案 0 :(得分:1)

请检查我的旧天气应用项目,我已经使用ActiveAndroid

这是我保存到数据库方法之一:

public void saveCityDataToDatabase(Forecast forecast) {
    ActiveAndroid.beginTransaction();
    try {
        if (WeatherApplication.getCityList().size() > 0) {
            new Delete().from(City.class).execute();
        }
        forecast.getCity().getCoord().save();
        forecast.getCity().save();
        ActiveAndroid.setTransactionSuccessful();
    } finally {
        ActiveAndroid.endTransaction();
    }
    Log.d("DATABASE", "WeatherApplication: " + WeatherApplication.getCityList());
} }
     

来自:https://github.com/piotrek1543/LocalWeather/blob/master/app/src/main/java/com/piotr/localweather/repositories/WeatherDatabaseRepository.java

使用ActiveAndroid可以轻松保存WeatherWind等对象,但出于某些目的,您需要使用TypeSerializer。在您的示例中,您将使用它来反序列化并保存List<String>

正如您在其Github页面中所注意到的那样:https://github.com/pardom/ActiveAndroid 这个图书馆的维护时间不超过两年,所以我可以清楚地说,这个图书馆已被弃用,不适合用于新项目。它可能有很多错误。对我来说,这个lib的实现非常痛苦。

我建议您使用RealmgreenDaoORMLite库来存储您的数据,而不是ActiveAndroid

希望它会有所帮助

答案 1 :(得分:0)

首先创建一个无参数构造函数并在其中调用super。

public Partners() {
    super();
}

那么partern.save()就足够了。

要检索所有的伙伴,你可以做类似

的事情
List<Partner> partners = new Select().from(Partner.class).execute());

如果您通过改造从Web获得Partner对象,可能您正在使用Gson将json放入partner对象中。所以你可以使该对象扩展模型,放置一个像上面那样无参数的构造函数并放入@Table注释。