2016-03-01 6 views
4

Так что я столкнулся с этой ошибкой только сейчас, и это приводит к тому, что приложение для Android не работает на устройстве. Всякий раз, когда я отлаживаю свое приложение для андроида, он падает по какой-то причине. , Как новый пользователь для Xamarin, я не знаю.Xamarin.Forms «Приложение перестало работать» на android

Здесь ошибка I`m получение:

[art] Late-enabling -Xcheck:jni 
[ContextImpl] Unable to create files subdir /data/data/com.comhuis.saleskicker.sales_kicker/cache 
[ContextImpl] Unable to create files subdir /data/data/com.comhuis.saleskicker.sales_kicker/files 
[AndroidRuntime] Shutting down VM 
[AndroidRuntime] FATAL EXCEPTION: main 
[AndroidRuntime] Process: com.comhuis.saleskicker.sales_kicker, PID: 5035 
[AndroidRuntime] java.lang.RuntimeException: Unable to get provider mono.MonoRuntimeProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference 
[AndroidRuntime] at android.app.ActivityThread.installProvider(ActivityThread.java:5015) 
[AndroidRuntime] at android.app.ActivityThread.installContentProviders(ActivityThread.java:4607) 
[AndroidRuntime] at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4547) 
[AndroidRuntime] at android.app.ActivityThread.access$1500(ActivityThread.java:148) 
[AndroidRuntime] at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
[AndroidRuntime] at android.os.Handler.dispatchMessage(Handler.java:102) 
[AndroidRuntime] at android.os.Looper.loop(Looper.java:135) 
[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:5272) 
[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method) 
[AndroidRuntime] at java.lang.reflect.Method.invoke(Method.java:372) 
[AndroidRuntime] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
[AndroidRuntime] Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference 
[AndroidRuntime] at mono.MonoPackageManager.LoadApplication(MonoPackageManager.java:27) 
[AndroidRuntime] at mono.MonoRuntimeProvider.attachInfo(MonoRuntimeProvider.java:42) 
[AndroidRuntime] at android.app.ActivityThread.installProvider(ActivityThread.java:5012) 
[AndroidRuntime] ... 11 more 
[Process] Sending signal. PID: 5035 SIG: 9 

Я на самом деле не что-то особенное в моем проекте. Я не могу загрузить скриншот моего решения только пока, но I`ll попробовать и описать его:

Мое решение существует из SalesKicker и SalesKicker.Droid. SalesKicker имеет 3 файла MainPage.Xaml MainPage.Xaml.cs SalesKicker.cs. и SalesKicker.Droid содержит обычный материал плюс 1 изображение, называемое delogo.png, которое я использую как appicon. Это мой код MainActivity.cs:

namespace SalesKicker.Droid 
{ 
    [Activity (Label = @"Sales Kicker", Icon = "@drawable/delogo", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
    public class MainActivity :  global::Xamarin.Forms.Platform.Android.FormsApplicationActivity 
    { 
    protected override void OnCreate (Bundle bundle) 
    { 
     Xamarin.Insights.Initialize (global::SalesKicker.Droid.XamarinInsights.ApiKey, this); 
     base.OnCreate (bundle); 
     global::Xamarin.Forms.Forms.Init (this, bundle); 
     LoadApplication (new App()); 
    } 
} 

Я также пытался установить точки останова. Я пробовал это на каждой строке и все еще получал ту же ошибку снова и снова. Я также попытался установить свою «целевую версию» на Lollipop 5.0, которая является текущей версией программного обеспечения на моем LG G3, и это действительно не имело никакого эффекта. И у меня также есть каждый Android SDK. Поскольку я совершенно новый для Xamarin, я не знаю. Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю неправильно?

+1

Ну, исключение действительно ясно, что вы пытаетесь получить путь от объекта File, который является нулевым (вы или компонент вы используете), моя ставка является компонентом пытается записать на SD а G3 имеет другое отображение для внешнего/внутреннего хранилища, поэтому его нельзя создать или найти. Попробуйте на эмуляторе. – Gusman

+0

А я вижу, но как я могу изменить путь записи к внутреннему хранилищу устройства? –

+0

Является ли ваш код тем, кто выбрасывает исключение, или это компонент? Если это компонент формы, спросите разработчика, который его создал, если это ваш код, то есть некоторые решения, такие как тестирование различных путей, чтобы проверить, где он отображается, использовать приложение для мониторинга SDK и изучить файловую систему вашего устройства. – Gusman

ответ

0

Создайте эту папку на своем устройстве Android, если сможете.

/data/data/{your.apps.package.name} 

В противном случае удалите приложение и повторно установите его снова.

Вы можете заметить, что исключение возникает при помощи «File.getAbsolutePath()».

После декомпиляции пакета моего приложения .apk я обнаружил, что это является причиной getFilesDir(), возвращающейся null.

// MonoPackageManager.java 
String str1 = context.getFilesDir().getAbsolutePath(); // <- Exception 
String str2 = context.getCacheDir().getAbsolutePath();