android GridView 通过json显示网络图片和文字
2013-08-25 21:53
369 查看
思路: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>
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>
相关文章推荐
- android GridView 通过json显示网络图片和文字
- android GridView 通过json显示网络图片和文字
- Android ListView从网络获取图片及文字显示
- Android ListView从网络获取图片及文字显示
- android的GridView显示网络图片的方法 .
- Android ListView从网络获取图片及文字显示
- Android ListView从网络获取图片及文字显示---图片缓存,多线程处理
- android TextView如何通过setCompoundDrawables调整文字和图片的位置(文字显示在图片内)?
- Android ListView从网络获取图片及文字显示
- 从网络端leanCloud获取上传的图片和文字并以listview的形式显示在android端
- Android ListView从网络获取图片及文字显示
- android:通过url向网络端获取json格式数据并解析显示
- Android ListView从网络获取图片及文字显示
- Android ListView从网络获取图片及文字显示
- Android ListView从网络获取图片及文字显示
- Android中通过Picasso来加载网络图片,并通过ListView显示出来。
- Android ListView从网络获取图片及文字显示
- Android ListView从网络获取图片及文字显示
- Android通过网络URL获取图片并显示
- 在android中用NetworkImageView读取网络图片并通过ListView显示出来