Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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 - Fatal编程技术网

Android从数据库中提取数据

Android从数据库中提取数据,android,Android,我正在尝试提取数据库的历史记录。。。。然而,它从不拉任何东西。。。有人知道我做错了什么吗 以下是内容提供商: package com.projectcaruso.naturalfamilyplaning; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor;

我正在尝试提取数据库的历史记录。。。。然而,它从不拉任何东西。。。有人知道我做错了什么吗

以下是内容提供商:

package com.projectcaruso.naturalfamilyplaning;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;

public class StatusProvider extends ContentProvider {
  private static final String TAG = StatusProvider.class.getSimpleName();

  public static final Uri CONTENT_URI = Uri.parse("content://com.projectcaruso.naturalfamilyplaning.statusprovider");
  public static final String SINGLE_RECORD_MIME_TYPE = "vnd.android.cursor.item/vnd.projectcaruso.naturalfamilyplaning.status";
  public static final String MULTIPLE_RECORDS_MIME_TYPE = "vnd.android.cursor.dir/vnd.projectcaruso.naturalfamilyplaning.status";

  StatusData statusData;

  @Override
  public String getType(Uri uri) {
    return this.getId(uri) < 0 ? MULTIPLE_RECORDS_MIME_TYPE
        : SINGLE_RECORD_MIME_TYPE;
  }

  @Override
  public boolean onCreate() {
    statusData = new StatusData(getContext());
    return true;
  }

  @Override
  public Uri insert(Uri uri, ContentValues values) {
    SQLiteDatabase db = statusData.dbHelper.getWritableDatabase();
    try {
      long id = db.insertOrThrow(StatusData.DATABASE_TABLE, null, values);
      if (id == -1) {
        throw new RuntimeException(String.format(
            "%s: Failed to insert [%s] to [%s] for unknown reasons.", TAG,
            values, uri));
      } else {
        Uri newUri = ContentUris.withAppendedId(uri, id);
        // Notify the Context's ContentResolver of the change
        getContext().getContentResolver().notifyChange(newUri, null);
        return newUri;
      }
    } finally {
      db.close();
    }
  }

  @Override
  public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {
    long id = this.getId(uri);
    int count;
    SQLiteDatabase db = statusData.dbHelper.getWritableDatabase();
    try {
      if (id < 0) {
        count = db.update(StatusData.DATABASE_TABLE, values, selection, selectionArgs);
      } else {
        count = db.update(StatusData.DATABASE_TABLE, values, StatusData.KEY_ROWID + "=" + id,
            null);
      }
    } finally {
      db.close();
    }

    // Notify the Context's ContentResolver of the change
    getContext().getContentResolver().notifyChange(uri, null);

    return count;
  }

  @Override
  public int delete(Uri uri, String selection, String[] selectionArgs) {
    long id = this.getId(uri);
    int count;
    SQLiteDatabase db = statusData.dbHelper.getWritableDatabase();
    try {
      if (id < 0) {
        count = db.delete(StatusData.DATABASE_TABLE, selection, selectionArgs);
      } else {
        count = db.delete(StatusData.DATABASE_TABLE, StatusData.KEY_ROWID + "=" + id, null);
      }
    } finally {
      db.close();
    }

    // Notify the Context's ContentResolver of the change
    getContext().getContentResolver().notifyChange(uri, null);

    return count;
  }

  @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
    long id = this.getId(uri);
    SQLiteDatabase db = statusData.dbHelper.getReadableDatabase();
    Log.d(TAG, "querying");

    Cursor c;

    if (id < 0) {
      c = db.query(StatusData.DATABASE_TABLE, projection, selection, selectionArgs,
          null, null, sortOrder);
    } else {
      c = db.query(StatusData.DATABASE_TABLE, projection, StatusData.KEY_ROWID + "=" + id,
          null, null, null, null);
    }

    // Notify the context's ContentResolver if the cursor result set changes
    c.setNotificationUri(getContext().getContentResolver(), uri);

    return c;
  }

  // Helper method to extract ID from Uri
  private long getId(Uri uri) {
    String lastPathSegment = uri.getLastPathSegment();
    if (lastPathSegment != null) {
      try {
        return Long.parseLong(lastPathSegment);
      } catch (NumberFormatException e) {
        // at least we tried
      }
    }
    return -1;
  }
}
添加到清单中:

<application>
 ...
<provider android:name=".StatusProvider" android:authorities="com.projectcaruso.naturalfamilyplaning"/>
</application>
你的密码有错误

public static final Uri CONTENT_URI = Uri
        .parse("content://com.projectcaruso.naturalfamilyplaning.statusprovider");
应该是

public static final Uri CONTENT_URI = Uri
        .parse("content://com.projectcaruso.naturalfamilyplaning/statusprovider");

