0

私はAPIからデータを取得するAndroidアプリを持っています。 APIからこのデータをActiveAndroidテーブルに保存する必要があります。ActiveAndroid - 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

は、ここでデータベースの方法に私の省の一つだ:ActiveAndroidhttps://github.com/piotrek1543/LocalWeather/blob/master/app/src/main/java/com/piotr/localweather/repositories/WeatherDatabaseRepository.java

WeatherまたはWindのようなオブジェクトを保存することが非常に簡単ですが、いくつかの目的のためにあなたが希望:から

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

TypeSerializerを使用する必要があります。あなたの例では、それを逆シリアル化してList<String>を保存するために使用します。

Githubのページからわかるように、https://github.com/pardom/ActiveAndroid このlibaryは2年以上保たれていないので、私はそれが新しいプロジェクトには使用されなくなっていることを明確に言うことができます。バグが多いかもしれません。私にとって、このライブラリの実装はかなり痛いものでした。

ActiveAndroidの代わりに、Realm,greenDaoまたはORMLiteライブラリを使用してデータを保存することをおすすめします。

希望します。

0

まず、パラメータのないコンストラクタを作成し、それにsuperを呼び出します。

public Partners() { 
    super(); 
} 

次に、partern.save()で十分です。あなたが改造を介してウェブあちこちパートナーのオブジェクトを取得する場合、あなたはおそらく、あなたがパートナーオブジェクトにJSONを入れてGsonを使用している、

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

ような何かを行うことができ、すべてのparternsを盗んする

。そのオブジェクトをモデルに拡張し、上記のような無限のコンストラクタを配置し、@Table注釈を付けることができます。

関連する問題