MaterialSearchBar icon indicating copy to clipboard operation
MaterialSearchBar copied to clipboard

com.mancj.materialsearchbar.EditTextStyleHelper$EditTextStyleChangeError

Open zyk88737158 opened this issue 5 years ago • 6 comments

com.mancj.materialsearchbar.EditTextStyleHelper$EditTextStyleChangeError: Error applying changes to android.support.v7.widget.AppCompatEditText{e5cf517 VFED..CL. ......I. 0,0-0,0 #7f090170 app:id/mt_editText}
    at com.mancj.materialsearchbar.EditTextStyleHelper.apply(EditTextStyleHelper.java:125)
    at com.mancj.materialsearchbar.EditTextStyleHelper.applyChanges(EditTextStyleHelper.java:40)
    at com.mancj.materialsearchbar.MaterialSearchBar.setupSearchEditText(MaterialSearchBar.java:317)
    at com.mancj.materialsearchbar.MaterialSearchBar.postSetup(MaterialSearchBar.java:281)
    at com.mancj.materialsearchbar.MaterialSearchBar.init(MaterialSearchBar.java:223)
    at com.mancj.materialsearchbar.MaterialSearchBar.<init>(MaterialSearchBar.java:126)
    at java.lang.reflect.Constructor.newInstance(Native Method)
    at android.view.LayoutInflater.createView(LayoutInflater.java:638)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:783)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:723)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:817)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:434)
    at com.huaweisoft.ihserviceapp.fragment.BaseFragment.createView(BaseFragment.java:88)
    at com.huaweisoft.ihserviceapp.fragment.BaseFragment.onCreateView(BaseFragment.java:62)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
    at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1241)
    at android.app.Activity.performStart(Activity.java:6387)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2414)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
    at android.app.ActivityThread.access$900(ActivityThread.java:165)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:5621)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
 Caused by: java.lang.NoSuchFieldException: No field mCursorDrawable in class Lhuawei/com/android/internal/widget/HwEditor; (declaration of 'huawei.com.android.internal.widget.HwEditor' appears in /system/framework/hwEmui.jar)
    at java.lang.Class.getDeclaredField(Native Method)
    at com.mancj.materialsearchbar.EditTextStyleHelper.apply(EditTextStyleHelper.java:88)
    at com.mancj.materialsearchbar.EditTextStyleHelper.applyChanges(EditTextStyleHelper.java:40) 
    at com.mancj.materialsearchbar.MaterialSearchBar.setupSearchEditText(MaterialSearchBar.java:317) 
    at com.mancj.materialsearchbar.MaterialSearchBar.postSetup(MaterialSearchBar.java:281) 
    at com.mancj.materialsearchbar.MaterialSearchBar.init(MaterialSearchBar.java:223) 
    at com.mancj.materialsearchbar.MaterialSearchBar.<init>(MaterialSearchBar.java:126) 
    at java.lang.reflect.Constructor.newInstance(Native Method) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:638) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:783) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:723) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:817) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:534) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:434) 
    at com.huaweisoft.ihserviceapp.fragment.BaseFragment.createView(BaseFragment.java:88) 
    at com.huaweisoft.ihserviceapp.fragment.BaseFragment.onCreateView(BaseFragment.java:62) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827) 
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797) 
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596) 
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383) 
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245) 
    at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248) 
    at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200) 
    at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597) 
    at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177) 
    at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1241) 
    at android.app.Activity.performStart(Activity.java:6387) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2414) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511) 
    at android.app.ActivityThread.access$900(ActivityThread.java:165) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:150) 
    at android.app.ActivityThread.main(ActivityThread.java:5621) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 

zyk88737158 avatar Sep 21 '18 09:09 zyk88737158

I am getting the exact same error- running on API 28, Pixel 2

evbarnett avatar Sep 30 '18 08:09 evbarnett

And here is the location in the source where it occurs (EditTextStyleHelper.java:88)

field = editor.getClass().getDeclaredField("mCursorDrawable");

mCursorDrawable is not a field anymore-

So essentially the project will not work, since API updates regularly change private variables. Seems like it would be possible to create this library without relying on reflection of private variables.

evbarnett avatar Sep 30 '18 08:09 evbarnett

I think we need modify some line codes on EditTextStyleHelper. try { field = editor.getClass().getDeclaredField("mCursorDrawable"); field.setAccessible(true); field.set(editor, drawables); } catch (NoSuchFieldException e) { e.printStackTrace(); } try { field = TextView.class.getDeclaredField(resFieldName); field.setAccessible(true); field = editor.getClass().getDeclaredField(drawableFieldName); field.setAccessible(true); field.set(editor, selectHandleDrawable); } catch (NoSuchFieldException e) { e.printStackTrace(); }

thanhvn-15 avatar Dec 19 '18 08:12 thanhvn-15

Since Android P, they are locking down on certain uses of reflection https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces

Editor has a new field mDrawableForCursor but we cannot access. Solution is use xml file as value of android:textCursorDrawable

thuypt avatar Jun 11 '19 09:06 thuypt

Same problem occurs in this line of code: field = TextView.class.getDeclaredField("mCursorDrawableRes");

still in MaterialSearchBar:0.8.2

B4gi0 avatar Jun 18 '20 20:06 B4gi0

Thank u

pedromaironi avatar Feb 20 '21 15:02 pedromaironi