Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android日历内容提供商查询持续崩溃_Android_Android Activity_Cursor_Android Contentprovider - Fatal编程技术网

Android日历内容提供商查询持续崩溃

Android日历内容提供商查询持续崩溃,android,android-activity,cursor,android-contentprovider,Android,Android Activity,Cursor,Android Contentprovider,我有一个PhoneGap应用程序,我想通过内容提供商访问Android日历。我的PhoneGap JavaScript函数可以成功地调用并返回Java函数,但我就是无法让内容提供者调用正常工作。该应用程序编译时没有问题并运行,但只要我调用相关的内容提供商函数,它就会挂起一段时间并崩溃。下面是我找到的内容提供程序函数的修改版本: 包com.george.myapp import java.util.Calendar; import java.util.Date; import java.util.

我有一个PhoneGap应用程序,我想通过内容提供商访问Android日历。我的PhoneGap JavaScript函数可以成功地调用并返回Java函数,但我就是无法让内容提供者调用正常工作。该应用程序编译时没有问题并运行,但只要我调用相关的内容提供商函数,它就会挂起一段时间并崩溃。下面是我找到的内容提供程序函数的修改版本: 包com.george.myapp

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class EventsInCalender extends Activity {
    //@Override
    public void onCreate() {
    //public void onCreate(Bundle savedInstanceState) {
        //super.onCreate(savedInstanceState);
        //setContentView(R.layout.event);       
    }

    public String getCal()
    {
        String cal_name = "createdstring";
        Cursor cursor = getContentResolver().query(Uri.parse("content://com.android.calendar/calendars"),new String[] { "_id", "displayName" }, "selected=1", null, null);
        if (cursor != null && cursor.moveToFirst()) {
             String[] calNames = new String[cursor.getCount()];
             int[] calIds = new int[cursor.getCount()];
             for (int i = 0; i < calNames.length; i++) {
                  // retrieve the calendar names and ids                 
                  calIds[i] = cursor.getInt(0);
                  calNames[i] = cursor.getString(1);
                  cursor.moveToNext();
              }
              cal_name = calNames[0];
              cursor.close();
        }
        return cal_name;
    }
}
import java.util.Calendar;
导入java.util.Date;
导入java.util.GregorianCalendar;
导入java.util.TimeZone;
导入android.app.Activity;
导入android.content.ContentValues;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
公共类事件日历扩展活动{
//@凌驾
public void onCreate(){
//创建时的公共void(Bundle savedInstanceState){
//super.onCreate(savedInstanceState);
//setContentView(R.layout.event);
}
公共字符串getCal()
{
字符串cal_name=“createdstring”;
Cursor Cursor=getContentResolver().query(Uri.parse(“content://com.android.calendar/calendars),新字符串[]{“\u id”,“displayName”},“selected=1”,null,null);
if(cursor!=null&&cursor.moveToFirst()){
String[]calNames=新字符串[cursor.getCount()];
int[]calIds=newint[cursor.getCount()];
对于(int i=0;i
我将遵循以下官方文档处理Android中的日历内容提供商:

  • 查询日历
  • 选择日历
  • 查询事件

  • 看起来上下文是问题所在,需要来自主活动,认为Android只授予该活动的权限

    您必须将权限READ_CALENDAR添加到AndroidManifest.xml文件中。

    谢谢,我已经讨论过了,但我看到使用sdk Android:minSdkVersion=“14”我知道有一些应用程序可以访问旧sdk版本上的日历,有什么建议吗?谷歌不推荐使用API版本14下的日历,因此,我不明白开发人员为什么会选择使用这些黑客。我想它们只会带来更多的问题和头痛。那些在API版本14之前访问日历的应用程序eit她手动读取本地数据库以获取日历事件(hacky),或者可能使用Google的日历Web服务