代码之家  ›  专栏  ›  技术社区  ›  kanudo

改型不会在Android的PHP后端上提供Java对象作为POST参数

  •  0
  • kanudo  · 技术社区  · 8 年前

    $_POST

    public class RetrofitClient {
    
        private static Retrofit retrofit;
        private static final String BASE_URL = "http://www.example.com";
    
        public static Retrofit getInstance() {
            if (retrofit == null) {
                retrofit = new retrofit2.Retrofit.Builder()
                        .baseUrl(BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
            }
            return retrofit;
        }
    }
    

    2) 正在发送的参数的模型

    public class LoginModel {
    
        @SerializedName("email")
        private String email;
    
        @SerializedName("password")
        private String password;
    
        public LoginModel(String email, String password) {
            this.email = email;
            this.password = password;
        }
    
        public String getEmail() { return email; }
        public String getPassword() { return password; }
    }
    

    public interface RequestAPI {
    
        @POST("/login")
        Call<ResponseBody> getResponse(@Body LoginModel loginModel) ;
    }
    

    @Override
    public void onClick(View v) {
    
        LoginModel loginModel = new LoginModel("user@example.com", "123");
    
        RequestAPI service = RetrofitClient.getInstance().create(RequestAPI.class);
    
        Call<ResponseBody> call = service.getResponse(loginModel);
    
        call.enqueue(new Callback<ResponseBody>() {
    
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    Log.e("=====", response.body().string());
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.e("=====", "error", t);
            }
        });
    }
    

    echo json_encode($_POST);
    

    现在每次我转储$\u POST变量时。它只是给了一个 .

    为什么我没有收到 电子邮件 和 密码 作为$邮政的孩子?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Jeel Vankhede    8 年前

    像这样使用 API方法 :

    @FormUrlEncoded
    @POST("/login")
    Call<ResponseBody> getResponse(@Field("email") String email, @Field("password") String password) ;
    

    &这样称呼:

    @Override
    public void onClick(View v) {
    
    LoginModel loginModel = new LoginModel("user@example.com", "123");
    
    RequestAPI service = RetrofitClient.getInstance().create(RequestAPI.class);
    
    Call<ResponseBody> call = service.getResponse(loginModel.getEmail(), loginModel.getPassword());
    
    call.enqueue(new Callback<ResponseBody>() {
    
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            try {
                Log.e("=====", response.body().string());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.e("=====", "error", t);
        }
    });
    }
    

    编辑:

    如果您仍然希望将自定义对象作为API调用的原始主体传递,那么 菲律宾比索 侧码:

    echo json_encode($_POST);
    

    考虑使用

    $post_body = file_get_contents('php://input');
    

    因为这个替代方法直接将整个原始请求体作为变量提供,而不是作为变量提供 JSON对象 进行编码。