I'm trying to read JSON data from an asset and convert it to map. However, it does not seem to convert and gives me errors whenever I run the code.
File is in the assets folder, named "json_database_main.json"
public Map loadMapFromAsset() {
String json = null;
Map objects_map = new HashMap();
Product product;
Log.d("Started ldmpfass", "Yeah");
try {
InputStream is = getAssets().open(file_database);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
JSONArray jsonArray = new JSONArray(json);
Log.d("Sumthin", Integer.toString(size));
for(int i = 0; i < jsonArray.length(); i++)
{
JSONObject jsonObj = jsonArray.getJSONObject(i);
Log.d("JSobject:", jsonObj.toString());
product = mapper.readValue(jsonObj.toString(), Product.class);
Log.d("Object:", product.getCode());
objects_map.put(product.getCode(), product);
}
} catch (IOException ex) {
ex.printStackTrace();
return null;
} catch (JSONException e) {
e.printStackTrace();
}
return objects_map;
}
Here's the message I got in logcat:
D/JSobject:: {"code":"0001","description":"Pienas","type":"Pieno produktai"}
W/System.err: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.matas.checksv3.Product: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
W/System.err: at [Source: {"code":"0001","description":"Pienas","type":"Pieno produktai"}; line: 1, column: 2]
W/System.err: at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456)
W/System.err: at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator( DeserializationContext.java:1012)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1203)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148)
W/System.err: at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789)
W/System.err: at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)
W/System.err: at com.matas.checksv3.MainActivity.loadMapFromAsset(MainActivity.java:152)
W/System.err: at com.matas.checksv3.MainActivity$2.onClick(MainActivity.java:85)
W/System.err: at android.view.View.performClick(View.java:5610)
W/System.err: at android.view.View$PerformClick.run(View.java:22260)
W/System.err: at android.os.Handler.handleCallback(Handler.java:751)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:154)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6077)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
D/AndroidRuntime: Shutting down VM
I know that my code is ugly, but this is my first android application, I'll try to get better, so point out anything that I could do better.
I edited my code and now I get this. I'm not sure what class Product needs. Here it is:
public class Product {
String code;
String description;
String type;
public Product(String code, String description, String type)
{
this.code = code;
this.description = description;
this.type = type;
}
public Product(String code, String description)
{
this.code = code;
this.description = description;
}
public String getCode()
{
return code;
}
public String getType() {
return type;
}
public String getDescription() {
return description;
}
public void setCode(String code) {
this.code = code;
}
public void setDescription(String description) {
this.description = description;
}
public void setType(String type) {
this.type = type;
}
}
EDIT: Got it working! Added: public Product(){}
to Product class.