2013-05-22 3 views
0

Я новичок в разработке Android. Я использую PhoneGap для разработки Android. Я создаю плагин CalendarEvent и получаю следующую ошибку. Я не знаю, почему эта ошибка возникает.не удалось создать плагин cordova

 
05-21 22:39:12.171: W/dalvikvm(516): VFY: unable to resolve direct method 345: 
Landroid/webkit/WebView;. (Landroid/content/Context;Landroid/util/AttributeSet;IZ)V 

Это Javascript код:

window.createEvent = function(title, location, description, startDate, endDate) { 
    return cordova.exec(function(arg){}, function(error){}, 'CalendarPlugin', 'createEvent', 
      [title, location, description, startDate, endDate]); 
}; 

var title = "Test Event"; 
var location = "Nashville, TN"; 
var description = "Very interesting event."; 
var startDateTime = "2015-09-09T16:00:00-06:00"; // ISO 8601 date 
var endDateTime = "2015-09-09T18:00:00-06:00"; 

window.createEvent(title, location, description, startDateTime, endDateTime); 

И это код плагина:

package com.redobot.plugin; 

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

import org.apache.cordova.api.Plugin; 
import org.apache.cordova.api.PluginResult; 
import org.json.JSONArray; 
import org.json.JSONException; 

import android.content.Intent; 
import android.provider.CalendarContract.Events; 

public class CalendarPlugin extends Plugin { 
    final static String ISO8601DATEFORMAT = "yyyy-MM-dd'T'HH:mm:ssZ"; 

    @Override 
    public PluginResult execute(String action, JSONArray args, final String callbackId) { 
     if (action.equals("createEvent")) { 
      try { 
       this.createEvent(args.getString(0), args.getString(1), args.getString(2), args.getString(3), args.getString(4)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return new PluginResult(PluginResult.Status.OK, true); 
     } 
     return new PluginResult(PluginResult.Status.OK, false); 
    } 

    private void createEvent(String title, String location, String description, String startDate, String endDate){ 
     Calendar calendarStart = CalendarPlugin.getCalendarFromISO(startDate); 
     Calendar calendarEnd = CalendarPlugin.getCalendarFromISO(endDate); 

     Intent intent = new Intent(Intent.ACTION_EDIT); 
     intent.setType("vnd.android.cursor.item/event"); 
     intent.putExtra(Events.TITLE, title); 
     intent.putExtra(Events.EVENT_LOCATION, location); 
     intent.putExtra(Events.DESCRIPTION, description); 
     intent.putExtra("beginTime", calendarStart.getTimeInMillis()); 
     intent.putExtra("endTime", calendarEnd.getTimeInMillis()); 

     this.cordova.getActivity().startActivity(intent); 
    } 

    public static Calendar getCalendarFromISO(String dateString) { 
     dateString = dateString.trim().replaceAll(":00$", "00"); // Changing format for SimpleDateFormat 

     Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); 
     SimpleDateFormat dateformat = new SimpleDateFormat(ISO8601DATEFORMAT, Locale.getDefault()); 

     try { 
      Date date = dateformat.parse(dateString); 
      calendar.setTime(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return calendar; 
    } 
} 

Пожалуйста, скажите, где я не прав. Я искал, но не получал никакой полезной помощи.

ответ

0

Я протестировал этот код с устройством Nexus 7 под управлением Android 4.2.2, создав приложение Cordova 2.6 и выполнив его, и все сработало нормально. Я должен был добавить это в свой файл config.xml: <plugin name="CalendarPlugin" value="com.redobot.plugin.CalendarPlugin" /> и добавить код внутри onDeviceReady(), но, кроме этого, проблем нет.

Смежные вопросы