uri解析器通过“/”而不是点来解析元素。因此,无法找到提供程序,因为在您的清单中没有声明权限“com.projectcaruso.naturalfamilyplanning.statusprovider”。

我认为它不会显示太多,但我可以……您能准确解释它的错误所在吗?你有错误吗?一个空的结果?还有其他问题吗?null result set表示找不到com.projectcaruso.naturalfamilyplanning.statusprovider的提供程序信息。很抱歉花了这么长时间,我可以先解决一些问题。我已经通过命令行测试了数据库,当数据库中有结果时,它现在仍然显示结果。。。。请参阅更新的logcat。好吧,现在似乎是setuplist()中的一个输入错误:您正在填充游标c,但使用游标。您的IDE支持运行时调试吗?我不知道IDE是否支持运行时调试。我怎么知道或者能够使用它呢?顺便说一句,我修正了打字错误,现在它正在努力拉记录的数量,但只在行中显示“中文本”,所以我想我只是在某处有另一个问题。。。去寻找它;)我认为这是由另一行引起的。xml与历史行我想使用IntelliJ Idea和Eclipse肯定支持调试。使用它是必须的。查看IDE的教程。。
public class StatusData {

    //Database information
    private static final String DATABASE_NAME = "NFP";
    private static final int DATABASE_VERSION = 1;

    //Table Information
    static final String DATABASE_TABLE = "charting";
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "username";
    public static final String KEY_CHARTING_DATE = "Date";
    public static final String KEY_CHARTING_TEMPERATURE = "temperature";
    public static final String KEY_CHARTING_STAMPS = "Stamps";
    public static final String KEY_CHARTING_FERTILE = "Fertile";
    public static final String KEY_CHARTING_NOTES = "Notes";
    public static final String KEY_CHARTING_PROC = "Proc";

    private static final String GET_ALL_ORDER_BY = KEY_CHARTING_DATE + " DESC";
    private static final String[] MAX_CREATED_AT_COLUMNS = { "max(" + StatusData.KEY_CHARTING_DATE + ")" };
    private static final String[] DB_TEXT_COLUMNS = { KEY_CHARTING_NOTES };

    //called once
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE table " + DATABASE_TABLE + " (" +
                                    KEY_ROWID + " INTEGER  primary key AUTOINCREMENT, " +
                                    KEY_CHARTING_DATE + " TEXT NOT NULL, " +
                                    KEY_NAME + " TEXT, " +
                                    KEY_CHARTING_TEMPERATURE + " INTEGER, " +
                                    KEY_CHARTING_STAMPS  + " INTEGER, " +
                                    KEY_CHARTING_FERTILE + " TEXT, " +
                                    KEY_CHARTING_NOTES + " TEXT, " +
                                    KEY_CHARTING_PROC +  " ); "
                );
    }

    final DbHelper dbHelper;

    public StatusData(Context context) {
          this.dbHelper = new DbHelper(context);
    }

    public void close() {
      this.dbHelper.close();
    }

    public void insertOrIgnore(ContentValues values) {
      SQLiteDatabase db = this.dbHelper.getWritableDatabase();
      try {
        db.insertWithOnConflict(DATABASE_TABLE, null, values,
            SQLiteDatabase.CONFLICT_IGNORE);
      } finally {
        db.close();
      }
    }

    /**
     *
     * @return Cursor where the columns are going to be id, created_at, user, txt
     */
    public Cursor getStatusUpdates() {
      SQLiteDatabase db = this.dbHelper.getReadableDatabase();
      return db.query(DATABASE_TABLE, null, null, null, null, null, GET_ALL_ORDER_BY);
    }

    public long getLatestStatusCreatedAtTime() {
      SQLiteDatabase db = this.dbHelper.getReadableDatabase();
      try {
        Cursor cursor = db.query(DATABASE_TABLE, MAX_CREATED_AT_COLUMNS, null, null, null,
            null, null);
        try {
          return cursor.moveToNext() ? cursor.getLong(0) : Long.MIN_VALUE;
        } finally {
          cursor.close();
        }
      } finally {
        db.close();
      }
    }

    public String getStatusTextById(long id) {
      SQLiteDatabase db = this.dbHelper.getReadableDatabase();
      try {
        Cursor cursor = db.query(DATABASE_TABLE, DB_TEXT_COLUMNS, KEY_ROWID + "=" + id, null,
            null, null, null);
        try {
          return cursor.moveToNext() ? cursor.getString(0) : null;
        } finally {
          cursor.close();
        }
      } finally {
        db.close();
      }
    }

    /**
     * Deletes ALL the data
     */
    public void delete() {
      // Open Database
      SQLiteDatabase db = dbHelper.getWritableDatabase();

      // Delete the data
      db.delete(DATABASE_TABLE, null, null);

      // Close Database
      db.close();
    }
}
<application>
 ...
