Resource not found exception at setDropDownBackgroundColor - android

I'm trying to set a DropDown Background Color for a autocompleteTextView, because the standart Values seem to be different during different Android Versions. For example, everything works fine starting with android 3.2, but previous Versions seem to not accept the android:textColor="#color/black" in the xml, cause it is not working for me. Android 2.3 for example just shows the items in the list and the ones I picked in white, which isn't working for me, cause the background is white too. So I decided to change the background Color determing on the android version using this:
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB){
// Do something for Honeycomb and above versions
//everything is right
} else{
// do something for phones running an SDK before froyo
box_Kurs.setDropDownBackgroundResource(Color.BLUE);
box_Teacher.setDropDownBackgroundResource(Color.BLUE);
}
But when I start my app it crashes and shows resource not found exception:
11-19 15:40:17.225: E/AndroidRuntime(450): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shr.khg/com.shr.khg.AddActivity}: android.content.res.Resources$NotFoundException: Resource ID #0xff0000ff
What am I doing wrong? I alread cleaned my project since that what other people suggested. Or is there any easier way to deal with my issue?
Thank you!

The problem is that the setDropDownBackgroundResource() is expecting the id of the Color resource Drawable, not an int that defines a Color. If you look at the Exception you can see that Android is trying to find a component with id #0xff0000ff, this is the hex code for a completely opaque blue which is the value of Color.BLUE

Replce these two lines:
box_Kurs.setDropDownBackgroundResource(Color.parseColor("#0000ff"));
box_Teacher.setDropDownBackgroundResource(Color.parseColor("#0000ff"));

Related

Android resource not found exception for notification icon

The bounty expires in 14 hours. Answers to this question are eligible for a +50 reputation bounty.
km11 wants to draw more attention to this question:
Should not experience any more crashes with the proposed changes
In my latest release, I suddenly started getting this error: Resources$NotFoundException: Resource ID #0x7f080120. The resource ID is my notification icon, which is used in one of the tabs in a ViewPager, which is displayed at startup. I am not able to reproduce the issue myself, but see a lot of new crashes in Firebase Crashlytics.
The notification icon is stored in multiple densities:
The code that causes the crash:
ContextCompat.getDrawable(context, R.drawable.ic_notification_icon)
The weird thing is that I did not change anything related to this drawable or the code in the ViewPager in this release. The best suggestion I found from searching around, was to clean and rebuild the project. I did this and uploaded a new version, but the crash reappeared.
The crash is observed on the following Android versions:
Android 13
Android 11
Android 8.1.0
Android 7.1.2
And the following devices:
Galaxy A53 5G
Nexus 5X
Standard PC (i440FX + PIIX, 1996)
vivo S1
OnePlus8Pro
Mi 9x
Edit:
I can see that 44% of the affected devices are rooted. Does it mean I should not worry about the issue?
We are too facing this kinda of error a lot in our app. So,By doing little bit of search, I am changing ContextCompat to AppCompatResources to get the drawables. I seriously don't know now yet it will be beneficial for our app or not but reason to change is simply because the way ContextCompat returns result with respect to the way the AppCompatResources returns result. ContextCompat is just calling context's getDrawable method which in turn calls Resource's getDrawable method which in turn calls ResourceImpl getValueForDensity method and finally calling a native method. Whereas AppCompatResources calls AppCompatDrawableManager's getDrawable method which try different approaches to get the drawable and eventually fallback to ContextCompat if none of the approaches work. This seems to be better candidate for me get the drawable.
AppCompatDrawableManager's getDrawable method
public Drawable getDrawable(#NonNull Context context, #DrawableRes int resId,
boolean failIfNotKnown) {
checkVectorDrawableSetup(context);
Drawable drawable = loadDrawableFromDelegates(context, resId);
if (drawable == null) {
drawable = createDrawableIfNeeded(context, resId);
}
if (drawable == null) {
drawable = ContextCompat.getDrawable(context, resId);
}
if (drawable != null) {
// Tint it if needed
drawable = tintDrawable(context, resId, failIfNotKnown, drawable);
}
if (drawable != null) {
// See if we need to 'fix' the drawable
DrawableUtils.fixDrawable(drawable);
}
return drawable;
}
This answer also has useful information too.
ContextCompat is creating the issue
use it directly
getDrawable(context, R.drawable.ic_notification_icon)

Getting "no method with name='setBackground'" upon changing .Background property on legacy Android versions (<4.1)

Getting,
no method with name='setBackground' signature
or
no method with name='setBackground'
upon changing .Background property (to change the background visuals) in the app running on legacy Android versions (<4.1)
Any ideas on how to fix this?
As this question about Eclipse suggests, setBackground is problematic on API below level 16. Unlike covered in the question though, to work around the issue AND have your code Android 4.0-compatible, you'd want to change your background with the following (reproducible logic)
if (Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.JellyBean)
{
layout.SetBackgroundDrawable(gd);
}
else
{
layout.Background = gd;
}

Android svg parsing , official library issues

Hello im writing an android app using the android svg-android.jar. (I think it's the google official library) I'm trying to parse my svg im getting an error. my svg falls on this line :
<stop offset="0.1774" style="stop-color:#EDEDED;stop-opacity:0.2"/>
the error i get is this :
java.lang.NumberFormatException: Invalid int: "EDEDED;stop-opacity:0.2"
in the google code for the project i saw this :
if (gradient != null) {
float offset = getFloatAttr("offset", atts);
String style = getStringAttr("style", atts);
if (style.startsWith("stop-color:#")) {
int color = Integer.parseInt(style.substring("stop-color:#".length()), 16);
color |= 0xFF000000;
gradient.positions.add(offset);
gradient.colors.add(color);
}
}
it seems that google can't handle the style having opacity too.
the svg itself is generated through a program .
my question is this: is there another android library for svg parsing ? i searched and couldn't find .
does the google code site doens't have the latest code ?(google i heard stopped supporting it)
is there another way to give opacity to the stop element which doesn't include the style attribute ?
or most annoying option should I wait for whoever wrote it to fix it ?(commented on google code project site also but the last comment is from 2014 don't know if i get referrenced at all).
help would be appreciated thanks !
There is another to give opacity to the stop element which doesn't include the style attribute, mapped CSS attributes e.g.
<stop offset="0.1774" stop-color="#EDEDED" stop-opacity="0.2"/>

How to fix: android.app.RemoteServiceException: Bad notification posted from package *: Couldn't create icon: StatusBarIcon

I'm seeing the following exception in crash logs:
android.app.RemoteServiceException: Bad notification posted from package com.my.package: Couldn't create icon: StatusBarIcon(pkg=com.my.package user=0 id=0x7f02015d level=0 visible=true num=0 )
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1456)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
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)
I'm posting my Notification from an IntentService from a PendingIntent set via the AlarmManager using the following method. All values passed in here are from the bundle extras in the PendingIntent / IntentService.
/**
* Notification
*
* #param c
* #param intent
* #param notificationId
* #param title
* #param message
* #param largeIcon
* #param smallIcon
*/
public static void showNotification(Context c, Intent intent,
int notificationId, String title, String message, int largeIcon,
int smallIcon) {
PendingIntent detailsIntent = PendingIntent.getActivity(c,
notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// BUILD
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
c);
// TITLE
mNotifyBuilder.setContentTitle(title).setContentText(message);
// ICONS
mNotifyBuilder.setSmallIcon(smallIcon);
if (Util.isAndroidOSAtLeast(Build.VERSION_CODES.HONEYCOMB)) {
Bitmap large_icon_bmp = ((BitmapDrawable) c.getResources()
.getDrawable(largeIcon)).getBitmap();
mNotifyBuilder.setLargeIcon(large_icon_bmp);
}
mNotifyBuilder.setContentIntent(detailsIntent);
mNotifyBuilder.setVibrate(new long[] { 500, 1500 });
mNotifyBuilder.setTicker(message);
mNotifyBuilder.setContentText(message);
// NOTIFY
NotificationManager nm = (NotificationManager) c
.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(notificationId, mNotifyBuilder.build());
}
From what I've seen of other answers - the exception I'm seeing happens when setSmallIcon() is not called properly.
I've checked and double checked that the Resource IDs being passed are all correct.
What was happening was, I was including the integer reference to the icon in the PendingIntent bundle, and that integer was later being referenced while being posted to the NotificationManager.
In between getting the integer reference and the pending intent going off, the app was updated and all of the drawable references changed. The integer that used to reference the correct drawable now referenced either the incorrect drawable or none at all (none at all - causing this crash)
Using VectorXml inside your notification has been known to cause this issue. Use png's
Don't use SVG on Kitkat!
I had the same issue every time when I wanted to show a notification on Kitkat. What caused the problem for me is that I have defined every icon in xml (from svg), the small icon and the action icon also. After I have replaced them with png-s the problem solved at my side.
My problem was that the icon I was using on
.setSmallIcon(R.drawable.ic_stat_push_notif)
wasn't generated accordingly. According to the official doc:
As described in Providing Density-Specific Icon Sets and Supporting
Multiple Screens, you should create separate icons for all generalized
screen densities, including low-, medium-, high-, and
extra-high-density screens. This ensures that your icons will display
properly across the range of devices on which your application can be
installed.
So the best way to fullfill the above, I used Notification Generator provided by Roman Nurik on https://romannurik.github.io/AndroidAssetStudio/index.html
In that way, you can use an image (taking into consideration that this has to have transparent background) and let the generator do the job for you generating the different sizes for notification icons.
The most important thing is that if the icon generator after you browse the image you are going to use shows you a white filled circle or square, there are problems with your image, maybe because it doesn't have any transparencies, so make sure that you has this ok.
android.app.RemoteServiceException: Bad notification posted
I had the same issue, but I was resolved. My problem is ".xml file" of Remote view.
In my xml file I was added one View in between the LinearLayout for divider.
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="#+id/view"
android:background="#000000" />
The above View component creating the Bad notification exception. This Exception reason is only xml file of Remoteviews.
After removing that View component, My code executed properly, without any exception. So I felt that Notification drawer not accepting any customized views.
So you don't draw any thing like the above view in the .xml file of RemoteView object.
In my app, this kind of bug happens only during upgrading. If the resource id changes in the newer version, Android RemoteView may fail to find the resource and throw out the RemoteServiceException. If you publish a 3rd version and do not change the resource id, the bugs may disappear only temporarily.
It is possible to reduce this kind of bugs by editing res/values/public.xml and res/values/ids.xml. Compiler will generate an individual resource id if the resource id is not in public.xml or ids.xml. When u change the resource name or add some new resources, the id may change and some devices may fail to find it.
So the step is as following:
Decompile the apk file and in res/values find the public.xml and ids.xml
Find all resources related to RemoteView in your app and copy them ( strings, dimen, drawable, layout, id, color... )
Create public.xml and ids.xml under res/values in your source code and paste the lines u just copied
Note:
Gradle 1.3.0 and above ignore the local public.xml. To make it work, u need to add some script in your build.gradle
afterEvaluate {
for (variant in android.applicationVariants) {
def scope = variant.getVariantData().getScope()
String mergeTaskName = scope.getMergeResourcesTask().name
def mergeTask = tasks.getByName(mergeTaskName)
mergeTask.doLast {
copy {
int i=0
from(android.sourceSets.main.res.srcDirs) {
include 'values/public.xml'
rename 'public.xml', (i == 0? "public.xml": "public_${i}.xml")
i++
}
into(mergeTask.outputDir)
}
}
}
}
Note:
This script does not support submodules project. I am trying to fix it.
In Android Studio version 3.0.0 and above, when adding a new image in the drawables folder choose drawable instead of drawable-v24.
If the image,you are using, is alread a (v24) just copy it and paste it in its same directory (eg. drawables). This time it will ask you which regular or v24 - just make sure its not the v24 and try it again this should fix the error.
Just in case the icon is not important, you can replace,
R.drawable.your_icon
To
android.R.drawable.some_standard_icon
This works!
I had RemoteServiceException when use Notification in my class extends from FirebaseMessagingService. I added the following code to AndroidManifest.xml:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="#drawable/ic_small" />
Also resource ic_small set in instance of a class Notification.Builder by method setSmallIcon(int icon).
You have pass same icon
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="#drawable/ic_stat_name" />
and you notification
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_stat_name)
.setContentTitle("Title")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
If you have a notification visible while your app is updated, you might run into this. What you may need to do is create a BroadcastReceiver that waits for a PACKAGE_CHANGED message, at which point you shutdown all your services which will also dismiss their associated notifications.
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_CHANGED" />
</intent-filter>
</receiver>
Same issue happened with me as well and I have solved the same
REASON: This is happening because of we are using vector drawable for RemoteViews and vector drawable generates drawable at compile-time. Also I am not sure why some devices are not able to detect the generated drawable resources id while we are upping the app. But yes this was the reason.
REPRODUCE
Steps
1. Install previous build.
2. Send a notification
3. Update the build with next version code
4. After updating the app don't open the app and send notification again
SOLUTION
Replace the vector drawable with normal drawable(.png or .jpg) file.
I hope this resolves the problem.
You can put that vector xml file in both drawable and drawable v24. Those android version less than or equal to Android 6 will pick it up from drawable folder, and and newer version above android 6 will pick it up from drawable v24.
Its not about the Image type (vector, png, etc.) but the folder to which you are referring
to.
For me the error caused was due to a device (Nougat) referring to an icon present in v26 folder.
Solution: Just add the relevant icon to the other folder as well and the issue will be gone.
I had the same issue when I set a notification in a bundle.
I tried this and it solved my problem:
builder.setLargeIcon(large_icon);
builder.setSmallIcon(R.drawable.small_icon);
Make sure that setLargeIcon() invoked before setSmallIcon().
I too had the same issue. The issue is with the icon which you are using, I was using android.R.drawable.stat_sys_download. Go to drawables.xml and paste this.
<resources>
<item name="ic_start_download" type="drawable">#android:drawable/stat_sys_download</item>
</resource>
and then in your code
builder.setSmallIcon(R.drawable.ic_start_download);
You can try some other image instead of this image
My way to solve this: I had "bad" views in my layout (ex: a checkbox) - so I removed them.
RemoteViews seem to support only images and texts (to be confirmed by reading the doc).
I had RemoteServiceException when use android.support.constraint.ConstraintLayout. Change it to LinearLayout or Relative
and also android:layout_height="wrap_content" for container
(this is not solution for current question but helps someone with similar core issue) I too had the same issue, But in my case I have used corrupted .png file which is causing same issue. So I have deleted it and re-included correct .png file.
Please replace <android.support.v7.widget.AppCompatTextView with <TextView from custom notification layout.
Because android.support.v7.widget.AppCompatTextView or android.support.v7.widget.AppCompatImageView only works at runtime.
So Use TextView or ImageView
If any one still facing this issue :
Add a png file in your drawable folder with name ic_stat_ic_notification (or any name u like )
and in your manifest add below couple of lines
and u can create your icons over here - >
https://romannurik.github.io/AndroidAssetStudio/icon
I got this error due to autolink and linksClickable options in textview in notification view:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="all"
android:linksClickable="true"
android:text="#string/app_name"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#color/white" />
Be careful!
It was a problem of icon location. In my case the notification icon was in drawable-anydpi-v24, I simply copied the icon in drawable folder and the error has gone.
Got this error in my Flutter android app and checked to see that all the resources are present and named correctly but still not working, I was using resources from mipmap. I changed it to drawable and placed the notification icons inside drawble folders and fixed the issue, hoping it might help someone later on
Synchrinize the project and than Clean it,
File > Synchronize then : Build > Clean Project
I hope that will help you all, It's work for me
This worked for me. Comment the reference of the icon and thus be able to use the NotificationCompat.Builder without problems.
$msg_notificacion = [
'title' => "titulonotif",
// "icon" : "myicon",
'body' =>"cuerponotif"
];

