Как можно получить объект List из String, добавить новый элемент в список и вернуть его в строку. Я использую JSON и Джексон, созданный класс для Листа элемента:Строка Java в список объектов
public class WeightDataJson {
private String weightValue;
private String dateValue;
public WeightDataJson(String weightValue,String dateValue){
this.weightValue=weightValue;
this.dateValue=dateValue;
}
public String getWeightValue() {
return weightValue;
}
public void setWeightValue(String weightValue) {
this.weightValue = weightValue;
}
public String getDateValue() {
return dateValue;
}
public void setDateValue(String dateValue) {
this.dateValue = dateValue;
}
}
и моего кода для списка изменений и строк:
String myWeightData = preferencesWeight.get();
List<WeightDataJson> myList = new Vector<WeightDataJson>();
ObjectMapper jsonMapper = new ObjectMapper();
try {
myList = jsonMapper.readValue(myWeightData, new TypeReference<List<WeightDataJson>>(){});
} catch (IOException e) {
e.printStackTrace();
}
WeightDataJson newWeightData = new WeightDataJson(editText.getText().toString(),"213123");
myList.add(newWeightData);
JSONObject myJson=new JSONObject();
for(int i=0;i<myList.size();i++){
try {
myJson.put("weightValue",myList.get(i).getWeightValue());
myJson.put("dateValue",myList.get(i).getDateValue());
} catch (JSONException e) {
e.printStackTrace();
}
}
String toSave ="["+myJson.toString()+"]";
Toast.makeText(getActivity(),"zapisuje: "+toSave,Toast.LENGTH_LONG).show();
preferencesWeight.save(toSave);
WeightDataProvider weightDataProvider = new WeightDataProvider(addIcon,deleteIcon,editText.getText().toString(),"213123");
weightAdapter.add(weightDataProvider);
myWeightData
является «основными» String (это возможно, что он пуст) , Я не уверен, но, вероятно, есть проблема, потому что String для jakcson должен быть как [{element1},{element2}]
, а объект Json дает {element1},{element2}
, поэтому я положил туда String toSave ="["+myJson.toString()+"]"
.
Если основная Строка [{weightValue":"50","dateValue":"34234"}]
У меня есть ошибка в строке myList=jsonmapper.readValue~~
:
07-30 03:59:04.407 11837-11837/com.plan.aplikacjamobilna W/System.err: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.plan.aplikacjamobilna.WeightDataJson]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
07-30 03:59:04.407 11837-11837/com.plan.aplikacjamobilna W/System.err: at [Source: [{"weightValue":"14","dateValue":"213123"}]; line: 1, column: 3] (through reference chain: java.util.ArrayList[0])
Есть еще один способ, чтобы решить мою проблему?
Вы пытались добавить конструктор по умолчанию, как сообщение об ошибке говорит, что не хватает? – azurefrog
Вы имеете в виду конструктор для WeightDataJson? – barmi
Да. Вы не определили конструктор по умолчанию для этого класса, и Java не будет автоматически создавать его, если вы уже определили свой собственный. Я ожидаю, что Джексон попытается создать пустой объект, а затем ввести в него значения, которые он не может обойти без конструктора по умолчанию. – azurefrog