2014-05-27 3 views
0

Я пытаюсь заполнить свое gridview, используя URL-ссылки, объявленные в xml: , проблема в том, что когда я запускаю приложение; я получаю пустой gridview.Загрузить изображения в виде сетки из Url

MainActivity.java

public class MainActivity extends Activity { 
private GridView gridView; 
private GridViewAdapter customGridAdapter; 
TypedArray imgs; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 

    gridView = (GridView) findViewById(R.id.gridView); 
    customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData()); 
    gridView.setAdapter(customGridAdapter); 
} 

private ArrayList getData() { 
    final ArrayList imageItems = new ArrayList(); 
    // retrieve String drawable array 
    imgs = getResources().obtainTypedArray(R.array.image_ids); 
    this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 0; i < imgs.length(); i++) { 
       Drawable drawable = LoadImageFromWebOperations(imgs.getString(i)); 

       Log.i("TAG","URL de l'image : "+imgs.getString(i)); 
       Log.i("TAG","contenu du drawable : "+drawable); 


       imageItems.add(new ImageItem(drawable,"Image : "+i)); 
       Log.i("TAG","image Items : "+imageItems); 
      } 

     } 
    }); 


    return imageItems; 

} 
private Drawable LoadImageFromWebOperations(String url) 
{ 
    try 
    { 
     InputStream is = (InputStream) new URL(url).getContent(); 
     Drawable d = Drawable.createFromStream(is, "src name"); 
     return d; 
    }catch (Exception e) { 
     System.out.println("Exc="+e); 
     return null; 
    } 
} 

}

GridViewAdapter

public class GridViewAdapter extends ArrayAdapter<ImageItem> { 
private Context context; 
private int layoutResourceId; 
private ArrayList<ImageItem> data = new ArrayList<ImageItem>(); 

public GridViewAdapter(Context context, int layoutResourceId, 
         ArrayList<ImageItem> data) { 
    super(context, layoutResourceId, data); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 
    this.data = data; 
} 

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

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ViewHolder(); 
     holder.imageTitle = (TextView) row.findViewById(R.id.text); 
     holder.image = (ImageView) row.findViewById(R.id.image); 
     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    ImageItem item = data.get(position); 
    holder.imageTitle.setText(item.getTitle()); 
    holder.image.setImageDrawable(item.getImage()); 
    return row; 
} 

static class ViewHolder { 
    TextView imageTitle; 
    ImageView image; 
} 
} 

array.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<string-array name="image_ids"> 
    <item>http://media-cdn.tripadvisor.com/media/photo-s/02/83/a6/00/mon-port-hotel-spa.jpg</item> 
    <item>http://media-cdn.tripadvisor.com/media/photo-s/02/83/a6/00/mon-port-hotel-spa.jpg</item> 
    <item>http://media-cdn.tripadvisor.com/media/photo-s/02/83/a6/00/mon-port-hotel-spa.jpg</item> 
    <item>http://media-cdn.tripadvisor.com/media/photo-s/02/83/a6/00/mon-port-hotel-spa.jpg</item> 


</string-array> 

</resources> 

row_grid.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginTop="5dp" 
android:orientation="vertical" 
android:padding="5dp" 
android:clickable="true" 
android:focusable="true"> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="100dp" 
    android:layout_height="100dp" > 
</ImageView> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:gravity="center" 
    android:textSize="12sp" > 
</TextView> 

activity_main.xml

<RelativeLayout 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:background="#f0f0f0" 
tools:context=".MainActivity" > 

<GridView 
    android:id="@+id/gridView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:columnWidth="100dp" 
    android:gravity="center" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="5dp" 
    android:drawSelectorOnTop="true" 
    android:stretchMode="columnWidth" > 
</GridView> 

</RelativeLayout> 

ответ

0

проблема решена; Я добавил сразу после setContentView (R.layout.activity_main); по адресу ГлавнаяActivity

if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
Смежные вопросы