Метод построения в Java с использованием Джерси, который принимает два параметра и сохраняет в базе данных, работает с почтальоном должным образом, но когда я использую его в приложении Android, он не работает Я пытаюсь отправить запрос, используя Volley и Retrofit.

Код на стороне сервера:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/register")
public Boolean registerUser(@FormParam("userName") String userName, @FormParam("password") String password) {
    System.out.println(userName+"\t"+password);
    String insertQuery = "INSERT INTO user(user_name,password,status) VALUES(?,?,?)";
    try {
        Connection con = MyConnection.getConnection();
        PreparedStatement prst = con.prepareStatement(insertQuery);
        prst.setString(1, userName);
        prst.setString(2, password);
        prst.setInt(3, 0);
        int count = prst.executeUpdate();
        con.close();
        System.out.println(count+" Row inserted");
        return true;
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return false;
}

Код Android:

Общедоступный регистр недействительности (конечное имя пользователя строки, конечный пароль строки) {

    User user = new User(userName, password, 1);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.1.13:8080/Demo_Application/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    JsonPlaceholderApi jsonPlaceholderApi = retrofit.create(JsonPlaceholderApi.class);

    Call<List<User>> call = jsonPlaceholderApi.register("application/x-www-form-urlencoded", user);
    call.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(Call<List<User>> call, Response<List<User>> response) {

            if (!response.isSuccessful()){
                Log.e("Response","Something went wrong."+response.toString());
                return;
            }

            Log.d("Response",response.toString());

        }

        @Override
        public void onFailure(Call<List<User>> call, Throwable t) {
            Log.e("Response",t.getMessage());
        }
    });
}

Ответ почтальона

Запрос залпа:

Public void registerVolley (конечное имя пользователя String, последний пароль строки) {

    Map<String, String> param = new HashMap<>();
    param.put("userName", userName);
    param.put("password",password);

    JsonObjectRequest arrayRequest = new JsonObjectRequest(Request.Method.POST, "http://192.168.0.26:8080/Demo_Application/rs/test/register", new JSONObject(param), new com.android.volley.Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            Log.e("Response", response.toString());
        }
    }, new com.android.volley.Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Response", error.toString());
        }
    }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> param = new HashMap<>();
            param.put("userName", userName);
            param.put("password",password);

            return param;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> header =  new HashMap<>();
            header.put("Content-Type","application/json");
            return header;
        }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(arrayRequest);

}
1
Bhringesh 18 Апр 2019 в 11:53

2 ответа

Лучший ответ

Ваш код для модернизации:

JsonPlaceholderApi  jsonPlaceholderApi  = retrofit.create(JsonPlaceholderApi.class);
    Call<Boolean> call = jsonPlaceholderApi.sign("userName", "password");
    call.enqueue(new Callback<Boolean>() {
        @Override
        public void onResponse(Call<Boolean> call, Response<Boolean> response) {

            if (!response.isSuccessful()){
                Log.e("Response","Something went wrong."+response.toString());
                return;
            }

            Log.d("Response",response.toString());

        }

        @Override
        public void onFailure(Call<Boolean> call, Throwable t) {
            Log.e("Response",t.getMessage());
        }
    });

Ваш метод внутри jsonPlaceholder Api:

@FormUrlEncoded
    @POST("rs/test/register")
    Call<ResponseLogin> signIn(
            @Field("userName") String userName,
            @Field("password") String password
    );
0
Simal 18 Апр 2019 в 10:14

Добавьте код ниже в proguard-rules.pro

-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
-keep class com.app.appname.model.** { *; }

ПРИМЕЧАНИЕ: измените последнюю строку в папке вашей модели

0
Ketan Ramani 21 Дек 2019 в 07:31