Java 像jqueryajax一样,使用改型发出POST-Json请求

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/

我在我的网站上使用jQueryAjax向我们的服务器发送POST请求,这样它就可以向我发送我可以使用的json数据。 我提出的所有ajax请求如下所示:

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();