GVKun编程网logo

Android应用程序中预加载的数据库损坏问题(android应用程序中预加载的数据库损坏问题怎么解决)

22

在本文中,您将会了解到关于Android应用程序中预加载的数据库损坏问题的新资讯,同时我们还将为您解释android应用程序中预加载的数据库损坏问题怎么解决的相关在本文中,我们将带你探索Android

在本文中,您将会了解到关于Android应用程序中预加载的数据库损坏问题的新资讯,同时我们还将为您解释android应用程序中预加载的数据库损坏问题怎么解决的相关在本文中,我们将带你探索Android应用程序中预加载的数据库损坏问题的奥秘,分析android应用程序中预加载的数据库损坏问题怎么解决的特点,并给出一些关于01_Android应用开发环境_05_签名android应用程序、android-ndk – 在Android应用程序中使用libusb:如何允许应用程序访问USB、android-studio – 你能通过Android工作室将Android应用程序作为ARC应用程序启动吗?、Android应用程序中具有RecognizerIntent的数据安全的实用技巧。

本文目录一览:

Android应用程序中预加载的数据库损坏问题(android应用程序中预加载的数据库损坏问题怎么解决)

Android应用程序中预加载的数据库损坏问题(android应用程序中预加载的数据库损坏问题怎么解决)

我有一个 Android应用程序,首先将一个大型数据库下载到asynctask中的sdcard(略高于50mb).下载代码如下.

HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
if(filePath.exists() && filePath.length() > 10000.00)
{
    downloaded = (int) filePath.length();
    conexion.setRequestProperty("Range","bytes=" + (filePath.length()) + "-");
}
else
    conexion.setRequestProperty("Range","bytes=" + downloaded + "-");

conexion.setDoInput(true);
conexion.setDoOutput(true);
conexion.setUseCaches(false);
conexion.connect();

try {
    totalFileLength = lengthOfFile + downloaded;
    progressDialog.setMax(lengthOfFile + downloaded);
    // downlod the file
    input = new BufferedInputStream(conexion.getInputStream());
    output = (downloaded==0)? new FileOutputStream(filePath): new FileOutputStream(filePath,true);
    bout = new bufferedoutputstream(output,1024);

    byte data[] = new byte[1024];

    while ((count = input.read(data,1024)) >= 0 && running) {
        downloaded += count;
        // publishing the progress....
        //onProgressUpdate((int)(downloaded*100/lengthOfFile));
        progressDialog.setProgress(downloaded);
        bout.write(data,count);
    }
} catch (Exception e) {
    ...
} finally {
    try {
        input.close();
        bout.flush();
        bout.close();
    } catch(IOException e) {
        ...
    }
}

完全下载文件后,我打开数据库并向其中添加一个表.

try {
    myDbHelper.myDataBase.execsql("CREATE TABLE IF NOT EXISTS FAVORITES (_id integer primary key autoincrement,MushroomID INTEGER)");
    success = true;
} catch (sqlException sqle) {
    throw sqle;
}

现在,这个代码在我运行它的每个设备上运行得非常好,但我的几个用户在execsql行上得到了这个错误.好像它不是单独使用三星galaxy SII(没有投诉和随后的堆栈跟踪与任何其他手机的这个错误)但我不完全确定它只是这款手机.

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.Daleroy.fungifieldguide/net.Daleroy.fungifieldguide.activities.FungiFieldGuide}: android.database.sqlite.sqliteDatabaseCorruptException: database disk image is malformed: CREATE TABLE IF NOT EXISTS FAVORITES (_id integer primary key autoincrement,MushroomID INTEGER)
       at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1651)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
       at android.app.ActivityThread.access$1500(ActivityThread.java:117)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:130)
       at android.app.ActivityThread.main(ActivityThread.java:3691)
       at java.lang.reflect.Method.invokeNative(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:507)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
       at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.sqliteDatabaseCorruptException: database disk image is malformed: CREATE TABLE IF NOT EXISTS FAVORITES (_id integer primary key autoincrement,MushroomID INTEGER)
       at android.database.sqlite.sqliteDatabase.native_execsql(Native Method)
       at android.database.sqlite.sqliteDatabase.execsql(sqliteDatabase.java:1904)
       at net.Daleroy.fungifieldguide.services.MushroomService.MakeFavoriteTable(MushroomService.java:118)
       at net.Daleroy.fungifieldguide.services.MushroomService.OpenDB(MushroomService.java:64)
       at net.Daleroy.fungifieldguide.activities.FungiFieldGuide.onCreate(FungiFieldGuide.java:73)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
       at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1615)

