2016-09-27 14 views
1

私はAndroidプログラミングの新機能でRetrofitを使用しています。ポストリクエストでオブジェクトのリストを取得する方法2.1.0 for android

ライブラリを改造し、GETリクエストを作成し、パラメータを渡し、ページ上のすべてのオブジェクトをPHPに持っていく例がたくさんあります。 POSTと同じことが可能ですか? 経由でパラメータを渡して、すべてのデータ(JSONオブジェクト)を私のwebserviceから持ち出したいのですが、実装できません。

私に手伝ってくれる人がいますか?

ここでstackoverflowでドキュメントを勉強し、例を見ると、私は以下の例を作ることができますが、最初のオブジェクトだけを返します。

依存性:

compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

MainActivity(ボタン内側):

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("http://192.168.101.36/json/") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    ApiService apiService = retrofit.create(ApiService.class); 

    Call<User> call = apiService.validateUser(inputEmail.getText().toString(), inputSenha.getText().toString()); 
    call.enqueue(new Callback<User>() { 
     @Override 
     public void onResponse(Call<User> call, Response<User> response) { 
      //Verifica se houve a conexão com sucesso ao webservice 
      if (!response.isSuccessful()) { 
       textView.setText("ERROR onResponde: " + response.code()); 
      } else { 
       //requisição retona os dados com sucesso 
       String email = response.body().getEmail(); 
       String senha = response.body().getPassword(); 
       textView.append("email: " + email + " - password: " + senha + "\n"); 
      } 
     } 

     @Override 
     public void onFailure(Call<User> call, Throwable t) { 
      t.printStackTrace(); 
      textView.setText(t.getMessage()); 
     } 

    }); 

インタフェース:

public interface ApiService { 
    @FormUrlEncoded 
    @POST("index.php") 
    Call<User> validateUser(
     @Field("username") String username, 
     @Field("password") String password 
    ); 
} 

クラスユーザー:

public class User { 
private String username, email, password; 

public String getUsername(){ 
    return this.username; 
} 

public String getPassword(){ 
    return this.password; 
} 

public String getEmail(){ 
    return this.email; 
} 
} 

のindex.php:

$email = $_POST['username']; 
$senha = $_POST['password']; 

if ($email == "[email protected]") { 

    echo ' 
    { 
    "email":"' . $email . '", 
    "password":"' . $senha . '" 
    }, 
    { 
    "email":"[email protected]", 
    "password":"654321" 
    }, 
    { 
    "email":"[email protected]", 
    "password":"123456" 
    } 
    '; 

} else { 

    echo ' 
    { 
    "email":"[email protected]", 
    "password":"987654" 
    }, 
    { 
    "email":"[email protected]", 
    "password":"987654" 
    }, 
    { 
    "email":"[email protected]", 
    "password":"987654" 
    } 
    '; 
} 

私は、オブジェクトの配列として使用する場合はアプリでエラーが発生しました:

[{ 
"email":"[email protected]", 
"password":"123456" 
}, 
{ 
"email":"[email protected]", 
"password":"123456" 
}] 

答えて

0

あなたがあなたの呼び出しはリストを返すように指定する必要があり、複数のリターンを期待していた場合。

@FormUrlEncoded 
    @POST("index.php") 
    Call<User> validateUser(
     @Field("username") String username, 
     @Field("password") String password 
    ); 

@FormUrlEncoded 
    @POST("index.php") 
    Call<List<User>> validateUser(
     @Field("username") String username, 
     @Field("password") String password 
    ); 

は、その後、あなたのコールバックでresponse.body()は、あなたが繰り返し処理できるユーザーオブジェクトのリストを与えるべきです。今後の参考のために

+0

ベンは、私の愛するが、非常に非常にありがとうございました! それは100%働いた、それは週に苦しんでいた。 –

0

は、それを必要とする人のために、私のコールバックは次のようになります。

 Call<List<User>> call = apiService.validateUser(inputEmail.getText().toString(), inputSenha.getText().toString()); 
     call.enqueue(new Callback<java.util.List<User>>() { 
      @Override 
      public void onResponse(Call<List<User>> call, Response<List<User>> response) { 
       //Verifica se houve a conexão com sucesso ao webservice 
       if (!response.isSuccessful()) { 
        textView.setText("ERROR onResponde: " + response.code()); 
       } else { 

        try { 

         //pegando os dados 
         List<User> listUsers = response.body(); 

         //retona os dados 
         for (User c : listUsers) { 
          textView.append("Email: " + c.getEmail() + " - " + "Senha: " + c.getPassword() + "\n"); 
         } 

        } catch (Exception e) { 
         e.printStackTrace(); 
         textView.setText("ERROR:" + e.getMessage()); 
        } 
       } 
      } 
関連する問題