0

У меня есть приложение для Android, в котором я получаю данные от API. Теперь мне нужно сохранить эти данные из API в таблицу ActiveAndroid.ActiveAndroid - Как сохранить данные в базе данных Android

Так что я застрял на этой части.

Вот мой стол Партнеры (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?

ответ

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 действительно легко сохранять объекты как Weather или Wind, но для некоторых целей вы бы необходимо использовать TypeSerializer. В вашем примере вы будете использовать его для десериализации и сохранения List<String>.

Как вы можете заметить на странице Github: https://github.com/pardom/ActiveAndroid Эта библиотека не поддерживается более двух лет, поэтому я могу четко заявить, что она устарела и не подходит для использования в новых проектах. У него может быть много ошибок. Для меня реализация этой библиотеки была довольно болезненной.

Вместо ActiveAndroid, я бы порекомендовал вам использовать Realm, greenDao или ORMLite библиотеку для хранения ваших данных.

Надеется, что это поможет

0

Прежде всего создать конструктор без параметров и вызвать супер в нем.

public Partners() { 
    super(); 
} 

then partern.save() должно быть достаточно.

Чтобы извлечь все parterns вы могли бы сделать что-то вроде

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

если вы получаете объект партнера сюда сети через дооснащения, вероятно, вы используете Gson поставить JSON в объект партнера. так что вы можете сделать эту модель расширения объекта, поставить конструктор без партентера, как указано выше, и поставить аннотацию @Table.

Смежные вопросы