Синтаксический анализ JSON показывает странное поведение

#android #json

#Android #json

Вопрос:

привет!

У меня есть строка Json:

 {"responseData":{"days":[{"date":1289430000,"lessons":[{"lesson":"3","classname":"XXXX","oldTeacher":"RUMET","newTeacher":"JAKOB","oldSubject":"0AM","newSubject":"0AM","oldRoom":"104","newRoom":"104 ","comment":""},{"lesson":"4","classname":"XXXX","oldTeacher":"RUMET","newTeacher":"JAKOB","oldSubject":"0AM","newSubject":"0APH","oldRoom":"104","newRoom":"107 ","comment":"Verlegtvon"},{"lesson":"8","classname":"XXXX","oldTeacher":"JAKOB","newTeacher":"","oldSubject":"0APH","newSubject":"","oldRoom":"107","newRoom":" ","comment":"Entfall"}]},{"date":1289516400,"lessons":[{"lesson":"1","classname":"XXXX","oldTeacher":"KAIS","newTeacher":"","oldSubject":"0RW1","newSubject":"","oldRoom":"107","newRoom":" ","comment":"Entfall"},{"lesson":"2","classname":"XXXX","oldTeacher":"KAIS","newTeacher":"TRAUN","oldSubject":"0RW1","newSubject":"0BO","oldRoom":"107","newRoom":"107 ","comment":""}]},{"date":1289948400,"lessons":[{"lesson":"5","classname":"XXXX","oldTeacher":"KIES","newTeacher":"","oldSubject":"0RK","newSubject":"","oldRoom":"107","newRoom":" ","comment":"Entfall"}]},{"date":1290121200,"lessons":[{"lesson":"6","classname":"XXXX","oldTeacher":"KIES","newTeacher":"","oldSubject":"0RK","newSubject":"","oldRoom":"107","newRoom":" ","comment":"Entfall"}]}]},"responseDetails":null,"responseStatus":200}
  

для лучшего понимания кода в http://json.parser.online.fr /

и я анализирую его в список объектов ввода (SPEntry):

 public class EntryParse{

    ArrayList<SPEntry> list;
    public EntryParse(Context ctx, String par_json)
    {
        try 
        {
            list = new ArrayList<SPEntry>();
                JSONArray array  = new JSONArray(par_json);

                for (int i = 0; i < array.length(); i  ) {              //Datum
                    JSONObject json = array.getJSONObject(i);

                    Date date = new Date(json.getLong("date")*1000);
                    SimpleDateFormat ft = new SimpleDateFormat ("dd.MM.yyyy");

                    JSONArray lessons = json.getJSONArray("lessons");

                    for (int j = 0; j < lessons.length(); j  ) {        //Stunden

                        JSONObject obj = lessons.getJSONObject(j);
                        SPEntry entry = new SPEntry();
                        entry.date = ft.format(date);
                        entry.lesson = obj.optString("lesson");
                        entry.teacher = obj.optString("oldTeacher");
                        entry.newTeacher = obj.optString("newTeacher");
                        entry.lesson = obj.optString("oldSubject");
                        entry.newlesson = obj.optString("newSubject");
                        entry.oldRoom = obj.optString("oldRoom");
                        entry.newRoom = obj.optString("newRoom");
                        entry.comment = obj.optString("comment");
                        if(entry.comment.equals("Entfall")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.entfall);
                        }
                        if(entry.comment.equals("Betreuung")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.betreung);
                        }
                        if(entry.comment.equals("Verlegtvon")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.verlegt);
                        }
                        else
                        {
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.empty);
                        }


                        list.add(entry);

                    }

                }
  

Моя проблема в том, что настройка изображения показывает странное поведение. Во втором элементе lessons я не получаю изображение, а во всех остальных случаях я получаю только изображение «Entfall».
изображения в ресурсах разные

Пожалуйста, помогите

Скриншот списка:

http://img6.imagebanana.com/img/fnmedlrr/device20111018181454.png

Комментарии:

1. поместите это if(entry.comment.equals(«Verlegtvon»)){ entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.entfall); } и убедитесь, что вы получаете то же изображение и для второго элемента.

2. и Яшвант Кумар прав, используя if else вместо простого if .

3. Если вы получили то же изображение во втором элементе (строка списка), то у вас есть проблема с возможностью рисования.

Ответ №1:

 if(entry.comment.equals("Entfall")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.entfall);
                        }
                        if(entry.comment.equals("Betreuung")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.betreung);
                        }
                        if(entry.comment.equals("Verlegtvon")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.verlegt);
                        }
                        else
                        {
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.empty);
                        }
  

Если вы внимательно посмотрите на код, в итоге вы получите 2 изображения, либо empty или verlegtvon , используйте else if для решения проблемы. попробуйте приведенный ниже код, я только что добавил else if

 if(entry.comment.equals("Entfall")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.entfall);
                        }
                        else if(entry.comment.equals("Betreuung")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.betreung);
                        }
                        else if(entry.comment.equals("Verlegtvon")){
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.verlegt);
                        }
                        else
                        {
                            entry.picture = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.empty);
                        }
  

Комментарии:

1. hy у меня уже были части if else раньше, и показано только второе изображение

2. тогда возникает проблема, связанная с заполнением ListView, несколько раз изображения повторяются в ListView. ищите похожие вопросы, подобные этому, которые решат проблему.

Ответ №2:

Из 7 записей урока в вашей строке json только одна из них используется один раз, и это Verlegtvon (которая также является второй записью). Я полагаю, что с чертежом что-то не так R.drawable.verlegt .

Комментарии:

1. проблема не возникает при изменении условий if