访问服务器(加载图片)

一丶一个简单的访问服务器(访问网易新闻客户端)

  1. 点击加载新闻:首页的布局文件

<LinearLayout 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:orientation="vertical">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="点击显示网易新闻" />
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ListView>
</LinearLayout>

listView中的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<com.loopj.android.image.SmartImageView
        android:id="@+id/iv"
        android:layout_width="80dp"
        android:layout_height="80dp" />

<TextView
        android:id="@+id/tvTitle"
        android:layout_toRightOf="@id/iv"
        android:layout_marginLeft="5dp"
        android:textSize="16dp"
        android:textColor="#000000"
        android:textStyle="bold"
        android:text="我是标题"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
    <TextView
        android:id="@+id/tvDiscription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tvTitle"
        android:layout_alignLeft="@id/tvTitle"
        android:textSize="12dp"
        android:maxLines="3"
        android:textColor="#99000000"
        android:text="我是内容"
        />
    
    <TextView
        android:id="@+id/tvInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是跟帖"
        android:textSize="10dp"
        android:layout_marginRight="5dp"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@id/iv"
        />
</RelativeLayout>

2.MainActivity中代码

public void click(View view){
        new Thread(){
            public void run() {
                //1.创建网络地址对象
                String path = "http://192.168.1.184:8080/news/news.xml" ;//服务端地址
                try {
                    URL url = new URL(path) ;
                    //打开连接
                    HttpURLConnection http = (HttpURLConnection) url.openConnection() ;
                    http.setConnectTimeout(5000) ;
                    //拿到服务器返回的状态吗
                    int code = http.getResponseCode() ;
                    //判断状态吗
                    if(code == 200){
                        //流中是xml文件
                        InputStream is = http.getInputStream()  ;
                        list = StreamUtils.getNewsList(is) ;//解析XML放回的list集合
                        runOnUiThread(new Runnable() {
                            //将流中的xml文件解析成集合
                            @Override
                            public void run() {
                                lv.setAdapter(new MyAdapter()) ;
                            }
                        }) ;
                    }else{
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(MainActivity.this, "请求失败", 0).show() ;
                            }
                        }) ;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    runOnUiThread(new Runnable() {
                        
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "网络不通,请检查网络是否开启", 0).show() ;
                        }
                    }) ;
                }
                
            };
        }.start() ;
    }
    
    class MyAdapter extends BaseAdapter{

@Override
        public int getCount() {
            return list.size();
        }

@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;
        }

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //拿到布局填充器
            LayoutInflater inflater = LayoutInflater.from(MainActivity.this) ;
            //加载布局文件
            View view = null ;
            if(convertView == null){
                view = inflater.inflate(R.layout.news, null) ;
            }else{
                view = convertView ;
            }
            //拿到布局文件中的各个控件
            TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle) ;
            TextView tvDesctiption = (TextView) view.findViewById(R.id.tvDiscription) ;
            TextView tvInfo = (TextView) view.findViewById(R.id.tvInfo) ;
            SmartImageView iv = (SmartImageView) view.findViewById(R.id.iv) ;
            
            //拿到新闻对象
            NewsItem news = list.get(position) ;
            tvTitle.setText(news.getTitle()) ;
            //设置图片
            iv.setImageUrl(news.getImage()) ;
            tvDesctiption.setText(StreamUtils.change(news.getDescription())) ;
            if(news.getType().equals("1")){
                tvInfo.setText("跟帖:" + news.getConnent()) ;
            }else if(news.getType().equals("2")){
                tvInfo.setText("专题") ;
                tvInfo.setTextColor(getResources().getColor(android.R.color.holo_blue_bright)) ;
            }else if(news.getType().equals("3")){
                tvInfo.setText("视频") ;
                tvInfo.setTextColor(getResources().getColor(android.R.color.holo_red_light)) ;
            }
            return view;
        }
        
    }
}

3.解析新闻XML的工具类

public static List<NewsItem> getNewsList(InputStream is) {
        List<NewsItem> list = new ArrayList<NewsItem>();
        try {
            // 创建xml的解析器
            XmlPullParser pull = Xml.newPullParser();
            // 设置要解析的数据的编码
            pull.setInput(is, "utf-8");

// 拿到事件类型
            int type = pull.getEventType();
            // 循环解析数据
            NewsItem item = null;
            while (type != XmlPullParser.END_DOCUMENT) {
                switch (type) {
                    case XmlPullParser.START_TAG:
                        if("item".equals(pull.getName())){
                            item = new NewsItem() ;
                        }else if("title".equals(pull.getName())){
                            item.setTitle(pull.nextText()) ;
                        }else if("description".equals(pull.getName())){
                            item.setDescription(pull.nextText()) ;
                        }else if("image".equals(pull.getName())){
                            item.setImage(pull.nextText()) ;
                        }else if("type".equals(pull.getName())){
                            item.setType(pull.nextText()) ;
                        }else if("comment".equals(pull.getName())){
                            item.setConnent(pull.nextText()) ;
                        }
                        break;
    
                    case XmlPullParser.END_TAG:
                        if("item".equals(pull.getName())){
                            list.add(item) ;
                            item = null ;
                        }
                        break;
                }
                //拿到下一个事件
                type = pull.next() ;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list ;
    }

4.肯定有一个新闻对象News(要创建一个bean包中有News类封装新闻消息)

5.别忘了记得添加访问internet权限

6.服务端创建的News(附件里面有)

注:要加载图片我们要用到smartimageview加载图片(smrtImageview包附件里面)

时间: 2024-10-15 10:42:32

访问服务器(加载图片)的相关文章

Android:漫画APP开发笔记之从WAP网站解析图片地址并加载图片

一.使用Jsoup解析网页 <pre><code class="prettyprint"><span class="typ">Document</span><span class="pln"> doc </span><span class="pun">=</span><span class="pln">

C# C1TrueDBGrid控件如何加载图片列

表格中加载图片是很常见的功能,尤其是网页中,图片的展示更是随处可见.这个功能在bs中很容易就实现了: 前台代码: <asp:GridView ID="GridView1" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Image ID="img1" ImageUrl='<%#Eval("img

Android开源框架ImageLoader:加载图片的三级缓存机制

前言:可从  https://github.com/nostra13/Android-Universal-Image-Loader 下载三级缓存机制的开源框架.下文简单介绍该框架中主要的常用方法,掌握这些方法,基本就可应对多数图片下载的需求. 注意:以下代码为示意代码片断,仔细读一下应能知道怎么用.蓝色表示为开源框架中的类. 1.初始化ImageLoader类对象: ImageLoader imageLoader = ImageLoader.getInstance(); imageLoader.

Android:ViewPager扩展详解——带有导航的ViewPagerIndicator(附带图片缓存,异步加载图片)

大家都用过viewpager了, github上有对viewpager进行扩展,导航风格更加丰富,这个开源项目是ViewPagerIndicator,很好用,但是例子比较简单,实际用起来要进行很多扩展,比如在fragment里进行图片缓存和图片异步加载. 下面是ViewPagerIndicator源码运行后的效果,大家也都看过了,我多此一举截几张图: 下载源码请点击这里 ===========================================华丽的分割线==============

win32加载图片获得像素值

在写光栅渲染器时,需要加载图片获得像素以便进行纹理插值,试了几种方法发现下面这种比价简单,效率也可以接受 Texture2D是我自己定义的类,其中m_pixelBuffer是一个动态二维数组,每个元素为ZCFLOAT3(自定义类型用来保存颜色rgb值). 1 #include "LoadBitmap.h" 2 #include <windows.h> 3 #include <gdiplus.h> 4 5 #include <iostream> 6 #

软引用SoftReference异步加载图片

HashMap<String, SoftReference<Drawable>> imageCache 关于SoftReference这个类多少知道些机制,会用就ok了. 机制:简单来说,她会帮助我们管理内存,防止内存溢出,另外一点也就相当于map,临时缓存些图片drawable让我们可以直接引用,很好了解决了OOM异常. 实现代码片段: [java]package com.Tianyou.Mobile.Common;  import java.io.IOException; im

UIImage加载图片的方式以及Images.xcassets对于加载方法的影响

图片缓存 根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选: 缓存:+ imageNamed:,只需传入文件名.扩展名(可选)即可. 不缓存:+ imageWithContentsOfFile:,必须传入文件的全名(全路径+文件名). 注意,对于有缓存功能的方法来说,其创建对象的步骤如下: 根据图片文件名在缓存池中查找特定的UIImage对象,若存在这个对象,将此对象返回. 如果不存在这个对象,则从mainBundle中加载图片数据,创建对象并返回. 如果相应的图片数

listview加载图片显示

Adapter:   ---- //adapter的构造方法:   参数1 为url数组: public static String[] mList;// 讲url保村在静态的String[] 中 在其他类可以直接调用 public MyListAdapter(String[] list, Context context, ListView listView) { this.mList = list; this.mContext = context; bitmapUtils = new Http

UI小项目之拳皇动画的实现(抽取加载图片和播放音乐的方法)

实现思路 1.加载图片 2.播放音乐 实现思想 1.封装思想 抽取相同代码生成一个新的方法,通过传递参数调用该方法: 2.内存管理思想 不需要每次调用方法时都重新加载图片,for循环加载图片写在ViewdidLoad中 下列代码没有对运行过程中内存管理进行优化 其中加载图片有两种方法: 通过imageNmae加载有缓存 通过imageWithContentsOfFile加载无缓存 有无缓存的区别: 有缓存,使用时不需要重新加载 无缓存,使用时才加载 #import "ViewController