Не удается получить ответ в модифицированной Android Studio - PullRequest
0 голосов
/ 03 октября 2019

Я использую ngrok для размещения своего локального php-проекта в сети. Мне нужно получить идентификатор пользователя в действии входа в систему. Мой Android дает мне

Ответ {протокол = http / 1.1, код = 404, сообщение = не найдено, URL = http://ab873755.ngrok.io/site/login?login=123&pass=123456}

Не удается получить ответв дооснащении Android Studio. URL правильный. Проверил это в Почтальоне

Когда я помещаю этот URL в Почтальон, все нормально и дает правильный ответ. Эта страница возвращает

{"user_id": 1}

package com.example.backgroundservice.ui.login;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class WResponce {
    @SerializedName("user_id")
    @Expose
    private String user_id;

    public String getUserId() {
        return user_id;
    }

    public void setUserId(String user_id) {
        this.user_id = user_id;
    }
}
package com.example.backgroundservice.ui.login;

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface JSONPlaceHolderApi {
    @GET("site/login")
    public Call<WResponce> getResponce(
            @Query("login") String login,
            @Query("pass") String password
    );
}
package com.example.backgroundservice.ui.login;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class NetworkClient {
    public static final String BASE_URL = "http://ab873755.ngrok.io/";
    public static Retrofit retrofit;

    public static Retrofit getRetrofitClient(){
        if (retrofit == null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}
package com.example.backgroundservice.ui.login;

import android.net.http.HttpResponseCache;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.example.backgroundservice.R;
import com.example.backgroundservice.ReceiveData;

import java.io.IOException;

public class LoginActivity extends AppCompatActivity {

    final Handler mHandler = new Handler();
    private Thread mUiThread;
    private JSONPlaceHolderApi jsonPlaceHolderApi;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }

    public void login(View view) throws IOException, InterruptedException{
        final EditText username = findViewById(R.id.username);
        final EditText password = findViewById(R.id.password);

        Retrofit retrofit = NetworkClient.getRetrofitClient();
        jsonPlaceHolderApi = retrofit.create(JSONPlaceHolderApi.class);
        Call call = jsonPlaceHolderApi.getResponce(username.getText().toString(),password.getText().toString());

        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                if(response.isSuccessful()){
                    WResponce res = (WResponce) response.body();
                    String a = ((WResponce) response.body()).getUserId();
                    Log.d("myres",a);
                    Log.d("myres",response.body().toString());
                }
                Log.d("mymsg",response.message());
                Log.d("mymsg",response.toString());
            }

            @Override
            public void onFailure(Call call, Throwable t) {

            }
        });


    }
}

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Положите базу url = http://ab873755.ngrok.io. Вы не должны указывать путь в базовом URL. Введите путь в @GET("sites/login").

Убедитесь, что ваш ngrok url активен. Похоже, это истекло

0 голосов
/ 03 октября 2019

Используемый вами URL не работает в POSTMAN.

Замечания

1) Передаете ли вы что-либо вАвторизация или нет.
2) Независимо от того, отправляете ли вы что-либо в заголовках

Неверный ответ в Почтальоне (снимок экрана) enter image description here

...