2013-02-14 2 views
0

Я пытаюсь загрузить изображения из Интернета с помощью библиотеки ImageLoader в виде сетки. Но, получив исключение нулевого указателя в imageManager.getLoader().load(fView.pic);.Изображение не загружается с помощью Novoda/ImageLoader

Может кто-нибудь сказать мне, где я ошибаюсь.

StartApp класс:

public class StartApp extends Application { 

    private static ImageManager imageManager; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     LoaderSettings settings = new LoaderSettings(); 

     settings.setDisconnectOnEveryCall(true); 
     settings.setCacheManager(new LruBitmapCache(this)); 

     imageManager = new ImageManager(this, settings); 
     // // To clean the file cache 
     // imageManager.getFileManager().clean(); 

    } 

    public static ImageManager getImageLoader() { 
     return imageManager; 
    } 
} 

Класс активности:

public class MainActivity extends Activity { 
    private GridView gridview; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.grid_layout); 

     gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setPadding(10, 10, 10, 10); 
     gridview.setAdapter(new GridImageAdapter(this)); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

GridView адаптер класса, который расширяет BaseAdapter:

public class GridImageAdapter extends BaseAdapter { 
    private Context context; 
    private int width = 270; 
    private int height = 270; 
    private int textFactor = 35; 
    private LayoutInflater layoutInflater; 

    private String[] nameEvents = {"image1","image2"}; 
    private String[] urls = {"http://api.androidhive.info/images/sample.jpg","http://api.androidhive.info/images/sample.jpg" }; 
    ImageManager imageManager; 
    ImageTagFactory imageTagFactory; 

    public GridImageAdapter(Context mContext) { 
     context = mContext; 
     layoutInflater = LayoutInflater.from(context); 

     /*Image Loader*/ 
     imageManager = StartApp.getImageLoader(); 
     imageTagFactory = ImageTagFactory.newInstance(context, R.drawable.ic_launcher); 
     imageTagFactory.setErrorImageId(R.drawable.not_found); 
    } 

    public int getCount() { 

     return nameEvents.length; 
    } 

    public Object getItem(int position) { 

     return position; 
    } 

    public long getItemId(int position) { 

     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     FriendView fView = new FriendView(); 
     int imagePadding = 10; 
     if (convertView == null) { 
      convertView = new View(context); 
      convertView = layoutInflater.inflate(R.layout.grid_cell_layout, 
        null); 
      // convertView.setBackgroundColor(Color.DKGRAY); 
      convertView.setPadding(3, 0, imagePadding - 1, imagePadding); 
      convertView.setBackgroundResource(R.drawable.background_shadow); 
      convertView 
        .setLayoutParams(new GridView.LayoutParams(width, height)); 

     } else { 
      fView = (FriendView) convertView.getTag(); 

     } 
     fView.pic = (ImageView) convertView.findViewById(R.id.image); 
     /* height has to be reduced to display the text */ 
     fView.pic.setLayoutParams(new LinearLayout.LayoutParams(width, height 
       - textFactor)); 
     fView.pic.setAdjustViewBounds(true); 
     fView.pic.setScaleType(ImageView.ScaleType.FIT_XY); 



     //((StartApp) context.getApplicationContext()).getImageLoader().getLoader().load(imageView); 
     fView.name = (TextView) convertView.findViewById(R.id.title); 
     fView.name.setTextColor(Color.BLACK); 
     convertView.setTag(fView); 

     fView.name.setText(nameEvents[position]); 
    // GridImageAdapter.imageLoader.DisplayImage(urls[position], fView.pic); 
     ((ImageView) fView.pic).setTag(imageTagFactory.build(urls[position],context)); 
     imageManager.getLoader().load(fView.pic); 

     return convertView; 
    } 

    static class FriendView { 
     TextView name; 
     ImageView pic; 
    } 
} 

Спасибо заранее.

+0

См. [Это] (http://stackoverflow.com/a/13526364/1289716), ответ вам поможет. – MAC

+0

Спасибо @ MAC.But, я использую библиотеку ImageLoader для загрузки изображений, а затем устанавливаю его в адаптер сетки. – jasdmystery

ответ

0

Прежде всего, не создавайте еще один объект imagemanager в вашем адаптере. Сделайте StartApp.getImageLoader(). GetLoader(). Load (fView.pic);

Во-вторых, нулевой указатель можно легко найти, добавив несколько нулевых проверок и/или протоколирования, если вещи имеют нулевой или нет. После этого мы можем указать, какой объект имеет значение null.

Пример:

if(StartApp.getImageLoader().getLoader() != null) { 
    StartApp.getImageLoader().getLoader().load(fView.pic); 
} 
0

Похоже, вы не устанавливать правильно класс приложения Убедитесь, что объявить класс Application в манифесте как:

<application android:name="class" ... 

Вы должны убедиться, что OnCreate это выполняется, может быть, поставить некоторый журнал. Вы не должны проверять, чтобы ImageManager был пустым, если он имеет значение null, есть что-то неправильное.

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