Android - android.contenu.res.Ressources$NotFoundException: Resource ID #0 x 0
Je suis en train d'écrire une application Android qui permettrait de parcourir les fichiers sur un téléphone. Quand je lance l'application sur l'émulateur, j'obtiens les erreurs suivantes:
02-18 22:14:17.839: E/AndroidRuntime(896): FATAL EXCEPTION: main
02-18 22:14:17.839: E/AndroidRuntime(896): android.content.res.Resources$NotFoundException: Resource ID #0x0
02-18 22:14:17.839: E/AndroidRuntime(896): at android.content.res.Resources.getValue(Resources.java:1018)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.content.res.Resources.getDrawable(Resources.java:663)
02-18 22:14:17.839: E/AndroidRuntime(896): at com.example.App.FileArrayAdapter.getView(FileArrayAdapter.java:56)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.AbsListView.obtainView(AbsListView.java:2033)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.makeAndAddView(ListView.java:1772)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.fillDown(ListView.java:672)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.fillFromTop(ListView.java:732)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.ListView.layoutChildren(ListView.java:1625)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.AbsListView.onLayout(AbsListView.java:1863)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewGroup.layout(ViewGroup.java:4224)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewGroup.layout(ViewGroup.java:4224)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewGroup.layout(ViewGroup.java:4224)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.View.layout(View.java:11278)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewGroup.layout(ViewGroup.java:4224)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.os.Handler.dispatchMessage(Handler.java:99)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.os.Looper.loop(Looper.java:137)
02-18 22:14:17.839: E/AndroidRuntime(896): at android.app.ActivityThread.main(ActivityThread.java:4424)
02-18 22:14:17.839: E/AndroidRuntime(896): at java.lang.reflect.Method.invokeNative(Native Method)
02-18 22:14:17.839: E/AndroidRuntime(896): at java.lang.reflect.Method.invoke(Method.java:511)
02-18 22:14:17.839: E/AndroidRuntime(896): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-18 22:14:17.839: E/AndroidRuntime(896): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-18 22:14:17.839: E/AndroidRuntime(896): at dalvik.system.NativeStart.main(Native Method)
Voici le code java pour FileArrayAdapter.java:
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class FileArrayAdapter extends ArrayAdapter<Item>{
private Context c;
private int id;
private List<Item> items;
public FileArrayAdapter(Context context, int textViewResourceId, List<Item> objects)
{
super(context, textViewResourceId, objects);
c = context;
id = textViewResourceId;
items = objects;
}
public Item getItem(int i)
{
return items.get(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if(v == null)
{
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
}
final Item i = items.get(position);
if(i != null)
{
TextView t1 = (TextView)v.findViewById(R.id.TextView01);
TextView t2 = (TextView)v.findViewById(R.id.TextView02);
TextView t3 = (TextView)v.findViewById(R.id.TextViewDate);
ImageView imageCity = (ImageView) v.findViewById(R.id.fd_Icon1);
String uri = "drawable/" + i.getImage();
int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName());
Drawable image = c.getResources().getDrawable(imageResource);
imageCity.setImageDrawable(image);
if(t1 != null)
t1.setText(i.getName());
if(t2 != null)
t2.setText(i.getData());
if(t3 != null)
t3.setText(i.getDate());
}
return v;
}
}
Mise à JOUR Voici l'Item.java code:
public class Item implements Comparable<Item>{
private String name, data, date, path, image;
public Item(String n, String d, String dt, String p, String i)
{
name = n;
data = d;
date = dt;
path = p;
image = i;
}
public String getName()
{
return name;
}
public String getData()
{
return data;
}
public String getDate()
{
return date;
}
public String getPath()
{
return path;
}
public String getImage()
{
return image;
}
@Override
public int compareTo(Item another) {
//TODO Auto-generated method stub
if(this.name != null)
return this.name.toLowerCase().compareTo(another.getName().toLowerCase());
else
throw new IllegalArgumentException();
}
}
Quel est le numéro de ligne 56 dans
Ce n'
Avez-vous essayé comme
Numéro de la ligne 56 est
Ils sont des Chaînes de caractères.
FileArrayAdapter.java
?Ce n'
i.getData()
et i.getDate()
retour? Sont-ils Strings
ou autre chose?Avez-vous essayé comme
int imageResource = c.getResources().getIdentifier(i.getImage(), "drawable", c.getPackageName());
?Numéro de la ligne 56 est
Drawable image = c.getResources().getDrawable(imageResource);
Ils sont des Chaînes de caractères.
OriginalL'auteur user2201650 | 2015-02-19
Vous devez vous connecter pour publier un commentaire.
Ne vous inquiétez pas . . .
J'ai eu le même problème avant .Utiliser ma façon d'obtenir drawable
exemple :
Ce sera définitivement solove votre problème.
Mais,
Si vous n'avez pas les images dans le dossier drawable Il pourrait y avoir deux posibilités
Dans Le Premier Cas,
Dans le Second cas
Référence :Android Dessiné des Images à partir de l'URL
Si un problème persiste, vous pouvez me contacter [email protected] .
drawable
dossier dans mon Projet Eclipse.Si vous obtenez l'image à partir de la carte sd(TÉLÉPHONE), puis utilisez le code ci-dessous imageCity.setImageBitmap(BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"image.png"));
L'autre possibilité est de l'obtenir à partir d'une URL. imageCity.setImageDrawable(drawableFromUrl("url")); public Drawable drawableFromUrl(String url) throws IOException { Bitmap x; HttpURLConnection connexion = (HttpURLConnection) nouvelle URL(url).openConnection(); connexion.connect(); InputStream entrée = connexion.getInputStream(); x = BitmapFactory.decodeStream(entrée); return new BitmapDrawable(x); } référence:stackoverflow.com/questions/3375166/...
Vérifier ma réponse modifier
Je suis en suivant ce [lien] (custom-android-dn.blogspot.com/2013/01/...) vous Pouvez changer le code de cette liaison et d'expliquer comment faire? Merci!!!! 🙂
OriginalL'auteur Gaganpreet Singh
Ce code est à l'origine du problème:
Il y a au moins 2 problèmes ici:
getIdentifier
doit passer "drawable" comme le type de ressourceAlors, essayez ce code:
NOTE: Vous n'avez pas de poste
Item
classe, ou ce quegetImage
. Si vous obtenez toujours l'exception (car imageResource est 0), c'est parce que vous ne disposez pas d'un drawable ressource nommée avec exactement le même nom que ce que j'ai.getImage() renvoie, de sorte que vous aurez besoin de vérifier que aussi.Item.java
code. J'ai essayé ce que vous avez dit. Mais je garde toujours obtenir la même exception.Avez-vous lu ma note? Qu'est-ce que getImage() pour retourner exactement? Avez-vous un drawable de ressources, avec exactement le même nom (sans l'extension)? Vous avez besoin d'afficher plus d'informations ou tout simplement le comprendre
le getImage() retourne une Chaîne à partir de la Item.java fichier
Droit... Et, apparemment, que la chaîne ne correspond pas au nom d'une ressource! C'est pourquoi il est de retour à zéro!
Je suis en suivant ce [lien] (custom-android-dn.blogspot.com/2013/01/...) pour le codage
OriginalL'auteur Greg Ennis
Cette erreur peut également apparaître lors de l'affichage d'un
AlertDialog
dans Android lorsqu'il utiliseapplicationContext
.la solution est d'utiliser
this
:OriginalL'auteur hertzon