Java 像jqueryajax一样,使用改型发出POST-Json请求
我在我的网站上使用jQueryAjax向我们的服务器发送POST请求,这样它就可以向我发送我可以使用的json数据。 我提出的所有ajax请求如下所示:Java 像jqueryajax一样,使用改型发出POST-Json请求,java,android,jquery,ajax,retrofit2,Java,Android,Jquery,Ajax,Retrofit2,我在我的网站上使用jQueryAjax向我们的服务器发送POST请求,这样它就可以向我发送我可以使用的json数据。 我提出的所有ajax请求如下所示: getLanguages(callback) { $.ajax({ type: 'POST', crossDomain: true, dataType: 'JSON', cache: false, url: 'https://www.someurl.com/
getLanguages(callback) {
$.ajax({
type: 'POST',
crossDomain: true,
dataType: 'JSON',
cache: false,
url: 'https://www.someurl.com/fc.php',
data: {
mode: 'language'
},
success: callback
});
},
requestCountries(phone, callback) {
$.ajax({
type: 'POST',
crossDomain: true,
dataType: 'JSON',
cache: false,
url: 'https://www.someurl.com/fc.php',
data: {
mode: 'country',
phone: phone,
langId: myStorage.getLanguage()
},
success: callback
});
},
唯一不同的是数据
参数,所以这很重要。
现在我正试图用Android实现同样的目标,但我什么都不懂,因为它基本上没有文档,所以下面是我从这里和那里的用户示例中构建的内容:
String url = "https://www.someurl.com";
JsonObject obj = new JsonObject();
obj.addProperty("mode", "language");
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
MyRetrofit myretro = retrofit.create(MyRetrofit.class);
myretro.getLanguage(obj, new Callback<Language>() {
@Override
public void onResponse(Call<Language> call, Response<Language> response) {
Log.d("response", "response");
}
@Override
public void onFailure(Call<Language> call, Throwable t) {
Log.d("response", "response");
}
});
当我运行代码时,它因这个错误而崩溃
java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #2)
我如何才能实现我所需要的,任何帮助、解释或建议都将不胜感激。试试看
Call<Void> getUser(....)
调用getUser(…)
您可以试试
// you do not need callback parameter here
public interface MyRetrofit {
@POST("fc.php")
Call<Language> getLanguage(@Body JsonObject json);
}
终点是fc.php
@POST("fc.php")
例如,假设您的终点是post/user,那么您将拥有@post(“post/user”),并且您的baseurl是。另外,将baseurl作为常量放在一些实用程序文件中,并定义端点,以便您可以在一个地方轻松地更改它们,并在需要的任何地方引用它们
然后
然后
现在我得到了-java.lang.IllegalArgumentException:无法为类org.json.JSONObject(参数#1)创建@Body converter,原因是:java.lang.IllegalArgumentException:找不到类org.json.JSONObject的RequestBody转换器。现在将尝试添加Gson是尝试添加.addConverterFactory(GsonConverterFactory.create())好的,现在我得到java.lang.IllegalArgumentException:未找到改装注释。(参数#2)如果您使用的是改型2,为什么在
getUser
中有Callback
?。检查@Raghunandan ok我更新了我的代码,将jsonobject和其他参数更改为来自改型或GSONY您仍然没有使用getLanguage中的version2完全更新您仍然有,Callback Callback
no,回调来自导入改型2.Callback;这个排队方法是什么?这个Repo对象是什么?不工作,我在调用中得到错误=myretro.getLanguage(obj);因为它需要回调的另一个参数,当我添加它时,它仍然会崩溃,并且没有找到任何改装注释。(参数#2)从参数中删除回调。那是一个复制粘贴错误。水坝。现在让我编辑postyes它没有崩溃,尽管服务器人员告诉我我没有给他发送任何东西,我放入模式语言的JsonObject在服务器的POST中找不到。。。你知道吗?如果没有,我将标记为已解决,因为它不会崩溃now@SartherisStormhammer使用okhttp拦截器记录post请求和响应,然后查看发送的内容和响应。@SartheriStormHammer如果您不知道如何记录,我也可以发布该代码
// you do not need callback parameter here
public interface MyRetrofit {
@POST("fc.php")
Call<Language> getLanguage(@Body JsonObject json);
}
https://www.someurl.com/
@POST("fc.php")
Call<Language> call = myretro.getLanguage(obj);
// for asynchronous call
call.enqueue(new Callback<Language>() {
@Override
public void onResponse(Call<Language> call, Response<Language> response) {
Log.d("response", "response");
}
@Override
public void onFailure(Call<Language> call, Throwable t) {
t.printstackTrace();
}
});
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request(); //Current Request
Response response = chain.proceed(originalRequest); //Get response of the request
//I am logging the response body in debug mode. When I do this I consume the response (OKHttp only lets you do this once) so i have re-build a new one using the cached body
String bodyString = response.body().string();
Log.i("NetworkModule", String.format("Sending request %s with headers %s ", originalRequest.url(), originalRequest.headers()));
Log.i("", (String.format("Got response HTTP %s %s \n\n with body %s \n\n with headers %s ", response.code(), response.message(), bodyString, response.headers())));
response = response.newBuilder().body(
ResponseBody.create(response.body().contentType(), bodyString))
.build();
return response;
}
}).connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES).writeTimeout(2, TimeUnit.MINUTES).build();
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();