安卓基础干货(四):安卓网络编程的学习 (3)

4、把list里面的数据显示在listview

1、自定义一个数据适配器 private class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; if(convertView == null){ //加载item的布局文件 view = View.inflate(MainActivity.this, R.layout.item, null); }else{ //重复利用item的视图 view = convertView; } //得到item布局文件中的控件 SmartImageView image = (SmartImageView) view.findViewById(R.id.iv_image); TextView tv_title = (TextView) view.findViewById(R.id.tv_title); TextView tv_desc = (TextView) view.findViewById(R.id.tv_desc); TextView tv_type = (TextView) view.findViewById(R.id.tv_type); NewsItem item = list.get(position); image.setImageUrl(item.getImage()); //设置item中的控件设置数据 tv_title.setText(item.getTitle()); tv_desc.setText(item.getDescription()); if("1".equals(item.getType())){ tv_type.setText("跟帖:"+item.getComment()); tv_type.setTextColor(Color.BLACK); }else if("2".equals(item.getType())){ tv_type.setText("视频"); tv_type.setTextColor(Color.BLUE); }else if("3".equals(item.getType())){ tv_type.setText("专题"); tv_type.setTextColor(Color.RED); } return view; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } } 2、在oncreate方法中调用lv.setAdapter方法为listview填充数据: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); //从网络上读取数据、解析xml文件 readData(); //使用数据适配器为listview填充数据 lv.setAdapter(new MyAdapter()); } 使用smartImageView显示新闻图片 1、把smartImageView的源代码/src/com文件夹拷到自己的代码的src目录中 2、调用image.setImageUrl(item.getImage())方法加载图片 imageLoader 开源的项目 不重复发明轮子 1减少开发成本 耗时 smartImageView的工作原理 1、写一个类继承ImageView import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.widget.ImageView; public class SmartImageView extends ImageView{ //用来创建带有属性信息和样式的对象 public SmartImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } //用来创建带有属性信息的对象 public SmartImageView(Context context, AttributeSet attrs) { super(context, attrs); } //用来创建一个没有属性的对象 public SmartImageView(Context context) { super(context); } //1、在主线程中创建一个handler private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { //2、修改UI界面 Bitmap bm = (Bitmap) msg.obj; SmartImageView.this.setImageBitmap(bm); }; }; //写一个setImageUrl方法,可以根据一个图片的url加载图片 public void setImageUrl(final String url){ new Thread(){ public void run() { try { String path = url; // 1、发送请求 // (1)创建一个URL对象 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // (2)设置请求头信息 conn.setRequestMethod("GET"); conn.setConnectTimeout(3000); // 2、服务器返回数据 // (1)判断状态码:200 ok,404 没有找到资源、503、509 服务器端错误 int code = conn.getResponseCode(); if(code == 200){ // (2)解析服务器返回的二进制数据,解析成一个字符串 InputStream is = conn.getInputStream(); Bitmap bm = BitmapFactory.decodeStream(is); //在线程中调用handler的引用,向服务端发送消息 Message msg = Message.obtain(); msg.obj = bm; handler.sendMessage(msg); // ( } } catch (Exception e) { e.printStackTrace(); } }; }.start(); } }

2、在布局文件中添加一个SmartImageView这个类:

<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: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" > <--报名要写完整--> <com.itheima.smartimageview.SmartImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/iv" /> </RelativeLayout> 使用GET方式向服务器端提交数据

Get
1、把需要提交的参数组拼到URL地址的后面:

:8080/web/servlet/LoginServlet?username=123&password=1233

缺点:

1、提交数据的长度有限制: 最大长度4kb,windows中提交数据时最大长度为1kb; 2、不安全

优点:

代码简单

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjdds.html