1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android 图文混排 异步加载图片

Android 图文混排 异步加载图片

时间:2019-10-07 16:26:24

相关推荐

Android 图文混排 异步加载图片

学习老罗课程的练习实例

1.原始json数据来自图灵机器人,URL为:/openapi/api?key=36082454b270b90d0900d25172097c98&info=%E9%85%92%E5%BA%97%E8%A5%BF%E5%AE%89。

json数据内容:

{"code":309000,"text":"亲,已帮您找到相关酒店","list":[{"name":"科逸连锁酒店西安东五路店","price":"¥ 94 起","icon":"/imgs/11/21/NNNN2dcn2eNDs4qZN76.jpg","satisfaction":"经济型 4.0分/86评论 夜销","detailurl":""},{"name":"西安秦逸轩酒店","price":"¥ 141 起","icon":"/imgs/11/01/GBUui7a0CnBXJ_p-776.jpg","satisfaction":"三星及舒适 4.5分/349评论 团 夜销","detailurl":""},{"name":"7天连锁酒店西安北大街地铁站莲湖...","price":"¥ 115 起","icon":"/imgs/08/09/C.vl_s-HrNagwRlvMOb76.jpg","satisfaction":"经济型 4.3分/35评论 夜销","detailurl":""},{"name":"西安天域凯莱大饭店","price":"¥ 373 起","icon":"/imgs/11/20/JhS1_thYpqAzJGq3J76.jpg","satisfaction":"五星级酒店 4.2分/376评论 夜销","detailurl":""},{"name":"西安左右客酒店","price":"¥ 432 起","icon":"/imgs/10/10/Z7-ECTZWD9VeDR0UZ76.jpg","satisfaction":"高档(同四星) 4.4分/165评论 夜销","detailurl":""},{"name":"全季酒店西安北大街西五路店","price":"¥ 209 起","icon":"/imgs/12/19/hFg6ita7XPcOSumyt76.jpg","satisfaction":"三星及舒适 4.6分/207评论 夜销","detailurl":""},{"name":"如家快捷西安钟楼东大街万达广场店","price":"¥ 95 起","icon":"/imgs/05/14/88urcV8OW7zEFIek876.jpg","satisfaction":"经济型 4.3分/891评论 团 夜销","detailurl":""},{"name":"西安美桐年华酒店","price":"¥ 170 起","icon":"/imgs/06/18/JhS1_tJdRiTaE_7QJ76.jpg","satisfaction":"二星及其他 4.5分/108评论 夜销","detailurl":""},{"name":"西安未来城好家商务酒店","price":"¥ 106 起","icon":"/imgs/12/12/nz078uvDK4gMYrmEv76.jpg","satisfaction":"三星及舒适 4.0分/143评论 夜销","detailurl":""},{"name":"银座佳驿连锁酒店西安文艺北路店","price":"¥ 98 起","icon":"/imgs/05/28/NNNN2dNl-61nwbNVN76.jpg","satisfaction":"经济型 4.2分/199评论 夜销","detailurl":""},{"name":"锦江之星西安大雁塔店","price":"¥ 149 起","icon":"/imgs/06/25/x-bNpIC1E3PXt7jeC76.jpg","satisfaction":"经济型 4.5分/328评论 夜销","detailurl":""},{"name":"陕西晶顿酒店","price":"¥ 89 起","icon":"/imgs/12/16/JhS1_thzpTZNh8jaJ76.jpg","satisfaction":"三星及舒适 4.4分/114评论 团 夜销","detailurl":""},{"name":"全季酒店西安钟楼新城广场店","price":"¥ 209 起","icon":"/imgs/09/05/JhS1_tJMREmGkx0fJ76.jpg","satisfaction":"高档(同四星) 4.4分/35评论 团 夜销","detailurl":""},{"name":"西安新润水晶岛酒店","price":"¥ 318 起","icon":"/imgs/03/12/Z7-ECTk6nr2kNI1kZ76.jpg","satisfaction":"高档(同四星) 4.3分/132评论 夜销","detailurl":""},{"name":"西安苹果之歌温泉酒店","price":"¥ 259 起","icon":"/imgs/09/29/JhS1_thXpjy5bU3WJ76.jpg","satisfaction":"高档(同四星) 4.7分/175评论 夜销","detailurl":""}]}

2.activity_main.xml

<LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/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" ><ListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content" ></ListView></LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/textView_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:layout_marginLeft="14dp"android:layout_marginTop="25dp"android:text="TextView" /><TextViewandroid:id="@+id/textView_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/textView_name"android:layout_below="@+id/textView_name"android:layout_marginTop="14dp"android:text="TextView" /><ImageViewandroid:id="@+id/imageView_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_alignTop="@+id/textView_name"android:src="@drawable/ic_launcher" /></RelativeLayout>

