NotFoundException when looking for Drawable resource - android

I am starting with android and I want to add a border to cells as described in this answer. So I created my cell_background.xml file, which Eclipse created in res\drawable and that contains
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape= "rectangle" >
<solid android:color="#000"/>
<stroke android:width="1dp" android:color="#ff9"/>
</shape>
Having read that there are several issues with the drawable folder, I copied it verbatim into the res\drawable-*dpi directories
Now, my app crashes in the following line
Drawable drawable = Resources.getSystem().getDrawable(R.drawable.cell_background);
with this exception
12-16 14:26:28.624: E/AndroidRuntime(533): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f020000
Both the project and the emulator are set to v3.0
Any ideas? I have already cleaned and rebuilt the project but it still crashes.

The problem is that you use Resources.getSystem(), which will give you a reference to the system resources. You should use context.getResources() instead.

Try with the following code to check whether the resource exists or not
int drawRes = getDrawableResourceID(context, "cell_background"));
if(drawRes>0){
getResources().getDrawable(drawRes);
}
//To detect whether the reource exits in drawable or not
public static int getDrawableResourceID(Context context,
String identifierName) {
return context.getResources().getIdentifier(identifierName,
"drawable", context.getPackageName());
}

not sure about issue regarding putting in Drawable folder only i haven't got issue any, Still try using this way tht i use generally
Drawable drawable = getResources().getDrawable(R.drawable.cell_background);

Related

Android invalid color state list tag gradient

