UI
list
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:layout_editor_absoluteY="81dp">
<ListView
android:id="@+id/iv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
item
<?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"
android:layout_marginTop="10dp">
<ImageView
android:id="@+id/iv_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@mipmap/ic_launcher"
android:layout_marginRight="10dp"
/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈"
android:layout_toRightOf="@+id/iv_image"
android:singleLine="true"
android:textColor="#000000"
android:ellipsize="end"/>
<TextView
android:id="@+id/tv_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:text="呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵
呵呵呵呵呵呵呵呵呵呵"
android:layout_toRightOf="@+id/iv_image"
android:layout_below="@+id/tv_title"
android:maxLines="2"/>
<TextView
android:id="@+id/iv_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/iv_image"
android:layout_alignParentRight="true"
android:textColor="#FF0000"
android:text="1165656跟帖"/>
</RelativeLayout>
使用tomcat开启服务器
- 下载tomcat并添加所需的环境变量(http://tomcat.apache.org/)
启动tomcat
在tomcat目录下添加要访问的资源文件
访问服务器xml资源文件并解析
- news类
package com.example.administrator.logincase;
public class News {
private String Title;
private String Description;
private String ImageUrl;
private int Type;
private int Comment;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getImageUrl() {
return ImageUrl;
}
public void setImageUrl(String imageUrl) {
ImageUrl = imageUrl;
}
public int getType() {
return Type;
}
public void setType(int type) {
Type = type;
}
public int getComment() {
return Comment;
}
public void setComment(int comment) {
Comment = comment;
}
}
- xml接收和解析
package com.example.administrator.logincase;
import android.Manifest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Xml;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
public class MainActivity extends AppCompatActivity {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 0x11: {
if (grantResults[0] == PERMISSION_GRANTED) {
Toast.makeText(this, "网络权限请求成功",
Toast.LENGTH_SHORT).show();
return;
} else {
Toast.makeText(this, "网络权限请求失败",
Toast.LENGTH_SHORT).show();
return;
}
}
default:
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (checkSelfPermission(Manifest.permission.INTERNET) == PERMISSION_DENIED) {
requestPermissions(new String[]{Manifest.permission.INTERNET}, 0x11);
}
requestNews();
}
private void requestNews() {
new Thread() {
@Override
public void run() {
try {
URL url = new URL("http://192.168.31.11:8080/news.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() != 200) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "访问失败",
Toast.LENGTH_SHORT).show();
}
});
}
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xmlParser = factory.newPullParser();
xmlParser.setInput(url.openStream(), "utf-8");
int eventType = xmlParser.getEventType();
News news = null;
final List<News> newsList = new ArrayList<>();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG)
{
if (xmlParser.getName().equals("item")) {
news = new News();
newsList.add(news);
} else if (xmlParser.getName().equals("title")) {
news.setTitle(xmlParser.nextText());
} else if (xmlParser.getName().equals("description")) {
news.setDescription(xmlParser.nextText());
} else if (xmlParser.getName().equals("image")) {
news.setImageUrl(xmlParser.nextText());
} else if (xmlParser.getName().equals("type")) {
news.setType(Integer.parseInt(xmlParser.nextText()));
} else if (xmlParser.getName().equals("comment")) {
news.setComment(Integer.parseInt(xmlParser.nextText()));
}
}
eventType=xmlParser.next();
}
if (newsList.isEmpty()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "没有数据",
Toast.LENGTH_SHORT).show();
}
});
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
ListView listView = findViewById(R.id.iv_list);
listView.setAdapter(new myAdapter(MainActivity.this, newsList));
}
});
} catch (Exception e) {
e.printStackTrace();
}
super.run();
}
}.start();
}
}
安卓上xutils框架的使用
安装xutils
自定义application类进行初始化
清单文件中指定自己的application类
初始化xutils
package com.example.administrator.logincase;
import android.app.Application;
import org.xutils.x;
public class CustomApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
}
}
加载数据到ListView中
package com.example.administrator.logincase;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import org.xutils.x;
import java.util.List;
public class myAdapter extends BaseAdapter {
private Context context;
private List<News> newsList;
public myAdapter(Context pContext, List<News> tNewsList) {
newsList = tNewsList;
context = pContext;
}
@Override
public int getCount() {
return newsList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
/**
* 将一个布局文件转换为View
* */
//view = View.inflate(context, R.layout.item, null);
//view=LayoutInflater.from(context).inflate(R.layout.item,null);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item, null);
} else {
view = convertView;
}
if (!newsList.isEmpty()) {
News news = newsList.get(position);
ImageView imageView = view.findViewById(R.id.iv_image);
//使用xutils类的image操作来访问网络上的图片资源
x.image().bind(imageView, news.getImageUrl());
TextView tvTitle = view.findViewById(R.id.tv_title);
tvTitle.setText(news.getTitle());
TextView tvDescription = view.findViewById(R.id.tv_description);
tvDescription.setText(news.getDescription());
TextView tvType = view.findViewById(R.id.iv_type);
switch (news.getType()) {
case 1:
tvType.setText(news.getComment()+"国外");
break;
case 2:
tvType.setText(news.getComment()+"专题");
break;
default:
break;
}
}
return view;
}
}