如何理解Android崩溃错误并纠正它们

MrC*_*ter 2 debugging android stack-trace google-play

这是其中一个堆栈跟踪的示例,如何从中修复我的应用程序?谷歌市场上还有其他任何工具可以帮助我吗?

java.lang.IllegalStateException:未知URL:content:// media/external/audio/albumart/-1,位于android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java)的android.os.Parcel.readException(Parcel.java:1255) :160)在android.content.ContentProviderProxy.insert(ContentProviderNative.java:450)的android.doc.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)的android.content.ContentResolver.insert(ContentResolver.java:587) com.multi.board.series9button.onContextItemSelected(series9button.java:95)中的.multi.board.series9button.function2(series9button.java:155)位于com的android.app.Activity.onMenuItemSelected(Activity.java:2206). android.internal.policy.impl.PhoneWindow $ ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2781)位于com.android.internal.view的com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158). menu.MenuBuilder.performItemAction(MenuBuilder.java:855)at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDia)logHelper.java:137)在android.widget.ListView的android.widget.AdapterView.performItemClick(AdapterView.java:284)的com.android.internal.app.AlertController $ AlertParams $ 3.onItemClick(AlertController.java:876). performItemClick(ListView.java:3382)在Android.os.Handler.dispatchMessage(Handler)上的android.widget.AbsListView $ PerformClick.run(AbsListView.java:1696)android.os.Handler.handleCallback(Handler.java:587) .java:92)在android.app.Looper.loop(Looper.java:144)的android.app.ActivityThread.main(ActivityThread.java:4937)at java.lang.reflect.Method.invokeNative(Native Method)at at java.lang.reflect.Method.invoke(Method.java:521)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:626)at dalvik.system.NativeStart.main(Native Method)


编辑:

我实际上称它为功能2!什么是糟糕的编程.这是功能.问题是我无法通过我的手机或其他任何我试过的机器崩溃....

public void function2(int id){
      Toast.makeText(this, "Set as notification",
Run Code Online (Sandbox Code Playgroud)

Toast.LENGTH_SHORT).show(); String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();

            String path = sdcard + "/multi10/" + Global.currentboard +
Run Code Online (Sandbox Code Playgroud)

"/ series9";

                  File k = new File(path, Global.currentsound);

                  ContentValues values = new ContentValues();
                  values.put(MediaStore.MediaColumns.DATA,
Run Code Online (Sandbox Code Playgroud)

k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE,"MultiboardNotif"); values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/mpeg"); values.put(MediaStore.Audio.Media.ARTIST,"未知艺术家"); values.put(MediaStore.Audio.Media.IS_RINGTONE,false); values.put(MediaStore.Audio.Media.IS_NOTIFICATION,true); values.put(MediaStore.Audio.Media.IS_ALARM,false); values.put(MediaStore.Audio.Media.IS_MUSIC,false);

                  Uri uri =
Run Code Online (Sandbox Code Playgroud)

MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());

getContentResolver().delete(uri,MediaStore.MediaColumns.TITLE +"= \""+"MultiboardNotif"+"\"",null); Uri newUri = getContentResolver().insert(uri,values);

                  RingtoneManager.setActualDefaultRingtoneUri(
                    series9button.this,
                    RingtoneManager.TYPE_NOTIFICATION,
                    newUri);

  }
Run Code Online (Sandbox Code Playgroud)

解决

那么我现在明白崩溃错误现在如何工作!这就是我解决问题的方法:

当我将声音存储在SD卡上存储声音的目录中时,我在某些手机上遇到了问题.

我添加一个文件告诉媒体扫描程序不要扫描我的目录中的文件并将它们添加到数据库中.

因此,要克服这个当设置为铃声/通知/报警按钮被按下我将文件复制到一个目录中称为SD卡\<sdard>\ringtones\<sdard>\notifications\<sdard>\alarms和我以前使用的代码工作正常,从该位置.

Ale*_*scu 5

您所指的"Android崩溃错误"实际上是一个JAVA堆栈跟踪.谷歌搜索肯定会带来很多结果.让我给你一些指示:

  • 当抛出未捕获的异常时,此类堆栈跟踪将转储到错误流中.
  • 第一行包含异常的类名(在您的情况下java.lang.IllegalStateException),后跟异常消息("Unknown URL:content:// media/external/audio/albumart/-1").这告诉你发生了什么.
  • 堆栈跟踪的其余部分包含有关它发生的位置的信息.由于函数相互调用,您将看到几个函数,它们的调用顺序相反,每行一个函数.在你的例子中:
    • 行中文件的类android.os.Parcel方法发生异常readException()Parcel.java1255
    • 该方法被称为通过android.database.DatabaseUtils方法readExceptionFromParcel()在文件DatabaseUtils.java的行160
    • ......

您很可能会对来自您的代码的LATEST(最顶层)方法调用感兴趣,因为99%的时间是导致错误的原因.在你的情况下,那是com.multi.board.series9button.function2(series9button.java:155)(你function2()从类com.multi.board.series9button行解释155).

祝好运!