Почему изображение не отображается в виде списка?

#android

#Android

Вопрос:

это изображение кода не отображается в виде списка, как я могу решить эту проблему?Я установил значение uri в bitmap.so в чем проблема? изменил массив, и ошибка устранена, поскольку неподвижное изображение не отображается в виде списка. MainActivity.java

 public class MainActivity extends Activity {
    ListView lv;
    Context context;

    ArrayList prgmName;
    Bitmap bitmap;
    //bitmap=getBitmapFromUrl("http://content6.flixster.com/movie/11/17/75/11177548_pro.jpg");

    public static String [] prgmNameList={"Let Us C","c  ","JAVA","Jsp","Microsoft .Net","Android","PHP","Jquery","JavaScript"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bitmap=getBitmapFromUrl("http://content6.flixster.com/movie/11/17/75/11177548_pro.jpg");
        context=this;
        Bitmap  [] prgmImages ={bitmap,bitmap,bitmap,bitmap,bitmap,bitmap,bitmap,bitmap,bitmap};
        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, prgmNameList,prgmImages));

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    private Bitmap getBitmapFromUrl(String src) {
        // TODO Auto-generated method stub
        try {

            URL url =new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input=connection.getInputStream();
            Bitmap mybiBitmap=BitmapFactory.decodeStream(input);
            return mybiBitmap;


         } catch (Exception e) {
            // TODO: handle exception
           e.printStackTrace();
           return null;
         }


    }

}
 

CustomAdapter.java

 public class CustomAdapter extends BaseAdapter{
    String [] resu<
    Context context;
 Bitmap[] imageId;
      private static LayoutInflater inflater=null;
    public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, Bitmap[] prgmImages) {
        // TODO Auto-generated constructor stub
        result=prgmNameList;
        context=mainActivity;
        imageId=prgmImages;
         inflater = ( LayoutInflater )context.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class Holder
    {
        TextView tv;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;        
             rowView = inflater.inflate(R.layout.list_item, null);
             holder.tv=(TextView) rowView.findViewById(R.id.textView1);
             holder.img=(ImageView) rowView.findViewById(R.id.imageView1);       
//         holder.tv.setText(result[position]);
//         holder.img.setImageBitmap(imageId[position]);         
             if(result != null amp;amp; result.length > position)
             { 
               holder.tv.setText(result[position]);
             }

             if(imageId != null amp;amp; imageId.length > 0)
             {
                holder.img.setImageBitmap(imageId[0]); 
             }

             rowView.setOnClickListener(new OnClickListener() {         
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "You Clicked " result[position], Toast.LENGTH_LONG).show();
            }
        });  
        return rowView;
    }

}
 

activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:textStyle="bold"
        android:text=" Your Theaters..." />

    <ListView
        android:id="@ id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>
    </LinearLayout>
 

list_item.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@ id/imageView1"
        android:layout_gravity="center"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@ id/textView1"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:text="TextView" />


</LinearLayout>
 

Комментарии:

1. Также опубликуйте свой файл list_item XML-макета.

2. Проверьте журнал, получаете ли вы какую-либо ошибку

3. Вы добавили «<uses-permission android:name=»android.permission. ИНТЕРНЕТ » /> » разрешение в манифесте?

4. Вам нужно вызвать notifyDataSetChanged() в вашем адаптере, когда растровое изображение уже загружено.

Ответ №1:

Вероятно, это происходит потому, что перед загрузкой и сохранением растровых изображений в ваш массив вы вызываете adapter . Загрузка изображений занимает некоторое время, и ваш адаптер их не ждет. Смотрите этот пример, он использует загрузчик изображений: http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text /

Комментарии:

1. Но в этом примере URL-адрес содержит XML-файл, но в моем примере URL-адрес не содержит XML-файла, так как я могу разобрать это? мой URL-адрес:reeldealsantikosapi.staging2.perpetuating.com /…

2. Вам не нужен синтаксический анализ. Просто введите свой getView адаптера: ImageLoader. Отображаемое изображение (» content6.flixster.com/movie/11/17/75/11177548_pro.jpg «, thumb_image);

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

Ответ №2:

Есть ли какие-либо NetworkOnMainThreadException в журнале?

При вызове getBitmapFromUrl из onCreate вы загружаете растровое изображение в основной поток, что запрещено, если ваше приложение нацелено на Honeycomb или более позднюю версию. В вашем случае произойдет сбой, потому что вы перехватываете исключение, но вы получите нулевой результат.

Поскольку загрузка изображений из сети очень распространена, существует множество библиотек, которые обрабатывают это (и многое другое, например, кэширование) для вас, например, Universal-Image-Loader или ion