我收到了从具有sgs2的用户下载的数据库副本,并且该文件的校验和已关闭.当我用sqlite manager(firefox插件)打开时,我也看不到文件中的任何数据或数据结构.我让他直接下载数据库的副本并将其放在他的数据文件夹中,应用程序正常工作.所以问题出在下载过程中的某个地方.

解决方法

从API级别9(Android 2.3)开始,您可以使用 DownloadManager来处理长时间运行的HTTP下载:

The download manager is a system service that handles long-running
HTTP downloads. Clients may request that a URI be downloaded to a
particular destination file. The download manager will conduct the
download in the background,taking care of HTTP interactions and
retrying downloads after failures or across connectivity changes and
system reboots.

以下是演示DownloadManager用法的示例项目:Android DownloadManager Example.

我想你甚至可以尝试将DownloadManager支持到以前的Android版本(如果你需要支持它们).它的源代码可以在这里找到:DownloadManager.java

01_Android应用开发环境_05_签名android应用程序

01_Android应用开发环境_05_签名android应用程序

背景:

Android项目以他的包为唯一标识,如果一台设备上安装了两个包名相同的应用,后安装的应用就会覆盖前面安装的应用。

目的:

为了避免覆盖的情况,Android要求对作为成品的应用进行签名。

作用:

确定发布者身份。

确保应用的完整性。

在Eclipse的ADT插件或Ant工具会自动生成调试证书对Android应用签名。如果要正式发布一个Android应用,必须使用合适的数字证书来给应用程序签名,不能使用ADT或者Ant工具生成的调试证书来发布。

在Eclipse中对Android应用签名

1、右击项目,Android Tools→Export Singned Application Package…

2、如果系统中没有数字证书,可以在窗口中选择"Create new keystore"单击按钮,填写数字证书的存储路径和密码。

image

3、填写完成后Next,Eclipse将会弹出让用户填写数字证书的详细信息。

image

4、Next,指定生成签名后的APK安装包的存储路径。

image

5、Finish。这样就会在指定目录下生成一个签名后的APK安装包。

一旦数字证书制作完成,以后就可以最直接使用该证书签名了。

使用命令对APK进行签名

1、创建keysrore库,JDK的安装目录下面的BIN中有一个keytool.exe工具生成数字证书。

keytool -genkeypair    -alias    -keyalg   -validity   -keystore 

  • -genkeypair:指定生成数字证书
  • -alias:指定生成数字证书别名
  • -kayalg:指定生成数字证书的算吗,使用RSA算法
  • -validity:指定生成的数字证书的有效期
  • -keystore:指定所生成的数字证书的存储路径
输入命令后回车,接着安装交互式界面输入相关参数。

2、生成为签名的apk,Android Tools→Export Unsigned Application Package…

3、使用jarsigner命令对未签名的APK进行签名,JDK的Bin子目录下面

jarsigner -verbose -keystore -signedjar

说明:

  • -verbose:指定生成详细输出
  • -keystore:指定数字证书存储路径
  • -singedjar:有三个参数分别是签名后apk包、未签名的APK包、数字证书的别名。
  • 回车,以交互的方式输入数字证书keystore的密码。

4、使用zipalign.exe工具优化APK安装包。

zipalign -f -v 4 a.apk a_zip.apk

  • -f:指定强制覆盖已有文件
  • -v:指定生成详细输出
  • 4:指定档案整理所基于的字节数,通常指定为4,也就是基于32为进行整理。
  • a.apk、a_zip.apk:分别指定整理前的APK和整理后生成的APK。

android-ndk – 在Android应用程序中使用libusb:如何允许应用程序访问USB

