2016-08-04 5 views
0

私は私のパートナーの配列を与えるのWeb APIを持っており、それは次のようになります。アンドロイド改造とアクティブでウェブAPIからJSON配列を取得する方法

[ 
    "partner1", 
    "partner2", 
    "partner3", 
    "....", 
    "parner222" 
] 

私が持っている表のパートナー(ActiveAndroid)においてI apiからすべてのパートナーを保存したいと考えています。ここで

@Table(name = "Partners") 
public class Partners extends Model { 

    @Column(name = "Name") 
    String name; 

    public Partners() {} 

    public Partners(String name) { 
     this.name = name; 
    } 
} 

私のPOJOモデルクラスです:

public class Partners { 

    @SerializedName("name") 
    @Expose 
    private List<String> name = new ArrayList<String>(); 

    public List<String> getName() { 
     return name; 
    } 

    public void setName(List<String> name) { 
     this.name = name; 
    } 

} 

これは私のインターフェイス

public interface APIService { 

     @GET("Partners") 
     Call<Partners> getPartners(); 
} 

であり、これは、APIのURL

public class APIHelper { 

    public static APIService apiService; 

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

と私のAPIHelperであり、これはあります私がボタンを持っている部分私はAPIからデータを取得してPartnersテーブルに保存するonClickメソッドを実装したいと思います。

public class DownloadMain extends Fragment implements Callback<Partners> { 

    private Button dloadPartners; 
    private Call<Partners> callPartners; 
    public static APIService apiService; 

    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(); 
     callPartners.enqueue(this); 

     return view; 
    } 

    Button.OnClickListener btnListener = (new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //here I need to implement that on click downloads me data 
      // and save it into my Partners table 
     } 
    }); 

    @Override 
    public void onResponse(Call<Partners> call, Response<Partners> response) { 

     //here I'm trying to put api response into array list 
     if (response.body() != null) { 
      ArrayList<String> partnersList = new ArrayList<>(); 
      partnersList = response.body(); 

     } 
    } 

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

    } 
} 

これで私は立ち往生しました。私はAPIからデータを取得するonClickボタンメソッドを実装したいと思います。 onResponse()メソッドでは、データを受け取るかどうかを確認するためにArrayListにデータを入れようとしています。また、このデータをテーブルパートナーに保存したいと考えています。

誰かが私を助けたり、私にこれを解決させてくれると感謝しています。これは私が改造やapiでやっているのは初めてです。

誰かが私を助けたり、APIからデータを取得してテーブルのパートナーに保存したりするのに手伝ってもらえますか?

+0

...ループの中 – tsiro

答えて

1

あなたはJSON文字列(パートナーの配列)を解析しようとしている方法は適切ではありません。あなたのJSONは次のようにする必要があります

{ 
"partners": 
    ["partner1", "partner2", "partner3", ...] 
} 

をそしてPOJOモデルクラスは次のようになります。partnersList可変出力をログインしてください

class Partners{ 
    private List<String> partners; 

    public Partners(){} 

    public void setList(List<String> partners) { 
     this.partners = partners; 
    } 

    public List<String> getList() { 
     return this.partners; 
    } 

    //setter and getter methods 
} 
+0

をretrofit2'タイプに適用ません 'foreachの私をスローします私のJSONは良くありませんか?私は郵便配達員とチェックapiのURLを持って、上記の質問のような応答を得る。 別の質問..私はテーブルを持っていますパートナーズ、そこにPOJOを作成したり、POJOの新しいモデルクラスを作成できますか? – RubyDigger19

+0

partnersList変数にパートナーデータが含まれていますか? – tsiro

+1

あなたはこのウェブサイトhttp://www.jsonschema2pojo.org/によってpojoモデルを使うことができます。それはモデルにjson応答メッセージを変換します。そして、GreenDaoを使ってテーブルに挿入することができます。 – sonnv1368

0

応答が値を印刷するための空でない場合は、次の

for(Partner partner: response){ 

Log.d("Partner Name",partner.name); 

} 

そして、あなたは、データベースの任意のORMを使用している場合は、DBに保存するためのDAOを呼び出して値を渡します。

+0

応答 – RubyDigger19

関連する問題