retrofit 2 404 not found
retrofit 2 404 not found
我试图使用retrofit,但是我得到了404代码和消息“未找到”
响应{protocol=http/1.1, code=404, message=Not Found}
我可以在我的服务器日志中看到请求成功,并且响应是一个对象
我以前使用Gson解析它
{
"codigoRespuesta": "00",
"descRespuesta": "成功",
"token": "0bc6e8a352a002db5782ae729501fd05bd825cf165864a0ab32d1ab1529001ed2583df4a5ab257a30f97117ec0fec0b6df60adf288fd6b1579f31d2d636d9aa"
}
所以我正在使用与异步请求一起使用的相同对象与retrofit
public class AuthenticationResponse extends Response { private String token; public AuthenticationResponse() { } public AuthenticationResponse(String codigoRespuesta, String descRespuesta) { super(codigoRespuesta, descRespuesta); } public AuthenticationResponse(String codigoRespuesta, String descRespuesta, String token) { super(codigoRespuesta, descRespuesta); this.token = token; } public String getToken() { return this.token; } public void setToken(String token) { this.token = token; } public String toString() { return "AuthenticationResponse{token=" + this.token + ", " + super.toString() + '}'; }
}
@XmlRootElement public class Response { private String codigoRespuesta; private String descRespuesta; public Response() { } public Response(String codigoRespuesta, String descRespuesta) { this.codigoRespuesta = codigoRespuesta; this.descRespuesta = descRespuesta; } @XmlElement public String getCodigoRespuesta() { return this.codigoRespuesta; } public void setCodigoRespuesta(String codigoRespuesta) { this.codigoRespuesta = codigoRespuesta; } @XmlElement public String getDescRespuesta() { return this.descRespuesta; } public void setDescRespuesta(String descRespuesta) { this.descRespuesta = descRespuesta; } public String toString() { return "codigoRespuesta=" + this.codigoRespuesta + ", descRespuesta=" + this.descRespuesta; }
}
这个项目是基于这个例子的
我的retrofit接口
public interface servicesTutorial { @GET("usersFake") Call> getUsersGet(); @POST("usersFake") Call
> getUsersPost(); @POST("login") Call
doLogin(@Body RequestLogin request);
}
我的MainActivity类
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Gson gson = new GsonBuilder() .setLenient() .create(); final String url = "https://myurl.com/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); servicesTutorial serviceTuto = retrofit.create(servicesTutorial.class); Callcall2 = serviceTuto.doLogin(new RequestLogin("user","pwd")); call2.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { Log.e("testing", "respuesta: "+response.message()+" *** "+response.code()+" *** "+response.isSuccessful() + " *** " + response.raw().toString()); } @Override public void onFailure(Call call, Throwable t) { Log.e("testing",t.toString()); } }); } }
编辑:
最后我弄明白了,显然因为我的服务是用Java和Spring制作的,所以我必须向我的请求添加一个头部("Accept: application/json")
问题出现的原因可能是以下几个方面:
1. 如果您的服务是本地的,可以尝试使用以下地址进行访问:
- 如果使用的是Genymotion模拟器:http://10.0.3.2/
- 如果使用的是默认的AVD模拟器:http://10.0.2.2/
2. 检查您的端点是否正确,例如:
usersFake
login
3. 如果您的本地服务使用了nginx,可能会导致在模拟器中无法访问。确认您的服务不是本地的,并且端点是正确的,但是在retrofit的回调函数中返回的响应为空。
4. 可能是由于您的JSON响应不正确,建议使用以下页面进行验证:
解决方法:
如果遇到(retrofit 2 404 not found)的问题,可以尝试以下解决方法:
1. 如果使用的是Genymotion模拟器,使用http://10.0.3.2/进行访问;如果使用的是默认的AVD模拟器,使用http://10.0.2.2/进行访问。
2. 检查您的端点是否正确,例如:usersFake
、login
。
3. 确认您的服务不是本地的,并且端点是正确的,但是在retrofit的回调函数中返回的响应为空。
4. 验证您的JSON响应是否正确,可以使用jsonschema2pojo.org或jsonlint.com进行验证。
希望以上解决方法能够帮助您解决(retrofit 2 404 not found)的问题。
原因:出现(retrofit 2 404 not found)问题的原因是基本URL的更改导致的。
解决方法:将基本URL更改为"http://abcd.com/abcd/index.php/",并且将终端点更改为"api/Abcd_controller/users"。
更多详情请参考此链接。
希望这对你也有用。谢谢。