संबंधित विषयों में मेरी समस्या के समाधान की तलाश करने के बाद, मैंने अपने मामले का पर्दाफाश करने का फैसला किया। यहां यह है: जब भी मैं अपनी वरीयता सक्रियता खोलने की कोशिश करता हूं, तब भी मुझे एक InflateException है।EditTextPreference Inflate Exception
लॉग
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 स्क्रीन।
रेस \ एक्सएमएल \ 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());
}
}
आप देख सकते हैं, मैं सभी निर्माताओं मूल रूप से सभी इस समस्या से संबंधित विषयों में उल्लेख किया है। तब मैं वास्तविक PreferenceActivity है:
गतिविधि \ 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 फेंक सकती है, इसलिए मैं इसे हर बार जांचता हूं जब भी मैं इसका उपयोग करता हूं।
मुझे लगता है कि समाधान मेरे सामने सही है, मैं इसे देख नहीं रहा हूं। मेरे द्वारा पढ़े गए अधिकांश संबंधित विषयों के लिए यह मामला था।
क्या कोई इसे ढूंढने में मेरी सहायता कर सकता है?
धन्यवाद
संपादित करें:
विजय के सुझाव के बाद, मैं अनुप्रयोग को पुनर्स्थापित। यह अभी भी एक ही कार्रवाई में दुर्घटनाग्रस्त है, लेकिन त्रुटि बदल गई है।
न्यू लॉग
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)
क्या आपके पास ProGuard सक्षम है? यदि ऐसा है, तो आपको अपनी कस्टम 'वरीयता' को '@ Keep' रखना होगा। – CommonsWare
मुझे नहीं पता कि यह क्या है ... –
https://developer.android.com/studio/build/shrink-code.html – CommonsWare