当前位置: 首页 > 知识库问答 >
问题:

Api与Postman配合使用,但不适用于android应用程序

寿阳华
2023-03-14

一个使用Jersey在Java中构建的方法,它接受两个参数并存储在数据库中,它可以和postman一起正常工作,但当我在Android应用程序中使用它时,它不起作用。我试图通过截击和改装发送请求。

服务器端代码:

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

邮差回应

截击请求:

公共无效寄存器Volley(最终字符串用户名,最终字符串密码){

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

}

共有2个答案

澹台聪
2023-03-14

在proguard规则中添加以下代码。赞成的意见

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

注意:更改模型文件夹的最后一行

赵星华
2023-03-14

您的改装代码

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

您在jsonPlaceholderApi中的方法:

@FormUrlEncoded
    @POST("rs/test/register")
    Call<ResponseLogin> signIn(
            @Field("userName") String userName,
            @Field("password") String password
    );
 类似资料:
  • 我能够成功地打电话给邮递员: /mfp/api/az/v1/token和 /mfpadmin/management-apis/2.0/runtimes/mfp/applications 我正在获取从/mfp/api/az/v1/token接收的承载令牌,并将其添加到/mfp/applications的授权标头中。 我收到了来自两者的200个响应,并从每个API中获取了预期的信息。 然后,我选择从P

  • 当我在Android手机上调试应用程序时,我绝对没有遇到任何错误,但在AVD上,我一开始就得到了一个NullPointerException()。我的Android设备在22 API的Lollipop(5.1.1)上运行,我的AVD在28 API的Pie(9.0)上运行。我在gradle中将最小SDK设置为21,编译SDK设置为28。 这是错误: E/AndroidRuntime:致命异常:主进程

  • 关于redash,我有一个问题。这是请求。在上,它工作得很好。查询示例: 但在axios上,它抛出: 网络错误 并在控制台上写: 访问XMLHttpRequest at

  • 因此,我正在尝试对第三方 API 提供程序进行 API 调用。在我的nodejs应用程序中接收新令牌没有问题,但是当我尝试在get函数中使用它时,我只收到403错误。但是,如果我通过Postman获得令牌,它就可以正常工作(在应用程序中),这对我来说似乎很奇怪? 如果我尝试在Postman中的get调用中使用从nodejs应用程序获取的令牌,那也是一样的,它不会起作用。 我已经多次检查从我的nod

  • “技术人员”之前的简报对改装并不陌生,但我遇到了这种奇怪的行为,我很难理解和修复。我有两个web服务,在Postman和iOS中都能正常工作,但只有一个在改装中工作,而另一个不工作, 为我辩护,我可以说我得到了(未经授权的)响应,这意味着我能够点击服务器并得到API开发者辩护的结果,他说它在邮递员和其他设备中工作,所以不是服务问题 如果有改装专家告诉我,为了得到这个错误,我背后可能在做什么改装?

  • 我只是在听讲座:(这是错误消息 E/Android运行时: 致命异常: 主进程: 8893 java.lang.空指针异常: 尝试调用虚拟方法 '布尔 java.lang.字符串.contains(java.lang.CharSequence)'.java.java.java 在空对象引用上android.os.AsyncTask.access$900(AsyncTask.java:192) at