改造2 404找不到

时间:2017-02-09 19:41:12

标签: android retrofit

我正在尝试使用改造,但我得到404代码和消息“未找到”

回复{protocol=http/1.1, code=404, message=Not Found}

我可以在服务器日志中看到请求成功,响应是和对象

我曾经用Gson解析它

{
  "codigoRespuesta": "00",
  "descRespuesta": "Success",
  "token": "0bc6e8a352a002db5782ae729501fd05bd825cf165864a0ab32d1ab1529001ed2583df4a5ab257a30f97117ec0fec0b6df60adf288fd6b1579f31d2d636d9aa"
}

所以我使用的是与我曾经用于asyncs请求的改装相同的对象

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;
}

}

此项目基于此示例 github project

我的改装界面

public interface servicesTutorial {

@GET("usersFake")
Call<List<ResponseService>> getUsersGet();


@POST("usersFake")
Call<List<ResponseService>> getUsersPost();

@POST("login")
Call<AuthenticationResponse> 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);

        Call<AuthenticationResponse> call2 = serviceTuto.doLogin(new RequestLogin("user","pwd"));

        call2.enqueue(new Callback<AuthenticationResponse>() {
            @Override
            public void onResponse(Call<AuthenticationResponse> call, Response<AuthenticationResponse> response) {
                Log.e("testing", "respuesta: "+response.message()+" *** "+response.code()+" *** "+response.isSuccessful() +
                        " *** " + response.raw().toString());
            }

            @Override
            public void onFailure(Call<AuthenticationResponse> call, Throwable t) {
                Log.e("testing",t.toString());
            }
        });


}
}

修改: 我终于得到了它,显然是因为我的服务是用Java和Spring制作的,我必须在我的请求中添加一个标题(“Accept:application / json”)

3 个答案:

答案 0 :(得分:0)

可行的解决方案

1:如果您的服务是local,请记住使用

<强> Genymotion

http://10.0.3.2/

默认AVD

http://10.0.2.2/

2:检查您的端点是否已更正

usersFake
login

3:在我本地的情况下,我有nginx,我在使用模拟器访问时遇到问题

答案 1 :(得分:0)

昨天我遇到了同样的问题。试试这个:

在浏览器中检查您的工作网址。如果您的网址端点包含.php等任何扩展程序,请将其添加到GET/POST注释参数中,并将全名称为@GET("userFake.php")

这对我有用。希望它也适合你。

答案 2 :(得分:0)

在BASE URl中进行更改时,它对我有用。像这样更改您的BaseUrl:

  private static final String BASE_URL="http://abcd.com/abcd/index.php/";

并像这样设置端点

@GET("api/Abcd_controller/users")
    Call<ABCDList>getUsers();

有关更多详细信息,请参见此link。 这项功能对我有用。希望这对您也有用。谢谢