0

Ich habe eine Android-App, in der ich Daten von einer API bekomme. Jetzt muss ich diese Daten von der API in eine ActiveAndroid Tabelle speichern.ActiveAndroid - So speichern Sie Daten in Android-Datenbank

Also ich habe auf diesem Teil stecken.

Hier ist meine Tabelle Partners (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; 
    } 
} 

Das ist mein POJO Modell ist:

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; 
    } 
} 

Und hier ist Teil des Codes, wo ich Daten bekommen und zu retten versuchen, es in ActiveAndroid Tabelle:

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(); 
     } 
    } 
} 

Das Problem ist, wie Daten, die ich von der API in t erhalten sparen fähig, also brauche ich ein paar Tipps und Ratschläge, wie man das richtig macht.

Frage: Ich brauche ein paar Tipps, wie ich Daten aus dem Internet mit Retrofit in ActiveAndroid Tabelle speichern kann?

Antwort

1

überprüfen Sie bitte mein altes Wetter App-Projekt, wo ich bereits ActiveAndroid verwendet habe.

Hier ist eine meiner Einsparung an Datenbankmethoden:

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()); 
} } 

Von: https://github.com/piotrek1543/LocalWeather/blob/master/app/src/main/java/com/piotr/localweather/repositories/WeatherDatabaseRepository.java

Mit ActiveAndroid ist wirklich einfach Objekte wie Weather oder Wind, aber für manche Zwecke speichern würden Sie müssen TypeSerializer verwenden. In Ihrem Beispiel würden Sie es zur Deserialisierung verwenden und List<String> speichern.

Wie Sie vielleicht von seiner Github Seite bemerken: https://github.com/pardom/ActiveAndroid diese Bibliothek ist nicht mehr als zwei Jahre gepflegt, so kann ich klar sagen, dass veraltet ist und nicht gut, um zu neuen Projekten zu verwenden. Es kann viele Fehler haben. Für mich war die Implementierung dieser Bibliothek ziemlich schmerzhaft.

Anstelle von ActiveAndroid empfehle ich Ihnen, Realm, greenDao oder ORMLite Bibliothek zu verwenden, um Ihre Daten zu speichern.

Hoffe, dass es

0

Erste Hilfe würde von allen einen parameterlosen Konstruktor und rufen Super darin erstellen.

public Partners() { 
    super(); 
} 

dann sollte eine partern.save() genügen.

alle parterns Um retreive Sie so etwas wie

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

tun könnte, wenn Sie den Partner Objekt fro Web über Retrofit erhalten, haben Sie wahrscheinlich Gson werden mit dem json in Partnerobjekt zu setzen. So können Sie dieses Objekt erweitern Modell, setzen Sie einen parameterless Konstruktor wie oben und setzen Sie eine @Table Annotation.

Verwandte Themen