<provider android:name=".StatusProvider" android:authorities="com.projectcaruso.naturalfamilyplaning"/>
</application>
    05-16 21:41:20.514: E/ActivityThread(7147): Failed to find provider info for com.projectcaruso.naturalfamilyplaning.statusprovider
    05-16 21:41:20.514: V/SlidingMenu(7147): changing layerType. hardware? true
    05-16 21:41:20.584: D/dalvikvm(7147): GC_FOR_ALLOC freed 2595K, 8% free 3305K/3564K, paused 33ms, total 42ms
    05-16 21:41:20.594: I/dalvikvm-heap(7147): Grow heap (frag case) to 4.476MB for 1188736-byte allocation
    05-16 21:41:20.694: D/dalvikvm(7147): GC_CONCURRENT freed 1K, 6% free 4464K/4728K, paused 73ms+5ms, total 105ms
    05-16 21:41:20.694: D/dalvikvm(7147): WAIT_FOR_CONCURRENT_GC blocked 19ms
    05-16 21:41:20.744: D/dalvikvm(7147): GC_FOR_ALLOC freed <1K, 6% free 4464K/4728K, paused 30ms, total 30ms
    05-16 21:41:20.754: I/dalvikvm-heap(7147): Grow heap (frag case) to 5.870MB for 1463056-byte allocation
    05-16 21:41:20.864: D/dalvikvm(7147): GC_CONCURRENT freed 0K, 5% free 5893K/6160K, paused 76ms+5ms, total 107ms
    05-16 21:41:20.864: D/dalvikvm(7147): WAIT_FOR_CONCURRENT_GC blocked 18ms
    05-16 21:41:20.894: I/Choreographer(7147): Skipped 47 frames!  The application may be doing too much work on its main thread.
    05-16 21:41:20.937: V/CustomViewBehind(7147): behind INVISIBLE
    05-16 21:41:21.025: V/SlidingMenu(7147): changing layerType. hardware? false
    05-17 13:20:41.013: D/dalvikvm(21373): GC_CONCURRENT freed 0K, 12% free 6199K/7004K, paused 73ms+6ms, total 111ms
    05-17 13:20:41.013: D/dalvikvm(21373): WAIT_FOR_CONCURRENT_GC blocked 24ms
    05-17 13:20:41.054: V/SlidingMenu(21373): changing layerType. hardware? true
    05-17 13:20:41.054: V/SlidingMenu(21373): changing layerType. hardware? false
    05-17 13:20:41.073: I/Choreographer(21373): Skipped 54 frames!  The application may be doing too much work on its main thread.
    05-17 13:20:41.844: D/StatusProvider(21373): querying
    05-17 13:20:41.855: I/Choreographer(21373): Skipped 39 frames!  The application may be doing too much work on its main thread.
    05-17 13:20:41.924: V/SlidingMenu(21373): changing layerType. hardware? true
    05-17 13:20:41.984: W/CursorWrapperInner(21373): Cursor finalized without prior close()
    05-17 13:20:41.984: D/dalvikvm(21373): GC_FOR_ALLOC freed 2601K, 49% free 3627K/7004K, paused 35ms, total 43ms
    05-17 13:20:41.994: I/dalvikvm-heap(21373): Grow heap (frag case) to 4.791MB for 1188736-byte allocation
    05-17 13:20:42.104: D/dalvikvm(21373): GC_CONCURRENT freed 23K, 32% free 4765K/7004K, paused 73ms+5ms, total 113ms
    05-17 13:20:42.104: D/dalvikvm(21373): WAIT_FOR_CONCURRENT_GC blocked 35ms
    05-17 13:20:42.154: D/dalvikvm(21373): GC_FOR_ALLOC freed 1K, 32% free 4764K/7004K, paused 36ms, total 36ms
    05-17 13:20:42.154: I/dalvikvm-heap(21373): Grow heap (frag case) to 6.163MB for 1463056-byte allocation
    05-17 13:20:42.265: D/dalvikvm(21373): GC_CONCURRENT freed 0K, 12% free 6193K/7004K, paused 74ms+5ms, total 110ms
    05-17 13:20:42.265: D/dalvikvm(21373): WAIT_FOR_CONCURRENT_GC blocked 29ms
    05-17 13:20:42.294: V/SlidingMenu(21373): changing layerType. hardware? true
    05-17 13:20:42.294: I/Choreographer(21373): Skipped 45 frames!  The application may be doing too much work on its main thread.
    05-17 13:20:42.335: V/CustomViewBehind(21373): behind INVISIBLE
    05-17 13:20:42.424: V/SlidingMenu(21373): changing layerType. hardware? false
public static final Uri CONTENT_URI = Uri
        .parse("content://com.projectcaruso.naturalfamilyplaning.statusprovider");
public static final Uri CONTENT_URI = Uri
        .parse("content://com.projectcaruso.naturalfamilyplaning/statusprovider");