【问题标题】:ActiveAndroid - How to save data into Android databaseActiveAndroid - 如何将数据保存到 Android 数据库中
【发布时间】:2016-09-01 20:47:37
【问题描述】:

我有一个从 API 获取数据的 Android 应用。现在我需要将这些数据从 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 表中?

【问题讨论】:

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


    【解决方案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&lt;String&gt;

    您可能会从其 Github 页面注意到:https://github.com/pardom/ActiveAndroid 这个库的维护时间不超过两年,所以我可以清楚地说,它已被弃用,不适合用于新项目。它可能有很多错误。对我来说,实现这个库是一件很痛苦的事情。

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      首先创建一个无参构造函数,并在里面调用super。

      public Partners() {
          super();
      }
      

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

      要检索所有合作伙伴,您可以执行类似的操作

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

      如果您通过改造从网络获取合作伙伴对象,则可能您正在使用 Gson 将 json 放入合作伙伴对象中。因此您可以制作该对象扩展模型,像上面那样放置一个无参数构造函数并放置一个@Table 注释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2014-07-09
        • 1970-01-01
        • 2020-12-12
        • 1970-01-01
        相关资源
        最近更新 更多