7

関連トピックの私の問題の解決策を探して約1時間後、私は私のケースを公開することにしました。ここにあります:私は私のPreferenceActivityを開こうとするたびにInflateExceptionを持っています。私は、環境設定を持っているEditTextPreferenceはインフレータ例外を発生させます

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: lineo.smarteam, PID: 5087 
        Theme: themes:{} 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{lineo.smarteam/lineo.smarteam.activity.SettingsActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class lineo.smarteam.preference.MyEditTextPreference 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 
         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5461) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
        Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class lineo.smarteam.preference.MyEditTextPreference 
         at android.preference.GenericInflater.createItem(GenericInflater.java:388) 
         at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:432) 
         at android.preference.GenericInflater.rInflate(GenericInflater.java:483) 
         at android.preference.GenericInflater.rInflate(GenericInflater.java:495) 
         at android.preference.GenericInflater.inflate(GenericInflater.java:327) 
         at android.preference.GenericInflater.inflate(GenericInflater.java:264) 
         at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:273) 
         at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:304) 
         at lineo.smarteam.activity.SettingsActivity$SettingsFragment.onCreate(SettingsActivity.java:57) 
         at android.app.Fragment.performCreate(Fragment.java:2198) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
         at android.app.BackStackRecord.run(BackStackRecord.java:793) 
         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
         at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
         at android.app.Activity.performStart(Activity.java:6267) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)  
         at android.app.ActivityThread.-wrap11(ActivityThread.java)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:148)  
         at android.app.ActivityThread.main(ActivityThread.java:5461)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
        Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 

ログは、いくつかの整数パラメータを設定することができ、いくつかのEditTextPreferencesを選別します。

のres \ XML \あるpreferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory  android:title="@string/scores_category_title" 
          android:key="pref_key_scores_settings"> 
     <lineo.smarteam.preference.MyEditTextPreference 
      android:title="@string/pref_title_win_score" 
      android:inputType="numberSigned" 
      android:maxLength="9" 
      android:defaultValue="@integer/def_win_score" 
      android:key="pref_key_win_score" > 
     </lineo.smarteam.preference.MyEditTextPreference> 
     (more of the same) 
    </PreferenceCategory> 
</PreferenceScreen> 

私は頑固だと私は私がすべてのプリファレンスをクリックすると、カーソルがテキストの終わりに整列するので、私は、カスタムEditTextPreferenceを作成しました。

好みの\ MyEditTextPreference.java

package lineo.smarteam.preference; 

import android.content.Context; 
import android.preference.EditTextPreference; 
import android.util.AttributeSet; 
import android.widget.EditText; 

public class MyEditTextPreference extends EditTextPreference { 
    public MyEditTextPreference(Context context) { 
     super(context); 
    } 
    public MyEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public MyEditTextPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onClick() { 
     super.onClick(); 
     EditText et = getEditText(); 
     et.setSelection(et.getText().length()); 
    } 
} 

あなたが見ることができるように、私はこの問題に関連する基本的にすべてのトピックに記載されたすべてのコンストラクタを持っています。 は、それから私は、実際のP​​referenceActivityを持っている:

活動の\ SettingsActivity

package lineo.smarteam.activity; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.Preference; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceFragment; 
import android.preference.PreferenceManager; 
import android.util.Log; 
import android.view.MenuItem; 

import lineo.smarteam.MyApplication; 
import lineo.smarteam.R; 

public class SettingsActivity extends PreferenceActivity { 
    static SharedPreferences sharedPreferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Context context = this; 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
    } 

    public static class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
      setListeners(); 
     } 

     //EDIT: 
     public void setListeners(){ 
      setListenerA(); 
      //other listeners 
     } 

     pulic void setListenerA(){ 
      findPreference("KEY_PREF_WIN_SCORE").setOnPreferenceChangeListener() { 
       //(...) 
      } 
     } 
    } 
} 

上述のように、どこかのコードの省略この最後の作品で、私は私が読んとして、getActivity()への呼び出しを持っていますどこかでこの問題が発生する可能性があります。事は、私はそのメソッドへのすべての呼び出しをコメントしようとしており、問題は解決されません。だから私はそれが原因ではないと結論づけました。また、私は、そのメソッドがNullPointerExceptionをスローする可能性があるので、使用するたびに常にチェックしています。

解決策が私の目の前にあると感じましたが、私はそれを見ていません。私が読んだほとんどの関連トピックのケースでした。

誰かに教えてもらえますか?

おかげ

EDIT:Vijaiの提案に続き

は、私は、Appを再インストールしました。それはまだ同じアクションでクラッシュしていますが、エラーは変更されています。

新しいログ

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: lineo.smarteam, PID: 19210 
Theme: themes:{} 
java.lang.RuntimeException: Unable to start activity ComponentInfo{lineo.smarteam/lineo.smarteam.activity.SettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference$OnPreferenceChangeListener)' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5461) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

ProGuardを有効にしていますか?もしそうなら、カスタム 'Preference'を' @ Keep 'する必要があります。 – CommonsWare

+0

私はそれが何であるか分かりません... –

+0

https://developer.android.com/studio/build/shrink-code.html – CommonsWare

答えて

6

私はそれを見つけました。

idがpreferences.xmlファイルのidと一致しない環境設定を見つけようとしていました。

本当にばかげたミスでした。そして、それは私が最初に食べたコードの一部であった(申し訳ありません)。

とにかく、助けようとした皆様に感謝します!

3

エラーはあなたのMyEditTextPreferenceクラスでエラーが発生していると述べました。

Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 

私は前にこのエラーがありますが、あなたの状況によって大きく異なる場合があります。

  1. 見て、あなたのMyEditTextPreferenceクラスにして、レイアウトXMLが正しい好みを呼び出すかどうかを確認:そこにあなたが試みることができるカップルの事があります。 パッケージは同じである必要があります。これが私が間違ったところです。

  2. は、例えば、あなたのMyEditTextPreferenceクラスを変更しようとする私の提案があり、いくつかの行を削除します。

    protected void onClick() { super.onClick(); EditText et = getEditText(); et.setSelection(et.getText().length()); }

あるいはまた、あなたのコンストラクタを変更することができます。新しいエラーログが見つかったら参照してください。

  1. デバイスに展開する前に、gradleをビルドしてプロジェクトをクリーンアップします。通常、これはあなたの間違いをXMLで指摘します。

すべてが機能しない場合は、MyEditTextPreferenceクラスを修正する必要があります。これは私があなたを助けることを望む私の提案です。

関連する問題