ListView多条目展示

XML布局

  • ListView左侧小图片布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/image_list_left"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_news_title_pic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:text="标题"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/tv_news_auther_pic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:text="作者" />

        <TextView
            android:id="@+id/tv_news_time_pic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:text="2016-06-13 09:13" />
    </LinearLayout>

</LinearLayout>
  • ListView无图片布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tv_news_title_nopic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="标题"
            android:textSize="20sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="20dp" >

        <TextView
            android:id="@+id/tv_news_titme_nopic"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_weight="1"
            android:text="2016-06-13 09:13" />

        <TextView
            android:id="@+id/tv_news_auther_nopic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="作者" />
    </LinearLayout>

</LinearLayout>
  • mainActivity的XML布局
<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" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>
  • 详情界面的WebWiew布局
<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"
    tools:context="${relativePackage}.${activityClass}" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         />

</RelativeLayout>

## 代码详情 ##

工具类 代码


 - 获取网络数据代码

package com.example.weekdemo.utils;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class SourseFromNet {

    public static InputStream getSourseFromNet(String path) {
        try {
            URL url = new URL(path);
            HttpURLConnection openConnection = (HttpURLConnection) url
                    .openConnection();

            openConnection.setRequestMethod("GET");
            openConnection.setConnectTimeout(5000);
            openConnection.setReadTimeout(5000);
            int responseCode = openConnection.getResponseCode();
            if (responseCode == 200) {
                InputStream inputStream = openConnection.getInputStream();
                return inputStream;
            }

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}
  • 解析XML文件
package com.example.weekdemo.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.content.Context;

import com.example.weekdemo.bean.NewsDataBean;

public class XMLParseUtils {

    public static ArrayList<NewsDataBean> parseXML(Context context,
            InputStream inputStream) {

        ArrayList<NewsDataBean> newsDataList = null;
        NewsDataBean newsDataBean = null;

        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser pullParser = factory.newPullParser();
            pullParser.setInput(inputStream, "utf-8");
            int type = pullParser.getEventType();
            while ((type != XmlPullParser.END_DOCUMENT)) {
                String name = pullParser.getName();
                switch (type) {
                case XmlPullParser.START_DOCUMENT:
                    newsDataList = new ArrayList<NewsDataBean>();
                    break;
                case XmlPullParser.START_TAG:
                    if ("item".equals(name)) {
                        newsDataBean = new NewsDataBean();
                    } else if ("title".equals(name)) {
                        newsDataBean.setTitle(pullParser.nextText());
                    } else if ("link".equals(name)) {
                        newsDataBean.setTitleLink(pullParser.nextText());
                    } else if ("imgs".equals(name)) {
                        newsDataBean.setImgsUrl(pullParser.nextText());
                    } else if ("description".equals(name)) {
                        newsDataBean.setDescription(pullParser.nextText());
                    } else if ("copyright".equals(name)) {
                        newsDataBean.setAuther(pullParser.nextText());
                    } else if ("pubDate".equals(name)) {
                        newsDataBean.setDataTime(pullParser.nextText());
                    } else if ("comments".equals(name)) {
                        newsDataBean.setCommentsUrl(pullParser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if ("item".equals(name)) {
                        newsDataList.add(newsDataBean);
                    }
                    break;

                default:
                    break;
                }
                type = pullParser.next();
            }
            return newsDataList;
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }
}
  • ImageLoader工具
package com.example.weekdemo.utils;

import android.content.Context;
import android.graphics.Bitmap;

import com.example.weekdemo.R;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration.Builder;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

public class ImageLoaderUtils {
    /**
     * 初始化ImageLoaderConfiguration 这个可以只做简单的初始化,此方法建议在 Application中进行初始化
     * 
     * @param context
     */
    public static void initConfiguration(Context context) {

        Builder configuration = new ImageLoaderConfiguration.Builder(context);

        // --------------------------------------------------------------------
        // 本段代码,如果是测试使用时,可以不添加,不影响ImageLoader的正常使用
        configuration
                // .memoryCacheExtraOptions(480, 800)
                // default = device screen dimensions
                // 缓存到磁盘中的图片宽高
                // .diskCacheExtraOptions(480, 800, null)
                // .taskExecutor(null)
                // .taskExecutorForCachedImages()
                .threadPoolSize(3)
                // default 线程优先级
                .threadPriority(Thread.NORM_PRIORITY - 2)
                // default
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                // // default设置在内存中缓存图像的多种尺寸
                // 加载同一URL图片时,imageView从小变大时,从内存缓存中加载
                .denyCacheImageMultipleSizesInMemory()
                // 超过设定的缓存大小时,内存缓存的清除机制
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                // 内存的一个大小
                .memoryCacheSize(2 * 1024 * 1024)
                .memoryCacheSizePercentage(13)
                // default 将图片信息缓存到该路径下
                // default 磁盘缓存的大小
                .diskCacheSize(50 * 1024 * 1024)
                // 磁盘缓存文件的个数
                .diskCacheFileCount(100)
                // 磁盘缓存的文件名的命名方式//一般使用默认值 (获取文件名称的hashcode然后转换成字符串)或MD5 new
                // Md5FileNameGenerator()源文件的名称同过md5加密后保存
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                // 设置默认的图片加载
                // 使用默认的图片解析器
                .imageDecoder(new BaseImageDecoder(true))
                // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .writeDebugLogs();

        // ---------------------------------------------------------------------
        ImageLoader.getInstance().init(configuration.build());
    }

    /**
     * 初始化DisplayImageOptions
     * 
     * @param context
     * @return
     */
    public static DisplayImageOptions initOptions() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                // 设置图片在下载期间显示的图片
                .showImageOnLoading(R.drawable.ic_launcher)
                // 设置图片Uri为空或是错误的时候显示的图片small_loadpic_empty_listpage
                .showImageOnFail(R.drawable.ic_launcher)
                .showImageForEmptyUri(R.drawable.ic_launcher)
                // 设置下载的图片是否缓存在内存中
                .cacheInMemory(true)
                // 设置下载的图片是否缓存在SD卡中
                .cacheOnDisc(true)

                // --------------------------------------------------------------------
                // 如果您只想简单使用ImageLoader这块也可以不用配置
                // 是否考虑JPEG图像EXIF参数(旋转,翻转)
                .considerExifParams(true)
                // 设置图片以如何的编码方式显示
                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
                // 设置图片的解码类型//
                .bitmapConfig(Bitmap.Config.RGB_565)
                // 设置图片的解码配置
                // .decodingOptions(options)
                // .delayBeforeLoading(int delayInMillis)//int
                // delayInMillis为你设置的下载前的延迟时间
                // 设置图片加入缓存前,对bitmap进行设置
                // .preProcessor(BitmapProcessor preProcessor)
                // 设置图片在下载前是否重置,复位
                .resetViewBeforeLoading(true)
                // 是否设置为圆角,弧度为多少
                .displayer(new RoundedBitmapDisplayer(20))
                // 是否图片加载好后渐入的动画时间
                .displayer(new FadeInBitmapDisplayer(100))
                // 构建完成
                // ---------------------------------------
                .build();
        return options;
    }
}

-自己定义的 AppLication

package com.example.weekdemo.utils;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        ImageLoaderUtils.initConfiguration(getApplicationContext());
    }

}
  • bean
package com.example.weekdemo.bean;

import java.io.Serializable;

public class NewsDataBean implements Serializable{

    private String title;
    private String titleLink;
    private String imgsUrl;
    private String description;
    private String auther;
    private String dataTime;
    private String commentsUrl;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitleLink() {
        return titleLink;
    }

    public void setTitleLink(String titleLink) {
        this.titleLink = titleLink;
    }

    public String getImgsUrl() {
        return imgsUrl;
    }

    public void setImgsUrl(String imgsUrl) {
        this.imgsUrl = imgsUrl;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getAuther() {
        return auther;
    }

    public void setAuther(String auther) {
        this.auther = auther;
    }

    public String getDataTime() {
        return dataTime;
    }

    public void setDataTime(String dataTime) {
        this.dataTime = dataTime;
    }

    public String getCommentsUrl() {
        return commentsUrl;
    }

    public void setCommentsUrl(String commentsUrl) {
        this.commentsUrl = commentsUrl;
    }

    public NewsDataBean() {
        super();
        // TODO Auto-generated constructor stub
    }

    public NewsDataBean(String title, String titleLink, String imgsUrl,
            String description, String auther, String dataTime,
            String commentsUrl) {
        super();
        this.title = title;
        this.titleLink = titleLink;
        this.imgsUrl = imgsUrl;
        this.description = description;
        this.auther = auther;
        this.dataTime = dataTime;
        this.commentsUrl = commentsUrl;
    }

    @Override
    public String toString() {
        return "NewsDataBean [title=" + title + ", titleLink=" + titleLink
                + ", imgsUrl=" + imgsUrl + ", description=" + description
                + ", auther=" + auther + ", dataTime=" + dataTime
                + ", commentsUrl=" + commentsUrl + "]";
    }

}
  • 适配器
package com.example.weekdemo.adapter;

import java.util.ArrayList;

import com.example.weekdemo.R;
import com.example.weekdemo.bean.NewsDataBean;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyBaseAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<NewsDataBean> newsDataList;
    private DisplayImageOptions options;
    private static final int TYPE_LISTVIEW_NO_PIC = 0;
    private static final int TYPE_LISTVIEW_PIC = 1;

    public MyBaseAdapter(Context context, ArrayList<NewsDataBean> newsDataList,
            DisplayImageOptions options) {
        super();
        this.context = context;
        this.newsDataList = newsDataList;
        this.options = options;

    }

    @Override
    public int getCount() {

        return newsDataList.size();
    }

    @Override
    public Object getItem(int position) {
        return newsDataList.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    /**
     * 获取具体的某个索引值下的条目的条目类型
     */
    @Override
    public int getItemViewType(int position) {
        String imag = newsDataList.get(position).getImgsUrl();
        if (imag.trim().endsWith(".jpg")) {
            return TYPE_LISTVIEW_PIC;
        }else{

        }
        return TYPE_LISTVIEW_NO_PIC;
    }

    /**
     * 获取listView条目类别的个数
     */
    @Override
    public int getViewTypeCount() {

        return 2;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 获取当前条目的类型
        int itemViewType = getItemViewType(position);

        BaseViewHoldrer baseViewHoldrer;
        if (convertView == null) {
            baseViewHoldrer = new BaseViewHoldrer();
            switch (itemViewType) {
            case TYPE_LISTVIEW_NO_PIC:
                convertView = View.inflate(context,
                        R.layout.listview_item_nopicture, null);

                baseViewHoldrer.tv_news_title_nopic = (TextView) convertView
                        .findViewById(R.id.tv_news_title_nopic);
                baseViewHoldrer.tv_news_auther_nopic = (TextView) convertView
                        .findViewById(R.id.tv_news_auther_nopic);
                baseViewHoldrer.tv_news_titme_nopic = (TextView) convertView
                        .findViewById(R.id.tv_news_titme_nopic);

                baseViewHoldrer.tv_news_title_nopic.setText(newsDataList.get(
                        position).getTitle());
                baseViewHoldrer.tv_news_auther_nopic.setText(newsDataList.get(
                        position).getAuther());
                baseViewHoldrer.tv_news_titme_nopic.setText(newsDataList.get(
                        position).getDataTime());

                convertView.setTag(baseViewHoldrer);
                break;
            case TYPE_LISTVIEW_PIC:
                convertView = View.inflate(context,
                        R.layout.list_item_picture_left, null);

                baseViewHoldrer.image_list_left = (ImageView) convertView
                        .findViewById(R.id.image_list_left);
                baseViewHoldrer.tv_news_title_pic = (TextView) convertView
                        .findViewById(R.id.tv_news_title_pic);
                baseViewHoldrer.tv_news_auther_pic = (TextView) convertView
                        .findViewById(R.id.tv_news_auther_pic);
                baseViewHoldrer.tv_news_time_pic = (TextView) convertView
                        .findViewById(R.id.tv_news_time_pic);

                ImageLoader.getInstance().displayImage(
                        newsDataList.get(position).getImgsUrl(),
                        baseViewHoldrer.image_list_left, options);

                baseViewHoldrer.tv_news_title_pic.setText(newsDataList.get(
                        position).getTitle());
                baseViewHoldrer.tv_news_auther_pic.setText(newsDataList.get(
                        position).getAuther());
                baseViewHoldrer.tv_news_time_pic.setText(newsDataList.get(
                        position).getDataTime());

                convertView.setTag(baseViewHoldrer);
                break;

            default:
                break;
            }

        } else {
            baseViewHoldrer = (BaseViewHoldrer) convertView.getTag();
            switch (itemViewType) {
            case TYPE_LISTVIEW_NO_PIC:
                baseViewHoldrer.tv_news_title_nopic.setText(newsDataList.get(
                        position).getTitle());
                baseViewHoldrer.tv_news_auther_nopic.setText(newsDataList.get(
                        position).getAuther());
                baseViewHoldrer.tv_news_titme_nopic.setText(newsDataList.get(
                        position).getDataTime());

                break;
            case TYPE_LISTVIEW_PIC:
                baseViewHoldrer.tv_news_title_pic.setText(newsDataList.get(
                        position).getTitle());
                baseViewHoldrer.tv_news_auther_pic.setText(newsDataList.get(
                        position).getAuther());
                baseViewHoldrer.tv_news_time_pic.setText(newsDataList.get(
                        position).getDataTime());
                ImageLoader.getInstance().displayImage(
                        newsDataList.get(position).getImgsUrl(),
                        baseViewHoldrer.image_list_left, options);
                break;

            default:
                break;
            }
        }
        return convertView;
    }

    class BaseViewHoldrer {
        TextView tv_news_title_nopic, tv_news_titme_nopic,
                tv_news_auther_nopic, tv_news_title_pic, tv_news_auther_pic,
                tv_news_time_pic;
        ImageView image_list_left;
    }

}
  • 详情
package com.example.weekdemo;

import com.example.weekdemo.bean.NewsDataBean;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebSettings.TextSize;
import android.webkit.WebSettings.ZoomDensity;
import android.webkit.WebView;

public class DetailsActivity extends Activity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        webView = (WebView) findViewById(R.id.webView);
        Intent intent = getIntent();
        NewsDataBean newsDataBean=(NewsDataBean) intent.getSerializableExtra("newsDataBean");
        // 设置作为客户端存在,界面跳转只在自己应用程序中
        webView.setWebChromeClient(new WebChromeClient());
        initWebViewSetting();
        //加载链接
        webView.loadUrl(newsDataBean.getCommentsUrl());
    }

    /**
     * 对webView做初始化设置
     */
    @SuppressLint("SetJavaScriptEnabled")
    @SuppressWarnings("deprecation")
    private void initWebViewSetting() {
        // 获取设置对象
        WebSettings settings = webView.getSettings();
        // 设置webView的缓存方式 设置为默认方式
        // 默认如果有缓存,并且缓存未过期,使用缓存,否则使用网络
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
        // 设置支持js代码
        settings.setJavaScriptEnabled(true);
        // 设置缩放模式 缩放到最小
        settings.setDefaultZoom(ZoomDensity.FAR);
        // 设置字体大小
        settings.setTextSize(TextSize.SMALLER);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // 判断我的界面,如果在里边一层,退一层,如果最外层
            if (webView.canGoBack()) {
                // 后退
                webView.goBack();
            } else {
                finish();
            }
        }
        return true;

    }
}
  • mainactivity
