有没有办法在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
维护元素的插入顺序。
我是 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
维护元素的插入顺序。