2016-07-22 149 views
1

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

我使用改造连接到web api,我也使用活动的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; 
    } 
} 

的,这是我的片段,我正在试图调用方法从网页API数据。

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

+0

你还没说什么是错的这个代码 –

+0

@ cricket_007的东西是错误的是这部分代码破解并且不会保存到表伙伴中。 – RubyDigger19

+0

请添加logcat或编译错误信息 –

回答

1

您的通话变量需要一个Partners对象,但回调看到一个List<Partners>(这是什么是错的,除非你实际做指望一个JSON列表),同时你有implements Callback<Partners> ...所以类型不匹配。

提示:为了避免混乱,你的类重命名为Partner因为它一个合作伙伴的单一实例

0

我觉得你有三个问题:

  1. 回调和调用变量不对应
  2. 如果您看到retrofit2的文档,您可以看到基础url与GET注释的值连接,所以我认为当您拨打时url url是
  3. 当改造得到了答案,如果它很好,它将使用GSONConverter(在助手中使用),这将需要setter来初始化您的对象。所以尽量getter和setter添加到您的Parteners对象
+0

我使回调和调用变量相对应。我在调用ApiService时也改变了链接。 仍然无法正常工作。仍然不会从网络获得所有合作伙伴,也无法将它们保存到数据库中(这一部分对我来说也不清楚)。 我会发布错误日志的问题。 – RubyDigger19

1

您必须添加Internet权限您的清单

<uses-permission android:name="android.permission.INTERNET"/> 
相关问题