2013-12-13 2 views
0

Я хочу показать изображение из URL я использовал растровое изображение, но изображение не отображается, но получил нулевой указатель исключение, пожалуйста, помогите меня.Я хочу показать его в виде списка текст показывает правильно, но только изображение не показываяИсключение нулевого указателя

public class CustomListViewAdapter extends ArrayAdapter<RowItem> { 

    Context context; 

    public CustomListViewAdapter(Context context, int resourceId, 
      List<RowItem> items) { 
     super(context, resourceId, items); 
     this.context = context; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     ImageView imageView; 
     // TextView txtTitle; 
     TextView name; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     RowItem rowItem = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      /*holder.txtTitle = (TextView) convertView.findViewById(R.id.title);*/ 
      holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.name.setText(rowItem.getName()); 
    // holder.txtTitle.setText(rowItem.getTitle()); 


     //holder.imageView.setImageResource(rowItem.getImageId()); 

     Bitmap bitMap=downloadImage(rowItem.getImageUrl()); 
     holder.imageView.setImageBitmap(bitMap); 
//  holder.imageView.setVisibility(ImageView.VISIBLE); 
     return convertView; 
    } 



    private Bitmap downloadImage(String url) { 
     Bitmap bitmap = null; 
     InputStream stream = null; 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 

     try { 
      stream = getHttpConnection(url); 
      bitmap = BitmapFactory. 
        decodeStream(stream, null, bmOptions); 
      stream.close(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return bitmap; 
    } 

    // Makes HttpURLConnection and returns InputStream 
    private InputStream getHttpConnection(String urlString) 
      throws IOException { 
     InputStream stream = null; 
     URL url = new URL(urlString); 
     URLConnection connection = url.openConnection(); 

     try { 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       stream = httpConnection.getInputStream(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return stream; 
    } 
} 

Вход кот

12-13 04:17:09.349: E/AndroidRuntime(3236): FATAL EXCEPTION: main 
12-13 04:17:09.349: E/AndroidRuntime(3236): java.lang.NullPointerException 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at com.example.gdirectory.CustomListViewAdapter.downloadImage(CustomListViewAdapter.java:80) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at com.example.gdirectory.CustomListViewAdapter.getView(CustomListViewAdapter.java:60) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.AbsListView.obtainView(AbsListView.java:2177) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.ListView.makeAndAddView(ListView.java:1840) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.ListView.fillDown(ListView.java:675) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.ListView.fillFromTop(ListView.java:736) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.ListView.layoutChildren(ListView.java:1655) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.AbsListView.onLayout(AbsListView.java:2012) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.View.layout(View.java:14289) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewGroup.layout(ViewGroup.java:4562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.View.layout(View.java:14289) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewGroup.layout(ViewGroup.java:4562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.View.layout(View.java:14289) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewGroup.layout(ViewGroup.java:4562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.View.layout(View.java:14289) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewGroup.layout(ViewGroup.java:4562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.View.layout(View.java:14289) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewGroup.layout(ViewGroup.java:4562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.Choreographer.doFrame(Choreographer.java:532) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.os.Handler.handleCallback(Handler.java:730) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.os.Looper.loop(Looper.java:137) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at java.lang.reflect.Method.invoke(Method.java:525) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-13 04:17:09.349: E/AndroidRuntime(3236):  at dalvik.system.NativeStart.main(Native Method) 
+0

Будете ли вы так любезны, чтобы разместить логарифм, пожалуйста? – Kristopher

+3

Какая строка в коде генерирует исключение нулевого указателя? –

+2

Мое предположение: URL недействителен (код ответа не HTTP_OK), поэтому объект 'stream' имеет значение null. – Fortega

ответ

-1

NullPointer происходит где-то в в методе downloadImage(). В строке 80 поместите там точку останова, и у вас будет больше информации о ситуации. URL-адрес, вероятно, недействителен или недействителен.

+1

, вы должны поместить это как комментарий. –

+0

stream.close(); это строка, я получил исключение –

+0

Не поток приходит именно поэтому. вы вызываете stream.close() в нулевом потоке. –

0

Возможно, наш URL-адрес недействителен и getHttpConnection возвращает null. Затем, когда вы пытаетесь закрыть InputStreem, вы получили NullPointerException.

Вы должны оставить сообщение об ошибке, которое напечатано на методе getHttpConnection. Тогда мы сможем сказать, что случилось.

0

Пожалуйста, измените его в

public class CustomListViewAdapter extends ArrayAdapter<RowItem> { 

    Context context; 
    private List<RowItem> items; 
    public CustomListViewAdapter(Context context, int resourceId, 
      List<RowItem> items) { 
     super(context, resourceId, items); 
     this.context = context; 
     this.items= items; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     ImageView imageView; 
     // TextView txtTitle; 
     TextView name; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 


     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.name); 
      /*holder.txtTitle = (TextView) convertView.findViewById(R.id.title);*/ 
      holder.imageView = (ImageView) convertView.findViewById(R.id.icon); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.name.setText(items.get(position).getName()); 

     Bitmap bitMap=downloadImage(items.get(position).getImageUrl()); 
     holder.imageView.setImageBitmap(bitMap); 
     return convertView; 
    } 



    private Bitmap downloadImage(String url) { 
     Bitmap bitmap = null; 
     InputStream stream = null; 
     BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
     bmOptions.inSampleSize = 1; 

     try { 
      stream = getHttpConnection(url); 
      bitmap = BitmapFactory. 
        decodeStream(stream, null, bmOptions); 
      stream.close(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return bitmap; 
    } 

    // Makes HttpURLConnection and returns InputStream 
    private InputStream getHttpConnection(String urlString) 
      throws IOException { 
     InputStream stream = null; 
     URL url = new URL(urlString); 
     URLConnection connection = url.openConnection(); 

     try { 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       stream = httpConnection.getInputStream(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return stream; 
    } 
} 
0

Вы поставили, если заявление и измененное значение записи потока, но если условие ложно, если поток будет нулевым if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { stream = httpConnection.getInputStream(); }. Поэтому добавьте инструкцию else и измените значение потока с нуля на значение.

Надеюсь, это поможет! Удачи с вашим проектом!

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