Getting the v7 compat ActionBarContainer

As part of an app I'm working on, I'm attempting to obtain a reference to the ActionBar's container view. I used the answer from this question, and it's working nicely for me as long as the Android device in question is running API level 11 or up. However, the app needs to work as far back as API level 9 (the target API level is 19), and Gingerbread devices are giving me problems. I was originally using Sherlock for the project, but recently made the switch over to the v7 compat library instead. I can see and interact with the action bar in normal ways on Gingerbread devices (buttons work, etc.), but it fails when I attempt to get the container. The code I'm using is this (note - it's running inside a subclass of ActionBarActivity):
private FrameLayout getActionBarContainer() {
FrameLayout result = null;
int resId = getResources().getIdentifier("action_bar_container", "id", "android");
try {
result = (FrameLayout)getWindow().getDecorView().findViewById(resId);
}
catch (Exception e) {
// If we get an exception, just eat it
}
return result;
}
To answer a few questions before they get asked:
resId resolves to a proper ID value on v11 devices and up, but resolves to 0 on pre-v11 devices.
The code that uses this has proper checks to handle a null result, which is why I'm just eating the exceptions. The try/catch block is mostly just there in case, by some freak occurrence, a ClassCastException manages to get thrown (which it never should, since the container is a subclass of FrameLayout).
I've checked and re-checked my imports; all of my ActionBar references (and all things related, like the ActionBarActivity superclass I'm extending) are the v7 compat library versions, not the standard library versions.
The action_bar_container ID should exist within the v7 compat library, if this is any indication.
I'm about out of ideas at this point. Is there something simple I'm missing? Any suggestions will be appreciated, and if you need more context/clarification, let me know.
I think your error is on the last parameter of
int resId = getResources().getIdentifier("action_bar_container", "id", "android");
For api level <11 the package should be your application's package and not the plataform's package "android"

Categories

Resources