如何解决google日历中事件日历更新中的sqlite SQLiteException?

时间:2018-03-16 07:59:07

标签: java android sqlite calendar

我正在尝试更新日历中的活动,但我无法更新更新查询中显示错误的日历

在这一行

int rows= getContentResolver().update(updateUri, event, null, null);//(Status_Check.java:242)

 UpdateCalendarEvent(jsonArray_Update);//(Status_Check.java:66)

我能够从php获取数据并且我将它们放入吐司中并且日期正在接收并且在for循环中我也测试了它正在工作但是我无法更新显示错误的事件

logcat的

03-16 13:20:49.659 17919-17919/com.example.calenderscheduler E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: com.example.calenderscheduler, PID: 17919
                                                                           java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.calenderscheduler/com.example.calenderscheduler.Status_Check}: android.database.sqlite.SQLiteException
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                               at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                            Caused by: android.database.sqlite.SQLiteException
                                                                               at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179)
                                                                               at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
                                                                               at android.content.ContentProviderProxy.update(ContentProviderNative.java:568)
                                                                               at android.content.ContentResolver.update(ContentResolver.java:1362)
                                                                               at com.example.calenderscheduler.Status_Check.UpdateCalendarEvent(Status_Check.java:242)
                                                                               at com.example.calenderscheduler.Status_Check.onCreate(Status_Check.java:66)
                                                                               at android.app.Activity.performCreate(Activity.java:6251)
                                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                               at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:148) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

以这种方式我正在更新日期

    package com.example.calenderscheduler;

