
[英]How to know the moment when Data in database changed (ActiveAndroid ORM)?
[英]ActiveAndroid - How to save data into Android database
我有一个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
表中?
请检查我以前使用过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
确实很容易保存“ Weather
或“ Wind
等对象,但是出于某些目的,您需要使用TypeSerializer
。 在您的示例中,您将使用它来反序列化并保存List<String>
。
正如您可能会在其Github页面上看到的那样: https : //github.com/pardom/ActiveAndroid该库的维护时间不超过两年,因此我可以明确地说,该库已被弃用,不适用于新项目。 它可能有很多错误。 对我来说,实现这个lib相当痛苦。
我建议您使用Realm
, greenDao
或ORMLite
库代替ActiveAndroid
来存储数据。
希望这会有所帮助
首先创建一个无参数的构造函数,并在其中调用super。
public Partners() {
super();
}
那么partern.save()应该足够了。
要使所有学员退缩,您可以执行以下操作
List<Partner> partners = new Select().from(Partner.class).execute());
如果通过改造从网络上获得合作伙伴对象,则可能是您使用Gson将json放入了合作伙伴对象中。 因此,您可以创建该对象扩展模型,像上面那样放置一个无参数的构造函数,并放置一个@Table
批注。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.