现在的位置: 首页 > 综合 > 正文

android GridView 通过json显示网络图片和文字

2013年02月13日 ⁄ 综合 ⁄ 共 4405字 ⁄ 字号 评论关闭

思路:1.获取json数据得到图片地址,图片简介文字存放在容器中

      2.设置adapter,从容器中取出数据,显示在adapter中
具体代码:
MainActivity : 
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("用图片填充GridView");
GridView gridview = (GridView) findViewById(R.id.grid_view);
List<HashMap<String, String>> list = getimageList();
gridview.setAdapter(new GridViewAdapter(this, list));
}
// 从json中获取,图片地址、专辑名存放在list中
public List<HashMap<String, String>> getimageList() {
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
String body;
try {
//Constants.URL json地址,getContent用来获取数据流
body = JsonUtil.getContent(Constants.URL);
JSONArray array = new JSONArray(body);
for (int i = 0; i < array.length(); i++) {
JSONObject jobj = array.getJSONObject(i);
HashMap<String, String> map = new HashMap<String, String>();
//“你的json地址”+json中取图片的相对地址得到绝对地址
map.put("itemImage",
Constants.ABSOLUTE_URL + jobj.getString("music_pic"));
map.put("itemText", jobj.getString("music_name"));
list.add(map);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
GridViewAdapter:
public class GridViewAdapter extends BaseAdapter {
private List<HashMap<String, String>> list;
private Context context;
public GridViewAdapter(Context context, List<HashMap<String, String>> list) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
MyView tag;
if (convertView == null) {
View v = LayoutInflater.from(context).inflate(
R.layout.gridview_list, null);
tag = new MyView();
tag.imageView = (ImageView) v.findViewById(R.id.grid_image);
tag.textView = (TextView) v.findViewById(R.id.grid_time);
v.setTag(tag);
convertView = v;
} else {
tag = (MyView) convertView.getTag();
}
String image_path = list.get(position).get("itemImage");
String text = list.get(position).get("itemText");
Bitmap bm = getBitMap(context, image_path);
if (bm == null) {
bm = BitmapFactory.decodeResource(context.getResources(),
R.drawable.error);
Log.i("BitmapPicture", "picture is null!!");
}
Bitmap newBit = Bitmap.createScaledBitmap(bm, 400, 300, true);
tag.imageView.setImageBitmap(newBit);
tag.textView.setText(text);
return convertView;
}
public synchronized Bitmap getBitMap(Context c, String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
bitmap = BitmapFactory.decodeResource(c.getResources(),
R.drawable.error); // 当网络连接异常后,给个默认图片
return bitmap;
}
try {
// 打开网络连接
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream(); // 把得到的内容转换成流
int length = (int) conn.getContentLength(); // 获取文件的长度
if (length != -1) {
byte[] imgData = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, imgData, destPos, readLen);
destPos += readLen;
}
bitmap = BitmapFactory.decodeByteArray(imgData, 0,
imgData.length);
}
} catch (IOException e) {
bitmap = BitmapFactory.decodeResource(c.getResources(),
R.drawable.error);
return bitmap;
}
return bitmap;
}
}
class MyView {
ImageView imageView;
TextView textView;
}
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<GridView
    android:id="@+id/grid_view"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:numColumns="2" 
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:columnWidth="20dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>
</LinearLayout> 
gridview_list.xml:
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="127dp"
        android:layout_height="96dp"
        android:gravity="center_vertical|center" >
        <ImageView
            android:id="@+id/grid_image"
            android:layout_width="125dp"
            android:layout_height="94dp" 
            android:contentDescription="@string/grid_image"/>
    </LinearLayout>
    <TextView
        android:id="@+id/grid_time"
        android:layout_width="127dp"
        android:layout_height="wrap_content"
        android:gravity="center" />
</LinearLayout>

抱歉!评论已关闭.