有没有办法在Android Studio中通过Ajax发送多种类型的HashMap参数?

Is there a way to send multiple types of HashMap parameters through Ajax in Android Studio?

我是 Android Studio 的新手,我正在使用 Ajax 将数据发送到我的数据库服务器。 我有两种类型的 HashMap 参数需要查询。一个用于我表单中的所有字符串值,另一个用于图像文件,但我似乎无法在对新 Aquery.ajax(//parameters) 方法的一次调用中发送它们。此方法的所有变体都限制只能使用一种地图类型。

我尝试将 ParamFile 参数放在不同的查询中,但它仍然不起作用。虽然这可能是因为我不完全确定 "Object Handler" 在其他方法定义中的含义。

这是我的方法的代码:

private void AddNewEquipment()
{
       try {
            //Two types of HashMap files

            HashMap<String, String> param = new HashMap<>();
            HashMap<String, Bitmap> paramFile = new HashMap<>();
            param.put("listing_title", ETitle.getText().toString());
            param.put("listing_type", String.valueOf(IntEquipmentType));
            param.put("listing_desc", EDesc.getText().toString());
            param.put("listing_rate", ERate.getText().toString());
            param.put("listing_mode", Mode);
            paramFile.put("listing_img_file", bitmap); //this never gets queried
            param.put("listing_date_from-x", AvailableFromDT);
            param.put("listing_date_to-x", AvailableToDT);
            param.put("listing_sell_mode", SellMode);
            param.put("listing_display_mode", String.valueOf(IntAdType));
            param.put("listing_status", String.valueOf(IntAdStatus));

            AQuery aq = new AQuery(this);
            aq.ajax(BASE_URL, param, JSONObject.class, new AjaxCallback<JSONObject>() {
                @Override
                public void callback(String url, JSONObject json, AjaxStatus status) {
                    super.callback(url, json, status);

                    Log.v("CALLBACK RECEIVED", String.valueOf(json) + status);
                    try {
                        if (json != null) {
                            JSONObject h = json.getJSONObject("success");
                            Log.v("SUCCESS", "DONE");
                            Toast.makeText(AddEquipment.this, "New Equipment Added", Toast.LENGTH_LONG).show();
                            exitEquipmentForm(); //method that opens the main activity again
                        } else {
                            Log.v("ERROR", "ERROR");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

            }.method(AQuery.METHOD_POST).header("Authorization", "Bearer "+SessionHandler.getKeyToken()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我不断收到空 JSON 对象,尽管那是因为并非所有参数都得到查询 <---我需要帮助的部分。

我很乐意提供更多代码片段。也请让我知道任何替代方案。

尝试使用 Object 作为您的值类型:

HashMap<String, Object> params = new HashMap<>();

如果您使用固定数据类型初始化 HashMap,则您不能为当时指定的其他数据类型存储任何其他值。如果您想将任何数据存储为值,那么您应该使用对象数据类型。

喜欢

HashMap<String, Object> param = new HashMap<>();

然后您可以添加任何值(位图或字符串)作为映射值。

您可以像这样存储值,

HashMap<String, Object> param = new HashMap<>();
param.put("listing_title", ETitle.getText().toString()); // String values
// add Other String parameters here..
param.put("listing_img_file", bitmap); // Your Image Bitmap file

我的建议是用 LinkedHashMap<String, Object> 替换你的 HashMap<String, Object>HashMap 不维护任何顺序,而 LinkedHashMap 维护元素的插入顺序。