首页 > 解决方案 > 在 Android 中使用 POST 请求发送数据时出错

问题描述

将用户名和密码发送到服务器时,我总是遇到同样的错误。我需要将数据作为内容类型发送:表单数据,因为服务器没有响应任何其他类型。我在邮递员中测试过,没关系,但是当我尝试用代码发送它时,它不起作用。谁能帮帮我,谢谢!!

  public class Login extends AsyncTask<String, Void, Void> {
        
                String userName;
                String password;
        
                public Login(String user, String pass) {
                    userName = user;
                    password = pass;
                }
        
                protected void onPreExecute() {
                    super.onPreExecute();
        
                }
        
        
         
 

protected Void doInBackground(String... params) {
OkHttpClient client = new OkHttpClient().newBuilder()
            .build();
    MediaType mediaType = MediaType.parse("text/plain");
    RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
            .addFormDataPart("user",userName)
            .addFormDataPart("pass",password)
            .build();
    Request request = new Request.Builder()
            .url("http://www.autotrack.rs/android_juzna_backa/login.php")
            .method("POST", body)
            .build();
        try {
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
                try {
                    Call call = client.newCall(request);
                    Response response = call.execute();
                    System.out.println(response.body().string());
    
                }catch (Exception m)
                {
                    Log.d("Mytag", m.getMessage());
                }
                if(!response.isSuccessful())
                {
                    try {
                        throw new IOException("Unexpected: "+response);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return null;
            }

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean okhttp3.Response.isSuccessful()”

标签: javaandroid

解决方案


这段代码对我来说非常好:

        OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("user","pera")
  .addFormDataPart("pass","1111")
  .build();
Request request = new Request.Builder()
  .url("http://www.autotrack.rs/android_juzna_backa/login.php")
  .method("POST", body)
  .build();
Response response = client.newCall(request).execute();

在您的代码中,我看到您执行了两次相同的请求,也许这就是问题所在?


推荐阅读