繁体   English   中英

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

[英]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相当痛苦。

我建议您使用RealmgreenDaoORMLite库代替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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM