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"