代码之家  ›  专栏  ›  技术社区  ›  M Pascual

从数据库获取事件并放置在日历视图上(android)

  •  0
  • M Pascual  · 技术社区  · 7 年前

    我的android应用程序中有一个日历程序。现在我需要将事件存储在联机 Mysql 并将其放置在日历上。现在我有一个 php 创建 json 对象还有这个 JSON 对象显示来自数据库的所有事件

    日历php

    <?php
    include 'DatabaseConfig.php';
    
    // Create connection
    //$conn = new mysqli($HostName, $HostUser, $HostPass, $DatabaseName);
        $conn = mysqli_connect("localhost", "id2553265_admin", "admin", "id2553265_mobile_app");
    if ($conn->connect_error) {
    
     die("Connection failed: " . $conn->connect_error);
    } 
    
    $sql = "SELECT * FROM calendar";
    
    $result = $conn->query($sql);
    
    if ($result->num_rows >0) {
    
    
     while($row[] = $result->fetch_assoc()) {
    
     $tem = $row;
    
     $json = json_encode($tem);
    
    
     }
    
    } else {
     echo "No Results Found.";
    }
     echo $json;
    $conn->close();
    ?>
    

    我在这段代码中插入 1496134800000升 突出显示的日期 2017-05-30 . 现在我有了java代码,可以突出显示并用特定日期将它们涂成蓝色。

    @Override
    
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
    
            View view = inflater.inflate(R.layout.fragment_calendar, container, false);
            //calendar setup
            compactCalendar = (CompactCalendarView) view.findViewById(R.id.comCalendarView);
            compactCalendar.setUseThreeLetterAbbreviation(true);
            calendarMonth = (TextView) view.findViewById(R.id.calMonth);
    
    
    
            Event may30 = new Event(Color.BLUE, **1496134800000L**, "test");
            compactCalendar.addEvent(may30);
    
            Event aug17 = new Event(Color.BLUE, 1502960400000L, "test");
            compactCalendar.addEvent(aug17);
    
    
            compactCalendar.setListener(new CompactCalendarView.CompactCalendarViewListener() {
                @Override
                public void onDayClick(Date dateClicked){
                    if (dateFormatDay.format(dateClicked).toString().compareTo("**2017-05-30**") == 0){
                        Toast.makeText(CalendarFragment.this.getContext(), "There is an event", Toast.LENGTH_SHORT).show();
                        Intent i = new Intent(getActivity(), ListMay07.class);
                        i.putExtra("Date", "Sample date");
                        startActivity(i);
    
                    }else  if (dateFormatDay.format(dateClicked).toString().compareTo("2017-08-17") == 0){
                        Toast.makeText(CalendarFragment.this.getContext(), "There is an event", Toast.LENGTH_SHORT).show();
                        Intent i = new Intent(getActivity(), ListAug17.class);
                        i.putExtra("Date", "Sample date");
                        startActivity(i);
    
                    }else{
                        Toast.makeText(CalendarFragment.this.getContext(), "No Event", Toast.LENGTH_SHORT).show();
    
                    }
                }
    
                @Override
                public void onMonthScroll(Date firstDayOfNewMonth) {
                    calendarMonth.setText(dateFormatMonth.format(firstDayOfNewMonth));
                }
    
    
    
            });
            // Inflate the layout for this fragment
            return view;
    
        }
    

    我的主要问题是如何从数据库中获取数据并将其插入java代码中,以便所有事件都将输入数据库而不是实际代码中。

    enter image description here

    我想通过使用 JSON 反对,但我不知道怎么反对。

    [{  
       "ID":"1",
       "Epoch_Time":"1496134800000L",
       "Date":"2017-05-30"   ‌​,
       "Description":"Cama‌​raderie Day"
    },
    {  
       "ID":"2",
       "Epoch_Time":"1502960400000L",
       "Date":"2017-0‌​8-17",
       "Description":‌​"Sample Date"
    }]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Saran Sankaran    7 年前

    首先为JSON中包含的数据创建一个POJO。

    public class Event{
       long id;
       long epochTime;
       String date;
       String  desc;
    
      public Event (long id, long epochTime, String date, String  desc){
          this.id = id;
          this.epochTime = epochTime;
          this.date = date;
          this.desc = desc;
      }
    }
    

    然后可以解析JSON并将其存储在POJO中

    String myJsonResponse // will contain the json response from the server
    
    try {
        JSONArray array = new JSONArray(myJsonResponse);
    
        List<Event> events = new ArrayList<>(array.length());
    
        for (int i = 0; i < array.length(); i++) {
            JSONObject object = (JSONObject) array.get(1);
            long id = Long.parseLong(object.getString("ID"));
            long epoctTime = Long.parseLong(object.getString("Epoch_Time"));
            String date = object.getString("Date");
            String description = object.getString("Description");
    
            Event event = new Event(id, epoctTime, date, description);
            events.add(event);
    
        }
    } catch (JSONException e){
        e.printStackTrace();
    }
    

    然后,您可以使用事件列表执行任何您想要的操作。