2

Прежде всего, я хочу сказать, извините, если мой английский не совсем корректен, потому что я немецкий. Также некоторые имена классов/методов/переменных являются немецкими.Android-приложение падает при использовании SharedPreferences.contains()

Моя проблема заключается в том, что мое приложение аварийно завершает работу на strtup. Я уже узнал (комментируя разные вещи), что это из-за моего if-condition в методе onResume(), но я не могу исправить эту проблему.

Когда приложение закончено, оно означает, чтобы сказать мне, что я должен принять в школу на текущий день. Разумеется, также будут некоторые дополнительные функции/классные функции.

Я уже проверил, что все действия имеют соответствующий макет.

Вот мой код для пусковой деятельности:

package de.mbauer.schulplaner; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 

public class Main extends AppCompatActivity { 

static SharedPreferences fachPrefs; 
static SharedPreferences.Editor fachPrefEdit; 
Intent keinFach; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
@Override 
protected void onResume() { 
    super.onResume(); 

    fachPrefs = this.getSharedPreferences("FaecherDatei", Context.MODE_PRIVATE); 
    fachPrefEdit = fachPrefs.edit(); 

    if (!fachPrefs.contains("Fach0")) { 
     keinFach = new Intent(Main.this, KeinFachVorhanden.class); 
     startActivity(keinFach); 
    } 
} 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    fachPrefEdit.clear(); 
    fachPrefEdit.commit(); 
    } 
} 

Вот это деятельность, называемая Намерению в onResume():

package de.mbauer.schulplaner; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class KeinFachVorhanden extends AppCompatActivity implements View.OnClickListener { 
    TextView tv1; 
    Button btn1; 
    Intent faechererstellenOeffnen = new Intent(KeinFachVorhanden.this, FaecherErstellen.class); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.kein_fach_layout); 

    btn1 = (Button) findViewById(R.id.button); 
    btn1.setOnClickListener(this); 
    tv1 = (TextView) findViewById(R.id.textView); 
} 

@Override 
public void onClick(View v) { 
    startActivity(faechererstellenOeffnen); 
} 
} 

Вот XML Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="de.mbauer.schulplaner"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".Main"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".FaecherErstellen" /> 
    <activity android:name=".KeinFachVorhanden"></activity> 
</application> 

Вот LogCat:

10-06 12:08:45.648 13621-13621/? I/art: Late-enabling -Xcheck:jni 
10-06 12:08:45.747 13621-13621/de.mbauer.schulplaner W/System: ClassLoader   referenced unknown path: /data/app/de.mbauer.schulplaner-2/lib/arm64 
10-06 12:08:45.754 13621-13621/de.mbauer.schulplaner I/InstantRun: Instant Run Runtime started. Android package is de.mbauer.schulplaner, real application class is null. 
10-06 12:08:45.972 13621-13621/de.mbauer.schulplaner W/System: ClassLoader referenced unknown path: /data/app/de.mbauer.schulplaner-2/lib/arm64 
10-06 12:08:46.170 13621-13621/de.mbauer.schulplaner W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
10-06 12:08:46.409 13621-13621/de.mbauer.schulplaner I/HwSecImmHelper: mSecurityInputMethodService is null 
10-06 12:08:46.419 13621-13621/de.mbauer.schulplaner E/HAL: load: id=gralloc != hmi->id=gralloc 
10-06 12:08:46.506 13621-13621/de.mbauer.schulplaner I/Process: Sending signal. PID: 13621 SIG: 9 

StackTrace:

$ adb shell am start -n "de.mbauer.schulplaner/de.mbauer.schulplaner.Main" - a android.intent.action.MAIN -c android.intent.category.LAUNCHER 
Connected to process 17199 on device huawei-ale_l21-QLF7N16307003297 
W/System: ClassLoader referenced unknown path: /data/app/de.mbauer.schulplaner-1/lib/arm64 
I/InstantRun: Instant Run Runtime started. Android package is de.mbauer.schulplaner, real application class is null. 
W/System: ClassLoader referenced unknown path: /data/app/de.mbauer.schulplaner-1/lib/arm64 
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android. graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package- private method in android.graphics.drawable.Drawable 
I/HwSecImmHelper: mSecurityInputMethodService is null 
E/HAL: load: id=gralloc != hmi->id=gralloc 
E/HAL: load: id=gralloc != hmi->id=gralloc 
I/OpenGLRenderer: Initialized EGL, version 1.4 
W/OpenGLRenderer: load: so=/system/lib64/libhwuibp.so 
       dlopen failed: library "/system/lib64/libhwuibp.so" not found 
W/OpenGLRenderer: Initialize Binary Program Cache: Load Failed 
E/HAL: load: id=gralloc != hmi->id=gralloc 
I/Process: Sending signal. PID: 17199 SIG: 9 
Application terminated.  

Gradle Сложение:

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.0' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

Я надеюсь, что вы можете мне помочь.

Иметь хороший день:)

+1

ваш выход LogCat не является полным, пожалуйста, распечатайте все журналы аварии – Anjali

+0

Как отметил Анджали. Пожалуйста, напишите полный стек. –

+0

Извините, это все, что выкладывается после запуска приложения. Найди его. – misterBauer

ответ

2

Вы должны получить разделяемое Предпочтение, как этого

SharedPreference pref = getApplicationContext().getSharedPreferences("CachedResponse", 0); 

String hospitalJson = pref.getString("hospitalJson", null); 

Теперь, если есть hospitalJson в sharedpreference он будет возвращать строку в противном случае строка будет нулевой. Затем вы можете проверить, если это пустой или не нравится ниже код: -

if (hospitalJson != null) { 
//Do Something 
} 
+0

Спасибо @kshitij jain. Но я думаю, что это проблема, потому что я назначаю значения и ключи другим способом. Я совершенно новичок в разработке Android, поэтому не знаю, если это повлияет на ваше предложение . – misterBauer

+0

Нашел решение, назначив, как и вы, @kshitij jain, а затем переписав значение в моем другом методе. – misterBauer

+0

Отлично! Рад, что мой ответ сработал для вас :) @misterBauer –

Смежные вопросы