我对导致此错误的原因感到困惑,因为我已确保正在关闭我的数据库适配器(至少我认为我是).这就是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
在我的应用程序中,我创建了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中是新手,我在处理以下内容时遇到问题:
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)
我试图将光标内的数据提取到一个数组.有人可以帮我实现.
我正在尝试确定用户日历中是否存在给定事件,其中相等性由所有匹配的开始时间,结束时间,标题和位置确定.
该文件说:
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)
数字是开始日期和结束日期,以毫秒为单位.
我尝试使用db表的数据填充建议列表.但是我得到了StaleDataException.它会随机抛出,但总是在我将一个角色输入textview时.
这是我的代码:
CursorLoader扩展了Cristian的SimpleCursorLoader类
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
数据库中有数据(准确地说是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) 我正在尝试使用用户ID从jobs表和作业名中记录id
String select = "SELECT jobname FROM " + TABLE_JOBS+ "where userid =" +myid;
Run Code Online (Sandbox Code Playgroud) 我创建一个应用程序来读取、更新、删除联系人详细信息。这是更新联系人姓名和电话号码的问题。有人可以帮助我吗?我该怎么做。我正在使用以下代码,但它不起作用。
@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) 我必须执行查询并将结果存储在列表中,我使用的函数如下:
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) 我有一个可以在下面运行的代码。但我无法限制它。我只想获取最近 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)