package com.example.weekdemo;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.example.weekdemo.adapter.MyBaseAdapter;
import com.example.weekdemo.bean.NewsDataBean;
import com.example.weekdemo.utils.ImageLoaderUtils;
import com.example.weekdemo.utils.SourseFromNet;
import com.example.weekdemo.utils.XMLParseUtils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity {

    private ListView listView;

    private static final String PATH = "http://www.sciencenet.cn/xml/iphoneInterface.aspx?type=news&nums=20&pass=";
    private static final int SUCCESS = 0;
    private DisplayImageOptions options;
    private MyBaseAdapter myBaseAdapter;
    private ArrayList<NewsDataBean> newsDataList;
    Handler handler = new Handler() {


        @SuppressWarnings("unchecked")
        public void handleMessage(android.os.Message msg) {
            if (msg.what == SUCCESS) {
                newsDataList = (ArrayList<NewsDataBean>) msg.obj;
                if (myBaseAdapter == null) {
                    myBaseAdapter = new MyBaseAdapter(MainActivity.this,
                            newsDataList, options);
                    listView.setAdapter(myBaseAdapter);

                    for (int i = 0; i < newsDataList.size(); i++) {
                        String string = newsDataList.get(i).toString();
                        Log.i("MainActivity", string);
                    }
                } else {
                    myBaseAdapter.notifyDataSetChanged();
                }
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView);

        options = ImageLoaderUtils.initOptions();

//      getSourse();
        parseSourse();

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent intent = new Intent(MainActivity.this, DetailsActivity.class);

                intent.putExtra("newsDataBean", newsDataList.get(position));
                startActivity(intent);
            }
        });

    }

    /**
     * 解析XML
     */
    private ArrayList<NewsDataBean> pullXMLParse() {

        ArrayList<NewsDataBean> newsDataList = null;
        NewsDataBean newsDataBean = null;
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser pullParser = factory.newPullParser();
            InputStream inputStream = getAssets().open("noname.xml");
            pullParser.setInput(inputStream, "utf-8");
            int type = pullParser.getEventType();
            while ((type != XmlPullParser.END_DOCUMENT)) {
                String name = pullParser.getName();
                switch (type) {
                case XmlPullParser.START_DOCUMENT:
                    newsDataList = new ArrayList<NewsDataBean>();
                    break;
                case XmlPullParser.START_TAG:
                    if ("item".equals(name)) {
                        newsDataBean = new NewsDataBean();
                    } else if ("title".equals(name)) {
                        newsDataBean.setTitle(pullParser.nextText());
                    } else if ("link".equals(name)) {
                        newsDataBean.setTitleLink(pullParser.nextText());
                    } else if ("imgs".equals(name)) {
                        newsDataBean.setImgsUrl(pullParser.nextText());
                    } else if ("description".equals(name)) {
                        newsDataBean.setDescription(pullParser.nextText());
                    } else if ("copyright".equals(name)) {
                        newsDataBean.setAuther(pullParser.nextText());
                    } else if ("pubDate".equals(name)) {
                        newsDataBean.setDataTime(pullParser.nextText());
                    } else if ("comments".equals(name)) {
                        newsDataBean.setCommentsUrl(pullParser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if ("item".equals(name)) {
                        newsDataList.add(newsDataBean);
                    }
                    break;

                default:
                    break;
                }
                type = pullParser.next();
            }
            return newsDataList;
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 从本地获取资源
     */
    private void getSourse() {
        new Thread() {
            public void run() {
                ArrayList<NewsDataBean> newsDataList = pullXMLParse();
                Message msg = new Message();
                msg.what = SUCCESS;
                msg.obj = newsDataList;

                handler.sendMessage(msg);
            };
        }.start();
    }

    /**
     * 从网络获取资源
     */
    private void parseSourse() {
        new Thread() {
            public void run() {
                InputStream inputStream = SourseFromNet.getSourseFromNet(PATH);
                ArrayList<NewsDataBean> newsDataList = XMLParseUtils.parseXML(
                        MainActivity.this, inputStream);
                Message msg = new Message();
                msg.what = SUCCESS;
                msg.obj = newsDataList;

                handler.sendMessage(msg);
            };
        }.start();
    }

}
  • 权限
 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • 配置Applicatoin
     android:name=".utils.MyApplication"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值