android - Cannot call "persistInt" from inner class within Preference class -


i'm trying work building own preference classes, , having bit of trouble. looks way of saving data preference via "persist" group of methods within preference class. however, in preference, open color picker dialog, , need save preference within dialog's colorchanged override. whenever run app , try change color preference, get:

06-05 10:21:46.396: error/androidruntime(516): fatal exception: main java.lang.illegalaccesserror: tried access method android.preference.preference.persistint:(iiii)v class android.preference.colorselectionpreference$1 @ android.preference.colorselectionpreference$1.colorchanged(colorselectionpreference.java:55) @ android.apis.graphics.colorpickerdialog.onclick(colorpickerdialog.java:168) 

(update: 6/5/12 12:20) tried using callchangelistener force onpreferencechangelistener trigger, crashes identical error. without callchangelistener, preference data (probably) saved, onpreferencechangelistener doesn't triggered:

06-05 12:20:23.691: error/androidruntime(2834): fatal exception: main java.lang.illegalaccesserror: tried access method android.preference.colorselectionpreference.callchangelistener:(iiii)v class android.preference.colorselectionpreference$1 @ android.preference.colorselectionpreference$1.colorchanged(colorselectionpreference.java:52) @ android.apis.graphics.colorpickerdialog.onclick(colorpickerdialog.java:168) 

here's actual class:

package android.preference;  import android.apis.graphics.colorpickerdialog; import android.content.context; import android.content.sharedpreferences; import android.graphics.color; import android.util.attributeset;  public class colorselectionpreference extends preference {     private context mcontext;     private int mcolor;      public colorselectionpreference(context context) {         super(context);         mcontext = context;     }      public colorselectionpreference(context context, attributeset attr) {         super(context, attr);         mcontext = context;     }      public int getcolor() {         return mcolor;     }      public void setcolor(int color) {         mcolor = color;     }      @override     public void onclick() {         //get original preference         //set colorpickerdialog original preference color or default color         colorpickerdialog dialog = new colorpickerdialog(mcontext, new colorpickerdialog.oncolorchangedlistener() {             public void colorchanged(int a, int r, int g, int b) {                 int selectedcolor = color.argb(a,r,g,b);                 setcolor(selectedcolor);                  /*** crashes on callchangelistener ***/                 //sharedpreferences prefs = preferencemanager.getdefaultsharedpreferences(mcontext);                 //sharedpreferences.editor edit = prefs.edit();                 //edit.putint(getkey(), selectedcolor);                 //edit.commit();                 //callchangelistener(selectedcolor);                  /*** offending code, error refers line ***/                 persistint(selectedcolor);                  /*** tried request on irc ***/                 //colorselectionpreference.this.persistint(selectedcolor);             }         }, mcolor);         dialog.show();     } } 

this hacky workaround uses handler call main class inner class. isn't pretty, works.

package android.preference;  import android.apis.graphics.colorpickerdialog; import android.content.context; import android.content.sharedpreferences; import android.graphics.color; import android.os.bundle; import android.os.handler; import android.os.message; import android.util.attributeset;  public class colorselectionpreference extends preference {     private context mcontext;     private int mcolor;      private final handler mhandler = new handler() {         @override         public void handlemessage(message msg) {             if(msg.getdata().containskey("color")) {                 int color = msg.getdata().getint("color");                 setcolor(color);             }         }     };      public colorselectionpreference(context context) {         super(context);         mcontext = context;     }      public colorselectionpreference(context context, attributeset attr) {         super(context, attr);         mcontext = context;     }      public int getcolor() {         return mcolor;     }      public void setcolor(int color) {         mcolor = color;         persistint(new integer(color));     }      @override     public void onclick() {         //get original preference         //set colorpickerdialog original preference color or default color         colorpickerdialog dialog = new colorpickerdialog(mcontext, new colorpickerdialog.oncolorchangedlistener() {             public void colorchanged(int a, int r, int g, int b) {                 int selectedcolor = color.argb(a,r,g,b);                 bundle bundle = new bundle();                 bundle.putint("color", selectedcolor);                 message msg = new message();                 msg.setdata(bundle);                 mhandler.sendmessage(msg);                  //setcolor(selectedcolor);                  /*** tried this, onpreferencechangedlistener never gets triggered, won't work ***/                 //sharedpreferences prefs = preferencemanager.getdefaultsharedpreferences(mcontext);                 //sharedpreferences.editor edit = prefs.edit();                 //edit.putint(getkey(), selectedcolor);                 //edit.commit();                 //callchangelistener(selectedcolor);                  /*** offending code, error refers line ***/                 //container.                  /*** tried request on irc ***/                 //colorselectionpreference.this.persistint(selectedcolor);             }         }, mcolor);         dialog.show();     } } 

Comments

Popular posts from this blog

jquery - Invalid Assignment Left-Hand Side -

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -