android - 我的改造响应正文为空,但它适用于 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
}
解决方案
您正在使用本地主机。所以,试着在你的笔记本电脑上运行热点并将手机连接到它。
把你的笔记本电脑的ip放进去
.baseUrl("http://10.0.2.2/")
如果它不起作用,请调试您的代码并查看 logcat 以找出问题
推荐阅读
- angular - 如何使用角度和套接字 io 显示来自 feathersjs 服务器的实时数据
- react-native - 将数据显示为简单的折线图 - 反应原生
- python - 在 Python/Django textarea 字段中检测换行符
- c++ - 如何获取列表中有子节点的树的节点总和?
- canvas - 在three.js / Autodesk 3D Viewer(Autodesk Forge Viewer)中调整对象的大小
- barcode-scanner - 如何在 Zebra 设备上模拟条码扫描
- python - 编码另一个列表中存在的列表元素的最有效方法
- npm - NPM 检测 package.json/package-lock.json 中的预发布依赖项?
- python - 每次将列表的元素按不同数量的对分组在一起
- python - 我想在 django 交互式控制台中发布帖子