I've an app with over 5000 downloads and more than 500 users active daily and out of nowhere I started get an weird error on Crashlytics:
Caused by android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v24/ic_tickets.xml from drawable resource ID #0x7f0700b3
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2748)
at android.content.res.Resources.loadDrawable(Resources.java:2643)
at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
at android.widget.TextView.<init>(TextView.java:921)
at android.widget.TextView.<init>(TextView.java:703)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:76)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:72)
at java.lang.reflect.Constructor.newInstance(Constructor.java)
Caused by android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v24/$ic_tickets__0.xml from color state list resource ID #0x7f070017
at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2858)
at android.content.res.Resources.loadColorStateList(Resources.java:2807)
at android.content.res.TypedArray.getColor(TypedArray.java:439)
at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1605)
at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1584)
at android.graphics.drawable.VectorDrawable.inflateInternal(VectorDrawable.java:666)
at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:571)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124)
Caused by org.xmlpull.v1.XmlPullParserException: Binary XML file line #6: invalid color state list tag gradient
at android.content.res.ColorStateList.createFromXmlInner(ColorStateList.java:217)
at android.content.res.ColorStateList.createFromXml(ColorStateList.java:201)
at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2854)
at android.content.res.Resources.loadColorStateList(Resources.java:2807)
at android.content.res.TypedArray.getColor(TypedArray.java:439)
at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1605)
The stack trace is way longer than this, more than 500 lines on Crashlytics, I pasted here what I thought might be useful to understand the problem.
If I got it right it is complaining like one of my resources is missing or corrupted; what could it be?
But the resource is intact in the apk:
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp"
xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:pathData="M381.845,292.27c0,11.032 -8.943,19.975 -19.975,19.975s-19.975,-8.943 -19.975,-19.975c0,-11.032 8.943,-19.975 19.975,-19.975S381.845,281.238 381.845,292.27zM361.869,332.221c-11.032,0 -19.975,8.943 -19.975,19.975s8.943,19.975 19.975,19.975s19.975,-8.943 19.975,-19.975S372.902,332.221 361.869,332.221zM361.869,392.147c-11.032,0 -19.975,8.943 -19.975,19.975s8.943,19.975 19.975,19.975s19.975,-8.943 19.975,-19.975S372.902,392.147 361.869,392.147zM307.418,136.36c-9.983,4.696 -14.268,16.596 -9.572,26.578c4.696,9.983 16.596,14.268 26.578,9.572c9.983,-4.696 14.268,-16.596 9.572,-26.578C329.3,135.95 317.401,131.664 307.418,136.36zM451.759,352.197c0,22.029 17.922,39.951 39.951,39.951h19.975V512H0.314V392.147H20.29c22.029,0 39.951,-17.922 39.951,-39.951s-17.922,-39.951 -39.951,-39.951H0.314V192.393h0.509l-0.042,-0.089L408.489,0l50.866,108.128l-17.013,8.861c-13.29,6.921 -21.544,20.506 -21.544,35.453c0,22.029 17.922,39.951 39.951,39.951h50.937v119.853H491.71C469.681,312.246 451.759,330.168 451.759,352.197zM94.244,192.393h297.352c-6.822,-11.763 -10.75,-25.403 -10.75,-39.951c0,-23.307 10.023,-44.953 27.021,-59.913l-18.505,-39.335l-81.134,38.269c4.355,9.886 0.068,21.491 -9.762,26.115c-9.818,4.618 -21.473,0.536 -26.323,-9.095L94.244,192.393zM411.808,352.197c0,-37.163 25.503,-68.482 59.926,-77.374v-42.479h-89.889c0,11.032 -8.943,19.975 -19.975,19.975s-19.975,-8.943 -19.975,-19.975H40.265v42.479c34.424,8.891 59.926,40.211 59.926,77.374s-25.503,68.482 -59.926,77.374v42.479h301.629c0,-11.032 8.943,-19.975 19.975,-19.975s19.975,8.943 19.975,19.975h89.889V429.57C437.31,420.678 411.808,389.36 411.808,352.197z">
<aapt:attr name="android:fillColor">
<gradient android:endX="256.00745" android:endY="511.99982"
android:startX="256.00745"
android:startY="-0.0150070675" android:type="linear">
<item android:color="#FF2AF598" android:offset="0"/>
<item android:color="#FF009EFD" android:offset="1"/>
</gradient>
</aapt:attr>
</path>
</vector>
The drawable is a very small and simple icon for a button in the app, I downloaded it from a icon library it opens and run fine on all my tests.
The second weird thing about this is that over 500 active users I had today this is happening only with 4 users all with the same smartphone:
Device
Brand: LGE
Model: LG K10 LTE
Orientation: Portrait
RAM free: 170.92 MB
Disk free: 574.64 MB
Operating System
Version: 6.0
Orientation: Portrait
Rooted: No
Crash
Is there any know issue about this smartphone model? What can I do in order to fix this for the affected users?
This is because you use a few attributes not supported prior to API level 24.
eg. startX, endX, startY, endY and offset.
Android Marshmallow 6.0 is API level 23 ...
That invalid color state list tag gradient is coming from the offset:
<item android:color="#FF2AF598" android:offset="0"/>
<item android:color="#FF009EFD" android:offset="1"/>
This issue most likely isn't LG specific, but Marshmallow specific.
Use app:srcCompat instead of src on the ImageView
In your app build.gradle write below code :
android.defaultConfig.vectorDrawables.useSupportLibrary = true
defaultConfig {
...
vectorDrawables.useSupportLibrary = true
...
}
Now you see it works.
The actual problem is with attributes you are defining like android:fillColor
which expects to be a single value color and not a list of colors like gradient or color list. It works from API 24. My suggestion is to tell your designer to create exact logo for below 24 API
Refer to the link for more details
Instead of using .xml to set the image resource, just set the image resource programmatically from your java code.
Faced this issue in Android API 21-23 with the vector drawable. By using this, now its fixed
app:drawableStartCompat="#drawable/ic_placeholder"
and by programmatically:
Drawable img = button.getContext().getResources().getDrawable(
R.drawable.ic_brush );
button.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);

Cannot resolve method in Picasso method .load

Picasso image loading library shows error while use with:
ColorDrawable cd = new ColorDrawable(ContextCompat.getColor(mContext,R.color.light_thirty_alpha));
Picasso.with(mContext)
.load(cd)
.fit().centerCrop()
.transform(new RoundedTransformation(5, 0))
.error(cd)
.placeholder(cd)
.into(imageView_ovelay_slider);
It is showing error that cannot resolve method .load(colorDrawable). I already knows that it is not accept colorDrawable but I am asking can we cast colorDrawable to something else that accepts by .load().
If you look at the source code, you will see that, Picasso's load method can accept any one of the following parameters:
Uri
String
File
int (Resource Id)
It does not accept ColorDrawable
.load method doesn't accepts ColorDrawable as parameter. Look at the official documentation for accepted parameters.
load(File file) - image request using the specified image file.
load(int resourceId) - mage request using the specified drawable resource ID.
load(String path) - image request using the specified path.
load(android.net.Uri uri) - image request using the specified URI.
http://square.github.io/picasso/2.x/picasso/
Solution was so easy finally found by using
solution 1(worked & tested):
ColorDrawable cd = new ColorDrawable(ContextCompat.getColor(mContext,R.color.light_thirty_alpha));
Picasso.with(mContext)
.load(String.valueOf(cd))
.fit().centerCrop()
.transform(new RoundedTransformation(5, 0))
.error(cd)
.placeholder(cd)
.into(imageView_ovelay_slider);
solution 2(worked & tested):
alternate way i found is to create shape drwable.xml file with radius.
<?xml version="1.0" encoding="utf-8"?>
<item>
<shape android:shape="rectangle">
<stroke
android:width="0dp"
android:height="0dp"
android:color="#color/transparent" />
<!-- apply button background transparent, full opacity -->
<solid android:color="#color/box" />
<corners android:radius="2.5dp" />
<padding android:bottom="2dp"
android:left="4dp"
android:right="4dp"
android:top="2dp" />
</shape>
</item>
and use it as background drawable. Thank you #Prerak Sola & Alok

Android VectorDrawable as Compound Drawables

As of stated by this android developer blog post, we can now use VectorDrawables on Android API 7+ using the AppCompat 23.2.0 and later versions.
Everything seems to work fine for me, except when it comes to use drawables as a compound to a TextView.
Normally, one would do something like:
customTab.setCompoundDrawablesWithIntrinsicBounds(
0,
R.drawable.my_vector,
0,
0
);
Unfortunately this is not working at the moment, and I wasn't able to find a workaround for this problem.
As of stated by the post, the only available and working methods are the xml one, using app:srcCompat="#drawable/..." and the Java setImageResource(...)
How can I use the new vector drawable support with the setCompoundDrawable() method?
Thanks in advance.
Edit:
as requested, here's the result of the VectorDrawableCompat class:
the xml is:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="98"
android:viewportHeight="102">
<path
android:fillColor="#4D4D4D"
android:strokeWidth="2"
android:strokeColor="#4D4D4D"
android:pathData="M63.3336386,72.2631001 C56.7778507,76.9021242
48.7563953,79.6307404
40.09319,79.6307404 C17.9503315,79.6307404 0,61.804793 0,39.8153702
C0,17.8259473 17.9503315,0 40.09319,0 C62.2360484,0 80.1863799,17.8259473
80.1863799,39.8153702 C80.1863799,50.8100816 75.6987973,60.7639242
68.4433567,67.9690887 L96.7320074,96.0617174 C98.0293966,97.3501165
97.9978616,99.4159703 96.6953405,100.709466 C95.3837385,102.011979
93.2974318,102.019264 92.0151615,100.745879 L63.3336386,72.2631001
L63.3336386,72.2631001 L63.3336386,72.2631001 Z M40.09319,74.9465792
C59.6310061,74.9465792 75.4695341,59.217802 75.4695341,39.8153702
C75.4695341,20.4129383 59.6310061,4.6841612 40.09319,4.6841612
C20.5553738,4.6841612 4.71684588,20.4129383 4.71684588,39.8153702
C4.71684588,59.217802 20.5553738,74.9465792 40.09319,74.9465792
L40.09319,74.9465792 L40.09319,74.9465792 Z" />
</vector>
Starting from support library 23.2 you can use the next solution:
Drawable drawable=AppCompatDrawableManager.get().getDrawable(mContext, R.drawable.drawable);
view.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
Following the precious suggestions given by #pskink I was able to load correctly a drawable inside my view.
My problem was the selector I was using as my xml to give the "current active tab" feedback in my TabLayout.
I've solved my problem by doing a cast:
Drawable drawable;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
drawable = ContextCompat.getDrawable(mContext, tabIcons[i]);
} else {
drawable = getResources().getDrawable(tabIcons[i]);
}
StateListDrawable stateListDrawable = (StateListDrawable) drawable;
customTab.setCompoundDrawablesWithIntrinsicBounds(
null,
stateListDrawable,
null,
null
);
You can solve it by data-binding also:
create adapter method
public class Bindings {
#BindingAdapter({"bind:drawableStartId"})
public static void setDrawableStart(TextView textView, #DrawableRes int id) {
Drawable drawable = AppCompatDrawableManager.get().getDrawable(textView.getContext(), id);
Drawable drawables[] = textView.getCompoundDrawablesRelative();
textView.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, drawables[1], drawables[2], drawables[3]);
}
}
and use app:drawableStartId in your xml file.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="your.path.to.R" />
</data>
<TextView
app:drawableStartId="#{isSelected ? R.drawable.one :R.drawable.another}"
/>
<layout/>

