1

我正在我的应用程序中实现应用程序快捷方式。当我尝试打开我的快捷方式时,它打开得很好,但是在搜索功能期间它崩溃了崩溃报告显示 SQLiteexception 因为我正在从数据库中获取数据所以我的问题是应用程序快捷方式是否应该独立于其他文件?

    01-28 15:25:51.784 12166-12166/ E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: , PID: 12166
                                                          android.database.sqlite.SQLiteException: no such table: temp (code 1): , while compiling: SELECT empID, name, firstName, lastName, email, mobile, designation, location, extension FROM temp WHERE name LIKE ?
                                                              at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                              at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                                                              at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                                                              at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                              at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                              at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                                                              at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                                                              at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
                                                              at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1165)
                                                              at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
                                                              at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1204)
                                                              at com.thbs.database.EmployeeDbAdapter.search(EmployeeDbAdapter.java:194)
                                                              at com.thbs.activity.SearchActivity$3.onTextChanged(SearchActivity.java:306)
                                                              at android.widget.TextView.sendOnTextChanged(TextView.java:8187)
                                                              at android.widget.TextView.handleTextChanged(TextView.java:8249)
                                                              at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10371)
                                                              at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1208)
                                                              at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)
                                                              at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:509)
                                                              at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
                                                              at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:844)
                                                              at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:198)
                                                              at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
                                                              at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:353)
                                                              at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:93)
                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                              at android.os.Looper.loop(Looper.java:154)
                                                              at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

通过应用程序打开时它工作正常

我创建应用快捷方式的代码是

if (Build.VERSION.SDK_INT >= 25) {
        ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
        ShortcutInfo leaveShortcut = new ShortcutInfo.Builder(this, "shortcut_leave")
                .setShortLabel("Leave Manager")
                .setLongLabel("Leave Manager")
                .setIcon(Icon.createWithResource(this, R.drawable.app_icon))
                .setIntents(
                        new Intent[]{
                                new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, LeaveManagerActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),
                        })
                .build();
        ShortcutInfo searchShortcut = new ShortcutInfo.Builder(this, "shortcut_search")
                .setShortLabel("Employee search")
                .setLongLabel("Employee search")
                .setIcon(Icon.createWithResource(this, R.drawable.app_icon))
                .setIntents(
                        new Intent[]{
                                new Intent(Intent.ACTION_MAIN, Uri.EMPTY, this, SearchActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK),
                        })
                .build();


        shortcutManager.setDynamicShortcuts(Arrays.asList(leaveShortcut, searchShortcut));
    }
4

1 回答 1

0

很可能,您的问题与应用程序快捷方式无关。作为一个实验,将<intent-filter>for MAIN/添加LAUNCHER到您的SearchActivity,因此您的应用程序现在有两个启动器图标。SearchActivity直接从主屏幕启动。最有可能的是,您将遇到同样的崩溃。

我的猜测是SearchActivity——也许LeaveManagerActivity——假设用户总是经历你的启动器活动,这样你的数据库就处于某种状态。情况并非总是如此。不仅应用程序快捷方式可能会导致这种情况,其他事情也会如此。例如:

  • 用户通过启动器活动进入您的应用程序
  • 用户做某事要去SearchActivity
  • 用户按下 HOME
  • 10 分钟过去了,在此期间 Android 会终止您的进程以释放系统 RAM
  • 用户返回您的应用程序(主屏幕启动器图标、概览屏幕/最近任务列表等)

此时,Android 将创建一个实例SearchActivity并将用户发送到那里,因为用户最近才参与此任务。与您的应用快捷方式场景一样,用户可以在SearchActivity当前进程的生命周期内无需访问启动器活动即可结束。

活动要么需要独立于所有其他活动,要么需要了解它们的依赖关系并能够在不满足这些依赖关系时应对(例如,将用户重定向回启动器活动)。

于 2016-12-02T12:27:59.587 回答