无法在Android Studio改装中获得回应

时间:2019-10-03 09:52:54

标签: java android api retrofit

我正在使用ngrok将本地的php项目放到网络中。我需要在登录操作中获取用户的ID。我的Android给了我

  

响应{协议= http / 1.1,代码= 404,消息=未找到,URL = {http://ab873755.ngrok.io/site/login?login=123&pass=123456}

在改装的Android Studio中无法获得响应。网址正确。在邮递员中检查过

当我将此URL放入Postman时,一切正常,并给出正确的响应。 该页面返回

  

{“ 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 个答案:

答案 0 :(得分:2)

放入基数url = http://ab873755.ngrok.io。您不应将路径放在基本URL中。将路径放入@GET("sites/login").

确保您的ngrok网址处于活动状态。好像已经过期了

答案 1 :(得分:0)

您使用的URLPOSTMAN中不起作用。

注意事项

  

1)是否在授权中传递任何内容。
  2)   是否在标题中发送任何内容

邮递员中的响应不正确(屏幕截图) enter image description here