我运行这个例子(https://www.journaldev.com/13639/retrofit-android-example-tutorial),它在我的模拟器(android studio)上运行良好。然后我改变它在我的本地服务器上运行它失败了。发送get方法但服务器没有回答。我把它改成如下:
Mainactivity.java:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
responseText = (TextView) findViewById(R.id.responseText);
apiInterface = APIClient.getClient().create(APIInterface.class);
Call<ServerResponse> call0 = apiInterface.get("login","admin","admin");
call0.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse
(Call<ServerResponse>call,Response<ServerResponse> response){
Log.d("TAG",response.code()+"");
//String displayResponse = "";
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
call.cancel();
}
});}
APIInterface.java:
interface APIInterface {
@GET("/api/api")
Call<ServerResponse> get(@Query("method") String method, @Query("username") String username, @Query("password") String password);}
ServerResponse.java:
public class ServerResponse implements Serializable{
@SerializedName("returned_username")
private String username;
@SerializedName("returned_password")
private String password;
@SerializedName("message")
private String message;
@SerializedName("error_code")
private int errorCode;
private int status = 1;
private String error;
public ServerResponse(String username, String password, String message, int errorCode, int status, String error){
this.username = username;
this.password = password;
this.message = message;
this.errorCode = errorCode;
this.status = status;
this.error = error;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
api.php:
<?php
//Post Method here
$conn = new mysqli("localhost", "root", "", "retrotest");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['method']) == 'login'){
$username = $_POST['username'];
$password = $_POST['password'];
echo $username;
echo $password;
if($username == "admin" && $password == "admin"){
$response = array('returned_username' => "-admin-",
'returned_password' => "-admin-",
'message' => "Your credentials are so weak [USING_POST]!",
'response_code' => "1");
echo json_encode($response);
}else{
$response = array('response_code' => "-1",
'message' => "invalid username or password");
echo json_encode($response);
}
}
//Get Method here
else if(isset($_GET['method']) == 'login'){
$username = $_GET['username'];
$password = $_GET['password'];
if($username == "admin" && $password == "admin"){
$response = array('returned_username' => "=admin=",
'returned_password' => "=admin=",
'message' => "Your credentials are so weak [USING_GET]!",
'response_code' => "1");
echo json_encode($response);
}else{
$response = array('response_code' => "-1",
'message' => "invalid username or password");
echo json_encode($response);
}
}
//If no method
else{
$response = array('response_code' => "-2",
'message' => "invalid method");
echo json_encode($response);
}
?>
我广告也将基本网址更改为&#34; https://10.0.2.2&#34;。但是当我运行模拟器时,它会在发送get方法时停止。像这样:
/com.journaldev.retrofitintro D / OkHttp: - &gt;获得https://10.0.2.2/api/api?method=login&username=admin&password=admin http / 1.1 /com.journaldev.retrofitintro D / OkHttp: - &gt;结束