标签: android-cursor

IllegalStateException:数据库已关闭(使用ViewPager)

我对导致此错误的原因感到困惑,因为我已确保正在关闭我的数据库适配器(至少我认为我是).这就是LogCat的说法(所有这些标签都是AndroidRuntime):

致命异常:主java.lang.IllegalStateException:数据库/data/data/com.acedit.assignamo/databases/data.db(conn#0)已在android.database.sqlite.SQLiteDatabase.verifyDbIsOpen关闭(SQLiteDatabase.java:2082 )在android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:413)的android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:400)android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java: 79)在Android.database.AbstractCursor.moveToPosition(AbstractCursor.java:178)的android.database.sqlite.SQLiteCursor.onMove(SQLiteCursor.java:147)的android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) )在android.view.View.dispatchSaveInstanceState(View.java:9868)的android.widget.AbsListView.onSaveInstanceState(AbsListView.java:1569)上的android.support.v4.widget.CursorAdapter.getItemId(CursorAdapter.java:225)在Android.widget.AdapterView.dispatchSaveInstanceState(Adapt)的android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2310)erView.java:770)在android.view.View.View.saveInstanceState(ViewGroup.java:2296)的android.view.View.save.Stava上的android.view.View.SaveHsty状态(View.java:9851),android.support.v4.app.FragmentManagerImpl.saveFragmentViewState(FragmentManager)的.java:1561)在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:962)在android.support.v4.app.FragmentManagerImpl.detachFragment(FragmentManager.java:1233)在android.support.v4. app.BackStackRecord.run(BackStackRecord.java:620)在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)的android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)在android.support.v4.view.ViewPager.populate(ViewPager.java:895)在android.support.v4.view.ViewPager.populate (ViewPager.java:772)在android.support.v4.view.V上的android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)iewPager.computeScroll(ViewPager.java:1422)在android.view.View.getDisplayList(View.java:10406)在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)在android.view.View.getDisplayList(查看的.java:10380)在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)在android.view.View.getDisplayList(View.java:10380)在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597)在Android.view上的android.view.View.get.get.目录(View.java:10380)的android.view.View.get.getDisplayList(ViewGroup.java:2597)上的android.view.View.getDisplayList(View.java:10380).在Android.view.ViewRootImpl.handleMessage的android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634)的android.view.ViewRootImpl.draw(ViewRootImpl.java:1910)上的HardwareRenderer $ GlRenderer.draw(HardwareRenderer.java:875) (ViewRootImpl.java:2442)android.app.Handler.dispatchMessage(Handler.java:99)android.app.Looper.loop(Looper.java:137)android.app.ActivityThread.main(Activi)tyThread.java:4575)在java.lang.reflect.Method.invokeNative(本机方法)在java.lang.reflect.Method.invoke(Method.java:511)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.在dalvik.system.NativeStart.main(本机方法)的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)上运行(ZygoteInit.java:786)

我的代码:

public Cursor fetchIncompleteAssignments(Short course) {
    DbAdapter adapter = new DbAdapter(context, null, Values.ASSIGNMENT_TABLE);
    adapter.open();

    Cursor r;
    if (course == null) // Fetching from all courses
        r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE);
    else
        r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_COURSE + "=" + course
            + " AND " + Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE);
    adapter.close();
    return r;
}

// Part of DbAdapter:
public DbAdapter open() throws SQLException { …
Run Code Online (Sandbox Code Playgroud)

android android-cursor android-viewpager android-sqlite android-cursoradapter

5
推荐指数
1
解决办法
4823
查看次数

在Android中检索特定文件夹的图像

在我的应用程序中,我创建了GridView显示特定文件夹中的图像.问题是我想从DCIM/100ANDRO文件夹中检索图像.应该通过查询传递哪种类型的参数来检索此类图像?请给我解决方案.

我正在使用以下代码来检索哪些代码可以让我拍摄相机拍摄的图像

        //importing only camera images and storing in ArrayList of class Images     type
        String[] projection = {
        MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
        MediaStore.Images.Media.DISPLAY_NAME
        };
        String selection = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " = ?";
        String[] selectionArgs = new String[] {
            "Camera"
        };

        Cursor mImageCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null ); 

        if (mImageCursor != null)
        {

            mImageCursor.moveToFirst();

            for (int i = 0; i < mImageCursor.getCount(); i++)
            {
                Images im=new Images();
                eachImageView=new ImageView(this);
                int imageId = mImageCursor.getInt((mImageCursor.getColumnIndex( MediaStore.Images.Media._ID)));
                Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), 
                    imageId, …
Run Code Online (Sandbox Code Playgroud)

android android-cursor android-query

5
推荐指数
2
解决办法
1万
查看次数

将游标数据放入数组中

在Android中是新手,我在处理以下内容时遇到问题:

public String[] getContacts(){
    Cursor cursor = getReadableDatabase().rawQuery("SELECT name FROM contacts", null);
    String [] names = {""};
    for(int i = 0; i < cursor.getCount(); i ++){
            names[i] = cursor.getString(i);
    }
    cursor.close();
    return names;
}
Run Code Online (Sandbox Code Playgroud)

以下给出了以下错误:

09-18 10:07:38.616: E/AndroidRuntime(28165): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sqllitetrial/com.example.sqllitetrial.InsideDB}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5
Run Code Online (Sandbox Code Playgroud)

我试图将光标内的数据提取到一个数组.有人可以帮我实现.

android android-cursor android-sqlite

5
推荐指数
2
解决办法
2万
查看次数

CalendarContract.Instances.query()searchQuery

我正在尝试确定用户日历中是否存在给定事件,其中相等性由所有匹配的开始时间,结束时间,标题和位置确定.

文件说:

public static final Cursor query (ContentResolver cr, String[] projection, long begin, long end, String searchQuery)
Run Code Online (Sandbox Code Playgroud)

searchQuery的位置是:

searchQuery A string of space separated search terms. Segments enclosed by double quotes will be treated as a single term.
Run Code Online (Sandbox Code Playgroud)

我的代码大致是这样的:

long startTime = eventStartTime;
long endTime = eventEndTime;

public static final String[] EVENT_INSTANCE_PROJECTION = new String[] {
    Instances._ID,
    Instances.BEGIN,
    Instances.END,
    Instances.EVENT_ID,
    Instances.TITLE,
    Instances.EVENT_LOCATION
};

Cursor cursor = Instances.query(activity.getContentResolver(), EVENT_INSTANCE_PROJECTION, startTime, endTime, queryString);
Run Code Online (Sandbox Code Playgroud)

如果没有queryString,则返回该时隙中的事件.queryString应该是什么?特别是,如何使用此调用仅返回具有给定标题的该时间范围内的事件,即WHERE Instances.TITLE ='EventTitle'.或者这甚至是正确的使用方式来做到这一点?我对这个命令所期望的格式感到困惑.

编辑

看起来查询只是追加到路径,所以一个例子是:

content://com.android.calendar/instances/search/1402678800000/1402704000000/
Run Code Online (Sandbox Code Playgroud)

数字是开始日期和结束日期,以毫秒为单位.

mysql android android-intent android-cursor

5
推荐指数
0
解决办法
795
查看次数

使用CursorLoader和SimpleCursorAdapter的AutoCompleteTextView

我尝试使用db表的数据填充建议列表.但是我得到了StaleDataException.它会随机抛出,但总是在我将一个角色输入textview时.

这是我的代码:

CursorLoader扩展了CristianSimpleCursorLoader

public class TagCursorLoader extends SimpleCursorLoader {

    private String mSelection;
    private TagDbLoader mDbLoader;

    public TagCursorLoader(Context context, TagDbLoader dBLoader, String selection) {
        super(context);
        this.mDbLoader = dBLoader;
        this.mSelection = selection;
    }

    @Override
    public Cursor loadInBackground() {
        return mDbLoader.fetchContainingString(mSelection);
    }

}
Run Code Online (Sandbox Code Playgroud)

Loader回调:

public class TagCursorLoaderCallback implements LoaderCallbacks<Cursor>, CursorToStringConverter {

    private Context mContext;
    private TagDbLoader mdDbLoader;
    private SimpleCursorAdapter mAdapter;
    private String mSelection;

    public TagCursorLoaderCallback(Context context, TagDbLoader dBLoader, SimpleCursorAdapter adapter) {
        this.mContext = context;
        this.mdDbLoader = dBLoader; …
Run Code Online (Sandbox Code Playgroud)

android simplecursoradapter android-cursor android-sqlite android-cursoradapter

4
推荐指数
1
解决办法
3186
查看次数

索引0在SQLITE DB中请求大小为0的错误

数据库中有数据(准确地说是2行),每个数据都有信息.

以下是DBADAPTER中的代码(重要的,不是全部):

// Field Names:
    public static final String KEY_ROWID = "_id";
    public static final String KEY_DEVICE = "device";
    public static final String KEY_TYPE = "type";
    public static final String KEY_DEVID = "devid";

    public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_DEVICE, KEY_TYPE, KEY_DEVID};
    public static final String[] DEVID_KEY = new String[] {KEY_DEVID};

