Тело моего отклика на модификацию нулевое, но работает на Почтальоне - PullRequest
0 голосов
/ 02 сентября 2018

Я использую WampServer для подключения backEnd к своему проекту Android и использую PHP и MySQL.

При тестировании мой запрос с почтальоном работает правильно, но в андроиде тело ответа равно нулю. Мой ноутбук и мобильный телефон находятся в одной сети, и ответ получен Android, но тело является нулевым.

Я проверяю 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);

Это моя модель Android:

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
}

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

вы используете localhost. Итак, попробуйте запустить точку доступа на вашем ноутбуке и подключить к ней мобильный телефон.

и поместите ip вашего ноутбука в

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

если это не работает, отладьте ваш код и посмотрите logcat, чтобы выяснить проблему

0 голосов
/ 02 сентября 2018

Решение:

Вместо:

int success;

в вашем классе Model, напишите это:

@SerializedName("success")
public int success;

Вот и все, надеюсь, это поможет.

Если вы получаете сообщение об ошибке 403, выполните следующие действия и попробуйте:

Шаг 1:

C: \ wamp64 \ Bin \ Apache \ apache2.4.23 \ конф

Шаг 2: внесите эти изменения

DocumentRoot "${INSTALL_DIR}/www"
<Directory "${INSTALL_DIR}/www/">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options +Indexes +FollowSymLinks +Multiviews

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride all

#
# Controls who can get stuff from this server.
#

#onlineoffline tag - don't remove
Require all granted

Редактировать Не требовать до Требуется все предоставлено

2) Теперь перейдите к C:\wamp64\bin\apache\apache2.4.23\conf\extra\httpd-vhost.conf и сделайте то же самое для виртуального хоста, определенного для localhost

AllowOverride All
Require all granted

Перезагрузите сервер, он должен работать

Если вы получаете ошибку Lenient, попробуйте:

implementation 'com.google.code.gson:gson:2.6.1'

Gson gson = new GsonBuilder()
    .setLenient()
    .create();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(insert_your_url)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build();

Проверьте пожалуйста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...