在第 1 行第 1 列路径 $ 内输入的结尾发送一个 json 数组

End of input at line 1 column 1 path $ within send a json array

我想在 retrofit.but 的不同版本中将 json 数组发送到服务器 我只是给出了这个错误:

第 1 行第 1 列路径输入结束 $

我的 java 代码是:

private void setOnClickSubmit() {
    btn_submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            load_submit.setVisibility(View.VISIBLE);
            btn_submit.setAlpha(0.5f);
            btn_submit.setText("");
            btn_submit.setEnabled(false);
            btn_exit.setAlpha(0.5f);
            btn_exit.setEnabled(false);
            ansInf = intent.getExtras().getParcelableArrayList("answers");
            JSONArray jsonArray = new JSONArray();
            JSONObject jsonObject =new JSONObject();
            try {
                jsonObject.put("user_id","17");
                jsonObject.put("mikhay", new SecurityCode().getSecCode());
                jsonObject.put("price", "200");
                jsonObject.put("cat_id", "20");
                jsonArray.put(jsonObject);
                for(int i = 0 ; i < ansInf.size() ; i++){
                    JSONObject jsonObject1 =new JSONObject();
                    jsonObject1.put("question",ansInf.get(i).getQuestion());
                    jsonObject1.put("type", ansInf.get(i).getType());
                    jsonObject1.put("field", ansInf.get(i).getAnswer());
                    jsonArray.put(jsonObject1);
                }
                Log.i("test3", "setOnClickSubmit: " + jsonArray);

                ApiClient.getInstance().getApi().CatInf(jsonArray).enqueue(new Callback<Status>() {
                    @Override
                    public void onResponse(Call<Status> call, Response<Status> response) {
                        Log.e("test3", "onResponse: "+response.body().getStatus() );
                        if (response.isSuccessful() && response.body().getStatus().equals("successfull")){
                            load_submit.setVisibility(View.GONE);
                            btn_submit.setAlpha(1f);
                            btn_submit.setText("ثبت نهایی");
                            btn_submit.setEnabled(true);
                            btn_exit.setAlpha(1f);
                            btn_exit.setEnabled(true);
                            Snackbar snackbar = Snackbar
                                    .make(findViewById(android.R.id.content)
                                            ,"با موفقیت ثبت شد. به سفارشات مراجعه کنید.",
                                            Snackbar.LENGTH_LONG).
                                            setAction("سفارشات", new View.OnClickListener() {
                                                @Override
                                                public void onClick(View view) {

                                                }
                                            });
                            snackbar.getView().setBackgroundColor(ContextCompat.getColor(PriceActivity.this, R.color.blue8));
                            snackbar.setActionTextColor(getResources().getColor(R.color.white));
                            snackbar.show();
                        }
                        else {
                            load_submit.setVisibility(View.GONE);
                            btn_submit.setAlpha(1f);
                            btn_submit.setText("ثبت نهایی");
                            btn_submit.setEnabled(true);
                            btn_exit.setAlpha(1f);
                            btn_exit.setEnabled(true);
                            Snackbar snackbar = Snackbar
                                    .make(findViewById(android.R.id.content)
                                            ,"مشکلی پیش آمد",
                                            Snackbar.LENGTH_LONG).
                                            setAction("باشه!", new View.OnClickListener() {
                                                @Override
                                                public void onClick(View view) {

                                                }
                                            });
                            snackbar.getView().setBackgroundColor(ContextCompat.getColor(PriceActivity.this, R.color.blue8));
                            snackbar.setActionTextColor(getResources().getColor(R.color.white));
                            snackbar.show();
                        }
                    }

                    @Override
                    public void onFailure(Call<Status> call, Throwable t) {
                        load_submit.setVisibility(View.GONE);
                        btn_submit.setAlpha(1f);
                        btn_submit.setText("ثبت نهایی");
                        btn_submit.setEnabled(true);
                        btn_exit.setAlpha(1f);
                        btn_exit.setEnabled(true);
                        Log.e("test3", "onFailure: "+t.getMessage());
                        Snackbar snackbar = Snackbar
                                .make(findViewById(android.R.id.content)
                                        ,"خطا برقراری ارتباط با سرور",
                                        Snackbar.LENGTH_LONG).
                                        setAction("باشه!", new View.OnClickListener() {
                                            @Override
                                            public void onClick(View view) {

                                            }
                                        });
                        snackbar.getView().setBackgroundColor(ContextCompat.getColor(PriceActivity.this, R.color.blue8));
                        snackbar.setActionTextColor(getResources().getColor(R.color.white));
                        snackbar.show();
                    }
                });


            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    });

}

我的界面是:

@POST("add_service")
Call<Status> CatInf(@Body JSONArray jsonArray);

我的日志是:

[{"user_id":"17","mikhay":"hi","price":"200","cat_id":"20"},{"question":"نوع فضای مورد نظر خود را مشخص کنید:","type":"radio","field":"تجاری/ اداری"},{"question":"آیا این مکان خالی از وسایل یا کلید نخورده است؟","type":"radio","field":"خیر"},{"question":"متراژ فضای مورد نظر","type":"radio","field":"50 الی 70 متر"},{"question":"برآوردتان از مدت زمان لازم برای انجام کار چند ساعت است؟","type":"radio","field":"5 ساعت"},{"question":"به متتخصص آقا نیاز دارید یا خانم؟","type":"radio","field":"خانم"},{"question":"خدمات مورد نظر خود را مشخص کنید:","type":"checkbox","field":"مرتب کردن داخل کابینت و کمد"},{"question":"آیا از حیوانات خانگی نگهداری میکنید؟","type":"radio","field":"خیر"},{"question":"آیا در محل شما بیمار مبتلا به کرونا حضور دارد؟","type":"radio","field":"خیر"},{"question":"توضیحات تکمیلی:","type":"text","field":"لات"},{"question":"عکس از محل تمیزکاری","type":"pic","field":"http://kara-service.ir/pl_include/pic/user__1__photo__72.jpg"},{"question":"تعداد زن و مرد","type":"gender","field":"1-0"},{"question":"جه زمانی به این سرویس نیاز دارید؟","type":"date","field":"1399/9/26"},{"question":"محل انجام سفارش","type":"address","field":"اصفهان خیابان کاوه"},{"question":"محل انجام سفارش","type":"text","field":"ددک"}]

2020-12-16 10:08:25.845 30914-30914/com.example.zafarapp E/test3: onFailure: End of input at line 1 column 1 path $

为什么要使用 JSONArray? 你可以创建一个模型class,然后直接传递给body,改造GsonConverterFactory自动将它转换为json,然后发送到服务器。

对于您的模型 class,您可以将所有字段添加为参数,并仅填写必填字段(Retrofit 不会发送空字段。)

根据以上内容,您的模型 class 将如下所示:

public class Data {
    @SerializedName("field")
    public String field=null;
    @SerializedName("type")
    public String type=null;
    @SerializedName("question")
    public String question=null;
    @SerializedName("cat_id")
    public String catId=null;
    @SerializedName("price")
    public String price=null;
    @SerializedName("mikhay")
    public String mikhay=null;
    @SerializedName("user_id")
    public String userId=null;
}