3.Hotel类

package com.kelly.handler_product.bean;public class Hotel {private String name;private String price;private String icon_path;public Hotel() {}public Hotel(String name, String price, String icon_path) {this.name = name;this.price = price;this.icon_path = icon_path;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public String getIcon_path() {return icon_path;}public void setIcon_path(String icon_path) {this.icon_path = icon_path;}}

4.适配器MyAdapter

package com.kelly.handler_product;import java.util.List;import android.content.Context;import android.graphics.drawable.Drawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.kelly.handler_product.LoadNetPic.ImageCallback;import com.kelly.handler_product.bean.Hotel;public class MyAdapter extends BaseAdapter {private Context context;private LayoutInflater inflater;private List<Hotel> list = null;public MyAdapter() {// TODO Auto-generated constructor stub}public MyAdapter(Context context) {this.context = context;this.inflater = inflater.from(context);}public void setData(List<Hotel> list) {this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;if (convertView == null) {convertView = inflater.inflate(R.layout.item, null);viewHolder = new ViewHolder();viewHolder.textView_name = (TextView) convertView.findViewById(R.id.textView_name);viewHolder.textView_price = (TextView) convertView.findViewById(R.id.textView_price);viewHolder.imageView_icon = (ImageView) convertView.findViewById(R.id.imageView_icon);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.textView_name.setText(list.get(position).getName());viewHolder.textView_price.setText(list.get(position).getPrice());// 这句是不得已啊,因为匿名内部类中要求必须是final 类型final ImageView imageView = viewHolder.imageView_icon;String image_path = list.get(position).getIcon_path();// 如何加载网络图片LoadNetPic loadNetPic = new LoadNetPic(image_path);loadNetPic.loadImage(new ImageCallback() {@Overridepublic void getDrawable(Drawable drawable) {imageView.setImageDrawable(drawable);}});return convertView;}private static class ViewHolder {public TextView textView_name;public TextView textView_price;public ImageView imageView_icon;}}

5.LoadNetPic.java下载网络图片 (接口回调)

package com.kelly.handler_product;import java.io.IOException;import .MalformedURLException;import .URL;import android.graphics.drawable.Drawable;import android.os.Handler;import android.os.Message;public class LoadNetPic {private String image_path;public LoadNetPic(String image_path) {this.image_path = image_path;}// 接口的回调public interface ImageCallback {public void getDrawable(Drawable drawable);}public void loadImage(final ImageCallback callback) {final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);callback.getDrawable((Drawable) msg.obj);}};new Thread(new Runnable() {@Overridepublic void run() {try {Drawable drawable = Drawable.createFromStream(new URL(image_path).openStream(), "");Message message = Message.obtain();message.obj = drawable;handler.sendMessage(message);} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}).start();}}

6.MainActivity.java

package com.kelly.handler_product;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.kelly.monUrl;import com.kelly.handler_product.bean.Hotel;import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.ListView;public class MainActivity extends Activity {private ListView listView;private MyAdapter adapter;private MyTask myTask;private List<Hotel> hotellist;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.listview);adapter = new MyAdapter(this);String url = CommonUrl.url;new MyTask().execute(url);}public class MyTask extends AsyncTask<String, Integer, List<Hotel>> {@Overrideprotected void onPreExecute() {hotellist = new ArrayList<Hotel>();super.onPreExecute();}@Overrideprotected List<Hotel> doInBackground(String... params) {// TODO Auto-generated method stub// 连接网络获取json数据并进行解析try {HttpClient client = new DefaultHttpClient();HttpPost get = new HttpPost(params[0]);HttpResponse response = client.execute(get);int code = response.getStatusLine().getStatusCode();if (code == 200) {HttpEntity entity = response.getEntity();String jsonString = EntityUtils.toString(entity, "UTF-8");JSONObject root = new JSONObject(jsonString);JSONArray jsonArray = root.getJSONArray("list");for (int i = 0; i < jsonArray.length(); i++) {Hotel hotel = new Hotel();JSONObject object = jsonArray.getJSONObject(i);String name = object.getString("name");String price = object.getString("price");String icon_path = object.getString("icon");hotel.setName(name);hotel.setPrice(price);hotel.setIcon_path(icon_path);hotellist.add(hotel);}}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}return hotellist;}@Overrideprotected void onPostExecute(List<Hotel> result) {// TODO Auto-generated method stubsuper.onPostExecute(result);adapter.setData(result);listView.setAdapter(adapter);adapter.notifyDataSetChanged();// 不要忘了这句}}}

其中还有很多可以优化的地方,例如缓存图片等

代码下载地址:点击打开链接

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。