首页 > 解决方案 > 我的改造响应正文为空,但它适用于 Postman

问题描述

我使用 WampServer 将后端连接到我的 android 项目,我使用 PHP 和 MySQL。

当我用邮递员测试我的请求时,我的请求工作正常,但在 android 中的响应为空。我的笔记本电脑和手机在同一个网络上,并且 android 收到了响应,但 body 为空。

我检查 response.code() 并且它是 403 禁止的;

我是 android 和 PHP 的新手,我不知道如何解决这个问题。

这是我的 PHP 代码:

<?php
$response = array();
require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();
if (isset($_POST['userName'])) {
$userName = $_POST['userName'];
$result = mysql_query("SELECT *FROM members WHERE userName =  '$userName'");
if (!empty($result)) {
    if (mysql_num_rows($result) > 0) {
        $response["success"] = 0;
        echo json_encode($response);
    } else {
        $response["success"] = 1;
        echo json_encode($response);
    }
} else {
    $response["success"] = 1;
    echo json_encode($response);
}
     } else {
$response["success"] = 0;
echo json_encode($response);
  }
  ?>

这是我的 android api 代码:

   @FormUrlEncoded
@POST("project/creataccountusername.php")
Call<createAccountJm> createacountusername(@Field("userName") String userName);

这是我的安卓模型:

public class createAccountJm {
int success;



public int getSuccess() {
    return success;
}

public void setSuccess(int success) {
    this.success = success;
}
 }



public class CreatAccount extends AppCompatActivity {
private Button next;
private TextInputLayout error;
private TextInputEditText username;
private String name;
private SharedPreferences share;
@Override
protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.creataccountpage);
    next=findViewById(R.id.creataccount);
    error=findViewById(R.id.usernameet);
 username=findViewById(R.id.usernameinput);
    share=getSharedPreferences("createAccount",MODE_PRIVATE);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.3.5/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    final apiInterface service = retrofit.create(apiInterface.class);
 next.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         name=username.getText().toString();
            Call<createAccountJm> call=service.createacountusername(name);
            call.enqueue(new Callback<createAccountJm>() {
                @Override
                public void onResponse(Call<createAccountJm> call, Response<createAccountJm> response) {
                     if(response.body().getSuccess()==1){
                        SharedPreferences.Editor edit =share.edit();
                        edit.putString("username",name);
                        edit.commit();
                        Intent emailpage = new Intent(CreatAccount.this, enteremailpage.class);
                        startActivity(emailpage);
                    }
                    else{
                        error.setError("این نام کاربری در حال حاضر استفاده میشود!");
                    }
                }

                @Override
                public void onFailure(Call<createAccountJm> call, Throwable t) {
   error.setError("اشکال در ارتباط با سرور لطفا مجددا تلاش کنید!");
                }
            });
 });

}

}

这是邮递员的回应:

{
    "success": 1
}

标签: androidretrofit2

解决方案


您正在使用本地主机。所以,试着在你的笔记本电脑上运行热点并将手机连接到它。

把你的笔记本电脑的ip放进去

        .baseUrl("http://10.0.2.2/")

如果它不起作用,请调试您的代码并查看 logcat 以找出问题


推荐阅读