android-ndk – 在Android应用程序中使用libusb:如何允许应用程序访问USB

我想在我的 Android应用程序(java GUI native(C)core)中使用libusb.我已经编译了libusb并尝试调用它的函数,但libusb_open返回LIBUSB_ERROR_ACCESS.我想USB访问权限有问题,但我不知道如何解决这个问题.那么,这里有两个问题:
1)如何让libusb在root的Android 3.1设备上运行?
2)是否可以在无根,出厂默认设备上使用libusb?

提前致谢.

P. S.至于问题1,我已经为/ dev / bus / usb尝试了chmod 666,但它说“权限被拒绝”(请注意我的设备已植根).

P.P.S. mount usbfs none / proc / bus / usb -o devmode = 0666甚至没有执行,好像我拼错了一些东西(但我没有).

我知道可以让libusb在带有USB主机的root设备上运行,但我从来没有管理它,所以我不得不将应用限制在Android 3.1并使用USB API.

解决方法

在android中,你无法使用libusb直接打开usb设备(这是你来到的结论:).

为什么你不能打开?

您需要获得Android系统(!= Kernel)的许可才能打开设备.

用Java做:

当您请求时,会向用户显示一个弹出窗口以接受或拒绝.
所以你需要在java中打开设备,并使用java解压缩fd并传递给libusb,以便它可以与设备通信.

现在libusb将如何从fd构建句柄?

更新:我维护了针对Android修改的libusb版本(有更多修复 – 在Android 5.1及更低版本上测试/工作).见https://gitlab.com/madresistor/libusb/blob/android/README

OLD LINK(DEAD LINK)这里的解决方案:
https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993

android-studio – 你能通过Android工作室将Android应用程序作为ARC应用程序启动吗?

android-studio – 你能通过Android工作室将Android应用程序作为ARC应用程序启动吗?

我想知道是否有办法从 Android Studio启动和/或构建ARC应用程序,而无需每次都手动使用ARC焊接器.

在开发过程中手动执行此操作可能非常麻烦,尤其是在发布时,您必须对同一应用程序的~15种不同风格执行相同的操作.是否有任何工作可以解决这个问题,如gradle扩展或其他东西.

解决方法

截至撰写本文时,尚未提供官方自动化ARC构建解决方案.这是ARC Welder或胸围.

话虽这么说,因为Chrome扩展(CRX)有一个开放的规范,并且由于CRX的内容(作为ZIP文件)很容易检查,反向工程ARC Welder做什么和创建Gradle插件或其他东西不会对于那些痒痒的人来说,这是困难的.

当我检查它时,明显的可变位是icon.png(启动器图标的96×96像素版本),APK本身在vendor / chromium / crx /中,以及manifest.json文件的arc_Metadata部分.后者是您的ARC焊接设置的位置,如外形和方向.

当然,任何自制程序都需要跟踪ARC Welder的更改,以确保它能够生成有效的ARC文件.

Android应用程序中具有RecognizerIntent的数据安全

Android应用程序中具有RecognizerIntent的数据安全

我正在使用RecognizerIntent开发一个Android语音识别应用程序.客户端担心设备与Google的语音识别服务器之间传输的数据以及该数据是否可以被截获.

我发现关于什么格式以及如何来回发送数据的文档很少.

有人知道我在哪里可以找到此信息吗?设备和Google语音识别之间的通信是否以任何方式加密/安全?

解决方法:

请参阅Google’s voice search speech recognition service,这可能会有所帮助.当然还有现在著名的http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/,它显示了Chrome浏览器中Google语音识别的工作原理.

我们今天的关于Android应用程序中预加载的数据库损坏问题android应用程序中预加载的数据库损坏问题怎么解决的分享就到这里,谢谢您的阅读,如果想了解更多关于01_Android应用开发环境_05_签名android应用程序、android-ndk – 在Android应用程序中使用libusb:如何允许应用程序访问USB、android-studio – 你能通过Android工作室将Android应用程序作为ARC应用程序启动吗?、Android应用程序中具有RecognizerIntent的数据安全的相关信息,可以在本站进行搜索。

本文标签: