您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
38_视频客户端综合案例&获取数据
发布时间:2021-02-23 14:14:31编辑:雪饮阅读()
准备xml接口
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/summary"
android:textColor="@android:color/darker_gray"
android:textSize="25sp" />
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/lv"
>
</ListView>
</LinearLayout>
布局文件的相关值,其实就一个目录。。。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.youku">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Youku"
android:usesCleartextTraffic="true"
>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<resources>
<string name="app_name">youku</string>
<string name="summary">目录</string>
</resources>
主程序MainActivity.java:
package com.example.youku;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.InputStream;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lv;
private List<Channel> channels;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = this.findViewById(R.id.lv);
String address = getResources().getString(R.string.serverurl);
try {
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
InputStream is = NetUtil.getChannelStream(address);
channels = ChannelService.getChannels(is);
} catch (Exception e) {
Toast.makeText(this, "获取数据失败", 0).show();
e.printStackTrace();
}
// 填充listview的数据
lv.setAdapter(new MyAdapter());
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return channels.size();
}
@Override
public Object getItem(int position) {
return channels.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv=new TextView(MainActivity.this);
tv.setText(channels.get(position).getName());
return tv;
}
}
}所用的依赖类NetUtil.java:
package com.example.youku;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class NetUtil {
/**
* 获取服务器频道信息返回回来的输入流
* @param address 频道信息的jsp或者servlet的地址
* @return inputstream
*/
public static InputStream getChannelStream (String address) throws Exception{
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int code = conn.getResponseCode() ;
if(code == 200){
return conn.getInputStream();
}
return null;
}
}所用的xml解析的依赖类Channel.java(说到这里,可见php多美好,一个stdclass解决一切,典型如json的编解码):
package com.example.youku;
public class Channel {
private String id;
private String name;
private String time;
private int count ;
private String icon ;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
}依赖类ChannelService.java:
package com.example.youku;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
public class ChannelService {
public static List<Channel> getChannels (InputStream is ) throws Exception{
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
List<Channel> channels = new ArrayList<Channel>();
int type = parser.getEventType();
Channel channel = null;
while(type!=XmlPullParser.END_DOCUMENT){
switch (type) {
case XmlPullParser.START_TAG:
if("channel".equals(parser.getName())){
channel = new Channel();
String id = parser.getAttributeValue(0);
channel.setId(id);
}else if("name".equals(parser.getName())){
String name = parser.nextText();
channel.setName(name);
}else if("time".equals(parser.getName())){
String time = parser.nextText();
channel.setTime(time);
}else if("count".equals(parser.getName())){
String count = parser.nextText();
channel.setCount(Integer.parseInt( count));
}else if("icon".equals(parser.getName())){
String icon = parser.nextText();
channel.setIcon(icon);
}
break;
case XmlPullParser.END_TAG:
if("channel".equals(parser.getName())){
channels.add(channel);
channel = null;
}
break;
}
type = parser.next();
}
return channels;
}
}最后建立values/config.xml(其实这个也可以把值写到具体请求地址的地方,写死一个地址,不过类似接口地址之类的,变动可能性比较大,一般放配置文件比较专业点):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="serverurl">http://192.168.5.30:8080/javaweb/info.xml</string>
</resources>最后的最后当然就是部署运行看效果咯,没有任何问题,一个极简的通过xml接口请求列表数据并渲染列表视图就完成了。
关键字词:xml,android
上一篇:37_网页html的查看器