2015-02-19 3 views
3

Я пытаюсь написать приложение для Android, которое будет просматривать файлы на телефоне. Когда я запустить приложение на эмуляторе, я получаю следующие ошибки:

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) 

Вот ява код 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; 
} 

} 

UPDATE Вот код Item.java:

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(); 
} 

} 

Может кто-нибудь помочь мне решить эту проблему?

Заранее благодарен!

+0

Что такое строка 56 в 'FileArrayAdapter.java'? –

+0

Что означает 'i.getData() 'и' i.getDate() 'return? Это «Струны» или что-то еще? – codeMagic

+0

Вы пробовали его как «int imageResource = c.getResources(). GetIdentifier (i.getImage(),« drawable », c.getPackageName());'? –

ответ

4

Не беспокойтесь. , ,

я получил ту же проблему, прежде чем .use мой способ получить Drawable

Drawable image = c.getResources().getDrawable(R.drawable.name_of_image_in_drawableFolder); 

пример:

Drawable image = c.getResources().getDrawable(R.drawable.ic_launcher); 

Это определенно Solove вашу проблему.

Но, Если вы не имеете изображения в вытяжке папку Там может быть два максимальными возможностями

- Getting Drawable from Phone(SDCARD) 
- Getting Drawable from url 

В первом случае

imageCity.setImageBitmap(BitmapFactory.decodeFile(Environment.getExternalStorage‌​Directory()+"image.png")); 

Во втором случае

imageCity.setImageDrawable(drawableFromUrl("url")); 
    public Drawable drawableFromUrl(String url) throws IOException { 
     Bitmap x; 
     HttpURLConnection connection = (HttpURLConnection) new URL(url) 
       .openConnection(); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     x = BitmapFactory.decodeStream(input); 
     return new BitmapDrawable(x); 
    } 

Ссылка: Android Drawable Images from URL

Если проблема не устранена, вы можете связаться со мной [email protected].

+0

У меня нет папки 'drawable' в моем проекте Eclipse. – user2201650

+0

Если вы получаете изображение из SDCARD (PHONE), используйте код ниже imageCity.setImageBitmap (BitmapFactory.decodeFile (Environment.getExternalStorageDirectory() + "image.png")); –

+0

Другая возможность - получить URL-адрес. imageCity.setImageDrawable (drawableFromUrl ("url")); public Drawable drawableFromUrl (String url) throws IOException { Bitmap x; HttpURLConnection connection = (HttpURLConnection) новый URL (url) .openConnection(); connection.connect(); InputStream input = connection.getInputStream(); x = BitmapFactory.decodeStream (ввод); return new BitmapDrawable (x); } ссылка: http: //stackoverflow.com/questions/3375166/android-drawable-images-from-url –

4

Этот код вызывает проблему:

String uri = "drawable/" + i.getImage(); 
int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName()); 

Есть по крайней мере, 2 проблемы здесь:

  1. Ури не должны иметь префикс «рисуем»
  2. призыв к getIdentifier должен pass 'drawable' в качестве типа ресурса

Итак, воспользуйтесь этим кодом:

String uri = i.getImage(); 
int imageResource = c.getResources().getIdentifier(uri, "drawable", c.getPackageName()); 

ПРИМЕЧАНИЕ: Вы не отправлял Item класс, или то, что getImage делает. Если вы все еще получаете исключение (поскольку imageResource равно 0), это связано с тем, что у вас нет ресурса с именем с таким же точным именем, как и для i.getImage(), поэтому вам также нужно будет это проверить.

+0

Я обновил свой вопрос выше с помощью кода 'Item.java'. Я попробовал то, что вы сказали. Но я все равно получаю то же исключение. – user2201650

+0

Вы прочитали мою заметку? Что точно возвращает getImage()? У вас есть ресурс с нулевым именем (минус расширение)? Вам нужно разместить дополнительную информацию или просто вычислить ее. –

+0

getImage() возвращает строку из файла Item.java. – user2201650

Смежные вопросы