java - 无法在改造 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) {
}
});
}
}
解决方案
放基地url = http://ab873755.ngrok.io
。您不应该将路径放在基本 url 中。把路径放进去@GET("sites/login").
确保您的 ngrok 网址处于活动状态。好像过期了
推荐阅读
- cassandra - Cassandra 数据建模:时间戳作为分区键
- c# - VS 2017:在远程仓库中添加解决方案的引用(无需下载解决方案)
- php - 在重新生成缩略图时在 Wordpress 中使用黑白图像创建图像大小
- regex - GoogleDocs 中的正则表达式搜索和替换
- java - 为什么@Transactional 没有延长到存储库方法?
- database - 如何检查是否为 postgres 中的表启用了行级安全性
- windows - 检查Powershell中是否存在多个目录,然后执行命令
- android - 我们可以将登录活动作为我的主要活动吗?
- java - 从 camunda 中的多个模块加载流程定义
- perl - Perl 模块中的另一个 ref 函数哈希