我尝试将Retrofit
与Restful WebService
一起使用。一切似乎都没问题,但不知何故,当我运行此代码时,这将始终返回此
Method not found. Retrofit 404 Error
这是我的Web服务代码
public function processApi() {
$func = strtolower(trim(str_replace("/","",$_POST['request'])));
if ((int)method_exists($this,$func) > 0) {
$this->$func();
} else {
// If the method not exist with in this class, response would be "Page not found".
$this->response('Method not found',404);
}
}
private function login() {
// Cross validation if the request method is POST else it will return "Not Acceptable" status
if ($this->get_request_method() != "POST") {
// If invalid inputs "Bad Request" status message and reason
$error = array('status' => "0", "msg" => "Bad Request");
$this->response($this->json($error), 406);
}
// Input validations
if (empty($email) and empty($password)) {
$error = array('status' => "0", "msg" => "Invalid Email address or Password");
$this->response($this->json($error), 400);
}
}
public class ObjectPost {
@SerializedName("request")
String request;
@SerializedName("email")
String event_id;
public void setRequest(String request) {
this.request = request;
}
public void setEvent_id(String event_id) {
this.event_id = event_id;
}
}
这是我的Android请求代码
public class RestClient {
public interface ClientInterface {
@POST(Config.LOGIN_URL)
void login(@Body ObjectPost mObject,
Callback<LoginBeans> callback);
}
public static ClientInterface initRestAdapter() {
OkHttpClient client = new OkHttpClient();
return (ClientInterface) new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(client))
.setEndpoint(Config.SERVER_URL)
.build()
.create(ClientInterface.class);
}
}
答案 0 :(得分:0)
中的值
Config.LOGIN_URL
很可能是不正确的。请记住
Config.SERVER_URL
必须包含基本网址。例如http://www.server.com/(另请注意斜杠重要)
接下来,您的属性中的内容必须只是附加在 base 网址上的特定方法的其余部分。例如如果您要调用的方法是 login ,则它应该是
@POST(&#34; /登录&#34)
再一次,我不是在开玩笑。
还要记住,如果查询参数通过null发送,则改装会忽略它(稍后您可能会遇到此问题)。
如果您需要任何进一步的帮助,您已经将loglevel设置为full,请将logcat添加到您的问题中,以便我们可以看到正在发生的事情。
答案 1 :(得分:0)
您的代码看起来没问题。
基本上你需要确保你的后端。确保控制器或其他任何东西都是正确的。
也许这对您https://github.com/square/retrofit/issues/789
非常适用所以,不要看你的Android代码,而是在我想说的其他地方寻找它是一个很好的理由。