使用Jsoup工具解析数据,Jsoup采用的DOM进行解析数据的,总体是比较简单,根据各个元素的attr,class以及继承关系,就可以访问到需要的数据。
代码如下:
(1)SecondActivity代码
public class SecondActivity extends Activity
{
List<DataHolder> dataHolders = new ArrayList<>();
ListView listView;
Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
init();
}
private void init()
{
Intent intent = getIntent();
String date = intent.getStringExtra("extra_date");
try
{
new AsynLoad().execute(new URL("http://rili.jin10.com/" + date));
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
Log.d("de" , dataHolders.toString());
}
class AsynLoad extends AsyncTask<URL , Void , String>
{
@Override
protected String doInBackground(URL... urls)
{
StringBuilder sb = new StringBuilder();
try
{
URL url = urls[0];
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod("GET");
conn.setRequestProperty(
"Accept",
"image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
+ "application/x-shockwave-flash, application/xaml+xml, "
+ "application/vnd.ms-xpsdocument, application/x-ms-xbap, "
+ "application/x-ms-application, application/vnd.ms-excel, "
+ "application/vnd.ms-powerpoint, application/msword, */*");
conn.setRequestProperty("Accept-Language", "zh-CN");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Connection", "Keep-Alive");
InputStream is = conn.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = is.read(buf)) > 0)
{
sb.append(new String(buf , 0 , len , "UTF-8"));
}
is.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return sb.toString();
}
@Override protected void onPostExecute(String result)
{
Document doc = Jsoup.parse(result);
Element importantTime = null;
Elements td_rowspan = doc.getElementsByAttribute("rowspan");
for (int i = 0 ; i < td_rowspan.size() ; i++)
{
if (td_rowspan.get(i).text().equals("22:30") || td_rowspan.get(i).text().equals("23:30"))
{
importantTime = td_rowspan.get(i);
}
}
if (importantTime != null)
{
Element parent = importantTime.parent();
DataHolder dataHolder1 = new DataHolder();
dataHolder1.setName(parent.child(2).text());
dataHolder1.setLastData(parent.child(4).text());
dataHolder1.setPreData(parent.child(5).text());
dataHolder1.setPostData(parent.child(6).child(0).text());
dataHolder1.setInfluent(parent.child(7).child(0).child(0).text() + " " + parent.child(7).child(0).child(1).text());
dataHolders.add(dataHolder1);
Element currentElement = parent.nextElementSibling();
int count = 0;
while (currentElement != null)
{
if (count == 0 || count >3)
{
count++;
currentElement = currentElement.nextElementSibling();
}
else
{
DataHolder dataHolder = new DataHolder();
dataHolder.setName(currentElement.child(0).text());
dataHolder.setLastData(currentElement.child(2).text());
dataHolder.setPreData(currentElement.child(3).text());
dataHolder.setPostData(currentElement.child(4).child(0).text());
dataHolder.setInfluent(currentElement.child(5).child(0).child(0).text() + " "
+ currentElement.child(5).child(0).child(1).text());
dataHolders.add(dataHolder);
currentElement = currentElement.nextElementSibling();
count++;
}
}
listView = (ListView) findViewById(R.id.id_list);
adapter = new Adapter(SecondActivity.this , dataHolders);
listView.setAdapter(adapter);
}
}
}
}
(2)Bean类:
public class DataHolder
{
private String name;
private String lastData;
private String preData;
private String postData;
private String influent;
public DataHolder()
{
}
public DataHolder(String name , String lastData , String preData , String postData , String influent)
{
this.name = name;
this.lastData = lastData;
this.preData = preData;
this.postData = postData;
this.influent = influent;
}
public String getName() {
return name;
}
public String getPreData() {
return preData;
}
public String getLastData() {
return lastData;
}
public String getPostData() {
return postData;
}
public String getInfluent() {
return influent;
}
public void setName(String name) {
this.name = name;
}
public void setLastData(String lastData) {
this.lastData = lastData;
}
public void setPreData(String preData) {
this.preData = preData;
}
public void setPostData(String postData) {
this.postData = postData;
}
public void setInfluent(String influent) {
this.influent = influent;
}
}
(3)Adapter类:
public class Adapter extends BaseAdapter
{
private List<DataHolder> datas;
private LayoutInflater inflater;
public Adapter(Context context , List<DataHolder> myDatas)
{
inflater = LayoutInflater.from(context);
datas = myDatas;
}
@Override
public int getCount()
{
return datas.size();
}
@Override
public Object getItem(int position)
{
return datas.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder = null;
if (convertView == null)
{
convertView = inflater.inflate(R.layout.list_item2 , null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.name);
viewHolder.lastData = (TextView) convertView.findViewById(R.id.last_data);
viewHolder.preData = (TextView) convertView.findViewById(R.id.pre_data);
viewHolder.postData = (TextView) convertView.findViewById(R.id.post_data);
viewHolder.influent = (TextView) convertView.findViewById(R.id.info_data);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.name.setText(datas.get(position).getName());
viewHolder.lastData.setText("前值:" + datas.get(position).getLastData());
viewHolder.preData.setText("预测值:" + datas.get(position).getPreData());
viewHolder.postData.setText("公布值:" + datas.get(position).getPostData());
viewHolder.influent.setText(datas.get(position).getInfluent());
if (datas.get(position).getInfluent().equals("利空 金银"))
{
viewHolder.influent.setTextColor(Color.GREEN);
viewHolder.influent.setBackgroundResource(R.drawable.text_style);
}
else
{
viewHolder.influent.setTextColor(Color.RED);
viewHolder.influent.setBackgroundResource(R.drawable.text_style2);
}
return convertView;
}
class ViewHolder
{
TextView name;
TextView lastData;
TextView preData;
TextView postData;
TextView influent;
}
}
主页面布局比较简单,这里只贴出item的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="3dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:textSize="15sp"
android:text=""/>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:layout_marginLeft="5dp"
android:layout_below="@+id/name">
<TextView
android:id="@+id/last_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=""
android:textSize="12sp"/>
<TextView
android:id="@+id/pre_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=""
android:textSize="12sp"/>
<TextView
android:id="@+id/post_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="5dp"
android:text=""
android:textSize="12sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="@string/info"
android:textSize="12sp"/>
<TextView
android:id="@+id/info_data"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:layout_marginLeft="3dp"
android:layout_marginRight="3dp"
android:text=""
android:textColor="@android:color/holo_green_dark"
android:background="@drawable/text_style"
android:textSize="12sp"/>
</LinearLayout>
</RelativeLayout>