Resources$NotFoundException: Resource is not a Drawable (color or path)?

I have a textview, when it is clicked, I am populating a listView inside a dialog. This code used to work fine, but today it is throwing exception.
this is my code:
tvSelectedFont = (TextView)findViewById(R.id.lblQuoteSelectedFont);
tvSelectedFont.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
ListView listView = new ListView(context);
listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1,
new String[] {"Default", "Serif", "Monospace"}));
final Dialog dialog = new Dialog(context);
dialog.setContentView(listView);
dialog.setTitle(R.string.txt_settings_QuotefontName);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedTypeFace = ((TextView)view).getText().toString();
tvSelectedFont.setText(selectedTypeFace);
switch(selectedTypeFace)
{
case "Serif":
selectedQuoteTypeFace = Typeface.SERIF;
break;
case "Monospace":
selectedQuoteTypeFace = Typeface.MONOSPACE;
break;
default:
selectedQuoteTypeFace = Typeface.DEFAULT;
break;
}
tvQuoteTextSample.setTypeface(selectedQuoteTypeFace, selectedQuoteFontStyle);
dialog.dismiss();
}
});
dialog.show();
}
});
The logcat error shows this:
Device driver API version: 29
User space API version: 29
03-17 14:33:24.701 23220-23220/com.example.manas.dailyquoteswidget E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Tue Jul 22 19:59:34 KST 2014
03-17 14:33:27.926 23220-23220/com.example.manas.dailyquoteswidget E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.manas.dailyquoteswidget, PID: 23220
android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f0100a7 a=3}
at android.content.res.Resources.loadDrawable(Resources.java:3415)
at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
at android.widget.AbsListView.<init>(AbsListView.java:1089)
at android.widget.ListView.<init>(ListView.java:152)
at android.widget.ListView.<init>(ListView.java:148)
at android.widget.ListView.<init>(ListView.java:144)
at com.example.manas.dailyquoteswidget.DailyQuotesWidgetConfigureActivity$6.onClick(DailyQuotesWidgetConfigureActivity.java:182)
at android.view.View.performClick(View.java:4640)
at android.view.View$PerformClick.run(View.java:19425)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5593)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Cant figure it out the problem. Any help please?
I encountered this problem in the recent app I made. In my case, the problem was I put an image in the folder called drawable-v21, which is not available in older android API.
The solution is to put your drawable in drawable-...dpi folders too.
In Android Studio change Project hierarchy to Project Files.
Then go to the res folder, you will see multiple drawable folders. Copy the images to appropriate folder(drawable) or based on Api level.
In my case image was present in drawable-24 folder therefore it was not available on api<24 devices.
On the Mac in finder, I just simply moved all the files in the folder ../drawable/drawable-24 to /drawable and everything worked both on older android versions and Oreo. Also when you copy and paste the images into Android Studio make sure to paste them into drawable not drawable//drawable-24 which may be the default.
I figured it out, it was not an issue with the code, but the theme. I recently changed the theme from android:theme="#style/AppTheme"to android:theme="#style/Theme.AppCompat.NoActionBar" after that the problem started. I reverted back the old AppTheme thene it started working again. It seems that the NoActionBar theme was not compatible for dialog boxes.
I ran into this error in a different situation, and it turned out that I'd accidentally set a drawable to R.id.something instead of R.drawable.something!
Make sure you followed the above solutions, try this if non-of-them worked for you.
In my case, the problem was due to drawable icons in only hdpi image resolution. Change these icons to the folder, which contains xhdpi, mdpi, xxhdpi and xxxhdpi resolution also.
And that solved my problem.
PS:
I convert icons to different image resolution by installing plugin "Android drawable importer".
Maybe your view background resource not in drawable dir, in color. view background not support resource in color.
view background like this
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape>
<solid android:color="#ffffffff"/>
</shape>
</item>
<item android:state_selected="false">
<shape>
<solid android:color="#00000000"/>
</shape>
</item>
</selector>
You can get it working by making sure that your drawable.xml not included (v24)
<ImageView
...
android:src="#drawable/realtconsult" />
If you will write it from a view then this will works.
There are more than one folder included in drawable folders(not visible), if you get these kind of error then please copy paste the file on which error occured to all the directories or atleast copy paste to night and normal drwable folder
enter image description here
When you put an image into the drawable folder, by default they are -v24 named at the end.
If you are not sure, just drag and drop the image again into the drawable folder. Make sure the name is not -v24 at the end.
Solution for old APIs
move all your ic_xyz.xml folders to drawable (v24) ie select your folder which is having this issue and move it to or select---> refactor--->move file-->(change the path) to Drawable(v24).

