首页 > 解决方案 > 无法在改造 Android Studio 中得到回应

问题描述

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

响应{protocol=http/1.1, code=404, message=Not Found, url= http://ab873755.ngrok.io/site/login?login=123&pass=123456 }

无法在改造 Android Studio 中得到回应。网址是正确的。在邮递员中检查过

当我将此网址放入 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) {

            }
        });


    }
}

标签: javaandroidapiretrofit

解决方案


放基地url = http://ab873755.ngrok.io。您不应该将路径放在基本 url 中。把路径放进去@GET("sites/login").

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


推荐阅读