android - 如何通过改造获取数据并保存到数据库

标签 android retrofit2 activeandroid

我有一个 android 应用程序,我需要从 web api 获取数据并将其保存到数据库中。

我正在使用改造来连接到 web api,而且我正在使用 active android。

这就是我到目前为止所创建的:

我的表模型“合作伙伴”,我从网络 API 检索并保存到这个表合作伙伴中的数据。

@Table(name = "Partners")
public class Partners extends Model {
    @Expose
    @Column(name = "Name")
    public String name;
    public Partners() {}
    public List<Partners> getPartners() { return getMany(Partners.class, "Partners");}
} 

我已经创建了 ApiService

public interface APIService {    
    @GET("Partners")
    Call<Partners> getPartners();
}

我有 api 助手

public class APIHelper {

    public static APIService apiService;

    public static APIService getApiService() {
        if (apiService == null) {
            Retrofit retrofit = new Retrofit.Builder().baseUrl("https://here-is-part-of-link/partners.json")
                    .addConverterFactory(GsonConverterFactory.create()).build();
            apiService = retrofit.create(APIService.class);
        }
        return apiService;
    }
}

这是我尝试调用方法从 Web API 获取数据的 fragment 。

public class MainFragment extends Fragment implements Callback<Partners> {

    Button shippingFragment, deliveryFragment, measurementFragment, takeOversFragment;
    private Call<Partners> call;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main_fragment, parent, false);
        getActivity().setTitle("Title");
        shippingFragment = (Button) view.findViewById(R.id.shipping);
        deliveryFragment = (Button) view.findViewById(R.id.delivery);
        measurementFragment = (Button) view.findViewById(R.id.measurement);
        takeOversFragment = (Button) view.findViewById(R.id.take_overs);
        shippingFragment.setOnClickListener(btnFragmentListener);
        deliveryFragment.setOnClickListener(btnFragmentListener);
        measurementFragment.setOnClickListener(btnFragmentListener);
        takeOversFragment.setOnClickListener(btnFragmentListener);

        call = APIHelper.getApiService().getPartners();
        call.enqueue(this);

        return view;
    }

    Button.OnClickListener btnFragmentListener = (new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment fragment = null;
            Intent intent = null;
            switch (v.getId()) {
                case R.id.shipping:
                    fragment = new ShippingFragment();
                    replaceFragment(fragment);
                    break;
                case R.id.delivery:
                    fragment = new DeliveryMain();
                    replaceFragment(fragment);
                    break;
                case R.id.measurement:
                    intent = new Intent(getActivity(), MeasurementMain.class);
                    startActivity(intent);
                    break;
                case R.id.take_overs:
                    intent = new Intent(getActivity(), AllLogs.class);
                    startActivity(intent);
                    break;
            }
        }
    });

    public void replaceFragment(android.support.v4.app.Fragment rFragment) {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.fragment_holder, rFragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }


    final Callback<List<Partners>> partnersCallback = new Callback<List<Partners>>() {
        @Override
        public void onResponse(Call<List<Partners>> call, Response<List<Partners>> response) {
            for(Partners partners) {
                partners.save();
            }
        }

        @Override
        public void onFailure(Call<List<Partners>> call, Throwable t) {

        }
    };
}

问题:如果有人能告诉我我在这里做错了什么并引导我走向正确的方向,我将不胜感激?

编辑:

enter image description here

最佳答案

您的 Call 变量需要一个 Partners对象,但回调看到一个 List<Partners> (这是错误的,除非你真的期望一个 JSON 列表),同时你有 implements Callback<Partners> ...所以类型不匹配。

提示:为避免混淆,将您的类重命名为 Partner因为它是 one Partner

的单个实例

关于android - 如何通过改造获取数据并保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38526568/

相关文章:

android - 文档引用必须在集合引用上有偶数个段错误

android - 为什么 Active Android 不适用于 gradle 2.0?

android - SQLite 的 "NO ACTION"外键约束到底做了什么,它与 "RESTRICT"有何不同?

android - OnActivityResult Activity 错误 : Failure delivering result ResultInfo

android - 如何从 Retrofit2 调用 OnResponse 返回 Java 对象

json - 使用 gson 和 Retrofit 2 将所有 JSON 存储在 Map 中

android - 改造2.0.0-beta4 : Unable to create converter for class

android - 尝试在空对象引用上调用虚拟方法 'java.lang.String com.activeandroid.TableInfo.getIdName()'

android - Logcat 无法检测应用程序或包名称

java - 使用 libgdx 从屏幕键盘获取输入