res folder inside bin has gone empty,causing errors.How to fix?Something to do with options menu?

The res folder inside of bin is supposed to contain .dex,.apk and .ap_ i think.Mines gone empty somehow causing errors like not being able to access the layout resources.I have tried clean and build but it doesent seem to work.Just seem to create an empty res folder.So any idea how to fix this?
Thanks.
Ok my problem is with an xml file i'm creating inside of res/menu inorder to create an options menu:
options.xml:
<?xml version="1.0" encoding="UTF-8"?>
<menu>
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="#+id/setmenu"
android:title="#string/settings"
android:icon="#android:drawable/ic_menu_preferences"></item>
<item
android:id="#+id/helpmenu"
android:title="#string/help"
androidLicon="#android:drawable/ic_menu_help"></item>
</menu>
Heres the error i am getting:
Description Resource Path Location Type
Unparsed aapt error(s)! Check the console for output. TriviaQuiz line 1 Android ADT Problem
Console Messages:
[2011-11-19 16:47:24 - TriviaQuiz] W/ResourceType( 4672): Bad XML block: header size 116 or total size 7602372 is larger than data size 0
[2011-11-19 16:47:24 - TriviaQuiz] H:\workspace\TriviaQuiz\res\menu\options.xml:5: error: Error parsing XML: unbound prefix
Any idea what it is.
I find that an error in one of my resources (usually a layout) causes this. Missing quotes or /> in particular are a good starting point - that's my personal blind spot and eclipse punishes it mercilessly!
As alextsc says, check everything you edited recently.

Categories

Resources