    // Column Numbers for each Field Name:
    public static final int COL_ROWID = 0;
    public static final int COL_DEVICE = 1;
    public static final int COL_TYPE …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-cursor

4
推荐指数
2
解决办法
1074
查看次数

Android - SQLiteException:near"=":语法错误(代码1)

我正在尝试使用用户ID从jobs表和作业名中记录id

String select = "SELECT jobname FROM " + TABLE_JOBS+ "where userid =" +myid;
Run Code Online (Sandbox Code Playgroud)

java sql sqlite android android-cursor

4
推荐指数
1
解决办法
132
查看次数

以编程方式更新 Android 中的联系人姓名和电话号码

我创建一个应用程序来读取、更新、删除联系人详细信息。这是更新联系人姓名和电话号码的问题。有人可以帮助我吗?我该怎么做。我正在使用以下代码,但它不起作用。

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    final View view = inflater.inflate(R.layout.fragment_fragment_edit, container, false);

    textView = (TextView) view.findViewById(R.id.tvnew1);

    imageView = (ImageView) view.findViewById(R.id.newim1);
    save = (Button) view.findViewById(R.id.savebtn1);

    fName = (EditText) view.findViewById(R.id.firstname1);
    lName = (EditText) view.findViewById(R.id.lastname1);
    pNumber = (EditText) view.findViewById(R.id.pnumber1);

    String conName = getArguments().getString("name");
    String conNumber = getArguments().getString("number");
    int conId = getArguments().getInt("pos");

    Log.e("a", "name is : " + conName);
    Log.e("a", "number is : " + conNumber);
    Log.e("a", "id is :" + conId);

    fName.setText(conName);
    pNumber.setText(conNumber);

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override …
Run Code Online (Sandbox Code Playgroud)

android contacts android-contacts android-cursor

4
推荐指数
1
解决办法
1万
查看次数

SQLite CursorWindow 限制 - 如何避免崩溃

我必须执行查询并将结果存储在列表中,我使用的函数如下:

List<SpoolInDB> getSpoolInRecords(String label, boolean getLastInserted) {
    List<SpoolInDB> spoolInList = new ArrayList<>();
    try {
        if (mdb == null)
            mdb = mdbHelper.getWritableDatabase();

        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables(TABLE_SPOOLIN);

        Cursor c = qb.query(mdb, null, " label='" + label + "'", null, null, null, " dateins " + (getLastInserted ? "desc" : "asc"));
        if (c != null) {
            c.moveToFirst();
            if (c.getCount() > 0) {
                int ndxid = c.getColumnIndex("id");
                int ndxserverID = c.getColumnIndex("serverID");
                int ndxlabel = c.getColumnIndex("label");
                int ndxvalue = c.getColumnIndex("value");
                int ndxpriority = …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-cursor

4
推荐指数
1
解决办法
3771
查看次数

如何在 Android Studio 中获取最新的通话记录?

我有一个可以在下面运行的代码。但我无法限制它。我只想获取最近 20 条通话记录。但这就是我查看所有时间搜索日志的方式。

应该只是最后的通话记录,我只需要看20条就可以了。任何帮助,我将不胜感激。

我的守则;

private void getCallLogs() {

        ContentResolver cr = getBaseContext().getContentResolver();
        Cursor c = cr.query(CallLog.Calls.CONTENT_URI, null, null, null, null);
        int totalCall = 1;
        if (c != null) {
            totalCall = c.getCount();
            if (c.moveToFirst()) {
                for (int j = 0; j < totalCall; j++) {

                    String callDate = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DATE));
                    String phNumber = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                    String callDuration = c.getString(c.getColumnIndexOrThrow(CallLog.Calls.DURATION));
                    Date dateFormat= new Date(Long.valueOf(callDate));
                    String callDayTimes = String.valueOf(dateFormat);
                    String direction = null;

                    switch (Integer.parseInt(c.getString(c.getColumnIndexOrThrow(CallLog.Calls.TYPE)))) {
                        case Telephony.Sms.MESSAGE_TYPE_INBOX:
                            direction = "OUTGOING";
                            break;
                        case …
Run Code Online (Sandbox Code Playgroud)

android calllog telephonymanager android-cursor

4
推荐指数
1
解决办法
8394
查看次数