import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.provider.CalendarContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Status_Check extends AppCompatActivity {
    JSONArray jsonArray_New=null,jsonArray_Update=null;
    Context context;
    JSONArray   New_send,Update_send;
    JSONArray new_sch = null;
    JSONArray upt_sch = null;
    String[] day, month, year, Hours, Endtime, StartTime, schedule_id, Employee_id, Event_id;
    String Shours;
    String Sminutes;
    String Ssecond;
    String Ehours;
    String Eminutes;
    String Esecond;
    String Eampm;
    String Sampm;
    String Name;
    String Password;
    String Token;
    JSONArray WC, US, NS;
    int s, mo, L;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_status__check);



        String jsonString = getIntent().getStringExtra("rootJson");
        String data = "";


        try {
            JSONObject jsonObjects = new JSONObject(jsonString);
            jsonArray_New = jsonObjects.getJSONArray("NEW_SCHEDULE");
            Toast.makeText(Status_Check.this, "jsonArray_New"+jsonArray_New, Toast.LENGTH_LONG).show();

        }catch (JSONException e) {e.printStackTrace();}

        try {
            JSONObject jsonObjects = new JSONObject(jsonString);
            jsonArray_Update = jsonObjects.getJSONArray("UPDATE_SCHEDULE");
            Toast.makeText(Status_Check.this, "jsonArray_Update"+jsonArray_Update, Toast.LENGTH_LONG).show();
             UpdateCalendarEvent(jsonArray_Update);

        }catch (JSONException e) {e.printStackTrace();}

    }
    private void UpdateCalendarEvent(JSONArray jsonArray_update) {

        JSONArray jsonArray;

        jsonArray=jsonArray_update;
        Toast.makeText(Status_Check.this, "jsonArray"+jsonArray.length(), Toast.LENGTH_LONG).show();
        try
        {
            // initialized the array
            schedule_id=new String[jsonArray.length()];
            year = new String[jsonArray.length()];
            month = new String[jsonArray.length()];
            day = new String[jsonArray.length()];
            StartTime = new String[jsonArray.length()];
            Endtime = new String[jsonArray.length()];
            Hours = new String[jsonArray.length()];
            Employee_id = new String[jsonArray.length()];
            Event_id = new String[jsonArray.length()];


            //for loop execution to set the multiple data for particular user
            for(  L=0; L < jsonArray.length(); L++)
            {
                JSONObject jsonObject = jsonArray.getJSONObject(L);
                schedule_id[L]= jsonObject.getString("Schedule_id");
                year[L]= jsonObject.getString("Year");
                month[L]  = jsonObject.getString("Month");
                day[L]  = jsonObject.getString("Day");
                StartTime[L]  = jsonObject.getString("StartTime");
                Endtime[L]  = jsonObject.getString("Endtime");
                Hours[L]  = jsonObject.getString("Hours");
                Employee_id[L]  = jsonObject.getString("Employee_id");
                Event_id[L]  = jsonObject.getString("Event_id");
                final ContentValues event = new ContentValues();
                event.put(CalendarContract.Events.CALENDAR_ID, 1);
                event.put(CalendarContract.Events.TITLE, "WORKING SCHEDULE OF THE WEEK");
                event.put(CalendarContract.Events.DESCRIPTION, "selva");
                event.put(CalendarContract.Events.EVENT_LOCATION, "chennai");

                long startMillis = 0;
                long endMillis = 0;
                try
                {
                    //seperating the time into hh/mm/ss
                    String StartsTime = StartTime[L];
                    DateFormat sdf = new SimpleDateFormat("hh:mm aa");
                    Date date = null;
                    date = sdf.parse(StartsTime);
                    SimpleDateFormat sdfH = new SimpleDateFormat("hh");
                    Shours = sdfH.format(date);
                    SimpleDateFormat sdfM = new SimpleDateFormat("mm");
                    Sminutes = sdfM.format(date);
                    SimpleDateFormat sdfS = new SimpleDateFormat("ss");
                    Ssecond = sdfS.format(date);
                    SimpleDateFormat sdfA = new SimpleDateFormat("aa");
                    Sampm = sdfA.format(date);
                } catch (ParseException e)
                {
                    e.printStackTrace();
                }

                //check the given time is am/pm for start time
                if(Sampm.equals("AM")||Sampm.equals("am"))
                {
                    s=0;
                }
                if(Sampm.equals("PM")||Sampm.equals("pm"))
                {
                    s=1;
                }

                //setting the values for calender instance in integer format for start time
                Integer i = Integer.parseInt(year[L]);
                Integer j = Integer.parseInt(month[L]);
                Integer k = Integer.parseInt(day[L]);
                Integer l = Integer.parseInt(Shours);
                Integer m = Integer.parseInt(Sminutes);
                Integer n = Integer.parseInt(Ssecond);


                mo=j-1;

                //checking the month and setting them to correct month in calender

                int smonth=mo;
                int syear=i;
                int sdate=k;
                int shour=l;
                int sminute=m;
                int sseconds=n;
                int smilli=0;

                //setting the values for calender instance
                Calendar beginTime = Calendar.getInstance();
                beginTime.set(Calendar.DATE,sdate);
                beginTime.set(Calendar.HOUR, shour);
                beginTime.set(Calendar.MINUTE, sminute);
                beginTime.set(Calendar.SECOND, sseconds);
                beginTime.set(Calendar.MILLISECOND, smilli);
                beginTime.set(Calendar.MONTH, smonth);
                beginTime.set( Calendar.AM_PM,s);
                beginTime.set(Calendar.YEAR, syear);
                startMillis = beginTime.getTimeInMillis();

                //seperating the string time into hours,minutes,seconds,am/pm for end time
                try
                {
                    String StartsTime = Endtime[L];
                    DateFormat sdf = new SimpleDateFormat("hh:mm aa");
                    Date date = null;
                    date = sdf.parse(StartsTime);
                    SimpleDateFormat sdfH = new SimpleDateFormat("hh");
                    Ehours = sdfH.format(date);
                    SimpleDateFormat sdfM = new SimpleDateFormat("mm");
                    Eminutes = sdfM.format(date);
                    SimpleDateFormat sdfS = new SimpleDateFormat("ss");
                    Esecond = sdfS.format(date);
                    SimpleDateFormat sdfA = new SimpleDateFormat("aa");
                    Eampm = sdfA.format(date);
                    //check the given time is am/pm for start time
                    if(Eampm.equals("AM")||Eampm.equals("am"))
                    {
                        s=0;
                    }
                    if(Eampm.equals("PM")||Eampm.equals("pm"))
                    {
                        s=1;
                    }

                } catch (ParseException e)
                {
                    e.printStackTrace();
                }

                //setting the values for calender instance in integer format for start time
                Integer A = Integer.parseInt(Ehours);
                Integer B = Integer.parseInt(Eminutes);
                Integer C = Integer.parseInt(Esecond);
                int emonth=mo;
                int eyear=i;
                int edate=k;
                int ehour=A;
                int eminute=B;
                int eseconds=C;
                int emilli=0;

                //setting the values for calender instance
                Calendar endTime = Calendar.getInstance();
                endTime.set(Calendar.DATE,edate);
                endTime.set(Calendar.HOUR, ehour);
                endTime.set(Calendar.MINUTE, eminute);
                endTime.set(Calendar.SECOND, eseconds);
                endTime.set(Calendar.MILLISECOND, emilli);
                endTime.set(Calendar.MONTH, emonth);
                endTime.set(Calendar.YEAR, eyear);
                endTime.set(Calendar.AM_PM, s);
                endMillis = endTime.getTimeInMillis();

                //creating event for calendar for end time
                event.put(CalendarContract.Events.DTSTART, startMillis);
                event.put(CalendarContract.Events.DTEND, endMillis);
                event.put(CalendarContract.Events.ALL_DAY, 0);   // 0 for false, 1 for true
                event.put(CalendarContract.Events.HAS_ALARM, 1); // 0 for false, 1 for true
                String timeZone = TimeZone.getDefault().getID();
                event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone);

                //making connection with pre-installed calender



                Uri updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, Long.parseLong(Event_id[L]));
                int rows= getContentResolver().update(updateUri, event, null, null);


            }//end of for loop


            Toast.makeText(getApplicationContext(), "  Schedule Updated", Toast.LENGTH_SHORT).show();
        } catch (JSONException e) {e.printStackTrace();}

    }
}

任何人帮我解决这个问题。请!!

0 个答案:

没有答案