ããææ¯ä¸æ¥è®²æ¯«æ é¾ç¹ãå
·ä½å®ç°æ¥éª¤å¦ä¸ï¼
ããè¿æ¥æ°é»ç½ç«çé¦é¡µ
ããæåHTMLçå
容
ãã解ææåçHTMLç½é¡µä¸çæ é¢ä»¥åæç« é¾æ¥
ããå°æææ é¢æ¾ç¤ºå¨å½å页ï¼å¹¶å°æ é¢ä»¥åæç« é¾æ¥ä¼ å°ä¸ä¸ä¸ªé¡µé¢
ããæåæç« é¾æ¥å
容ï¼åä¸é¡µä¼ æ¥çæ é¢ä¸èµ·æ¾ç¤ºå¨å½å页
ããççåå¤ä¸å¦å¨æä¸è¯
ããç±äºå¿«ç¹çåºææï¼æ以ä¸åå°±ä»ç®äºãç´æ¥å»ºç«Android项ç®ï¼å»ºç«ç©ºçActivityãç¶åå¨ä½ çlayoutçè¿ä¸ªæ件ä¸å å
¥ä¸ä¸ªæé®ãæ¯å¦åè¿æ ·ï¼
ãã<Button
android:id="@+id/button1"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignLeft="@+id/button2"
android:background="@drawable/button"
android:text="Business Insider" />
ããç¶åå¨MainActivityéçonCreateViewå½æ°éå å
¥ä¸ä¸ªæ¹æ³ï¼è®©å®è½ç¹å»ä½ ååæ·»å çæé®è¿å
¥å°ä¸ä¸ä¸ªçé¢ï¼
ãã1 rootView.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
2
3 @Override
4 public void onClick(View v) {
5 // TODO Auto-generated method stub
6 StartGeek();
7 }
8
9 });
ããç¹å»æé®ä¼è§¦åäºä»¶ï¼æ§è¡StartGeekçæ¹æ³ï¼èStartGeekçæ¹æ³åæ¯è·³å°ä¸ä¸ä¸ªActivityï¼
ãã1 private void StartGeek() {
2 // TODO Auto-generated method stub
3 Intent intent = new Intent();
4 intent.setClass(this.getActivity(), GeekActivity.class);
5 startActivity(intent);
6
7 }
ããStartGeek
ããå¨è¿ä¸ªActivityä¸ï¼æ们å°è®¿é®ç½é¡µï¼å¹¶ä»ä¸è·åHTMLç½é¡µçå
容ï¼ç¶åè¿è¡è§£æï¼è·åæ°é»çæ é¢ä»¥åé¾æ¥ï¼ç¶åå°æ°é»çæ é¢æ¾ç¤ºå¨ææºå±å¹ä¸ï¼ä»£ç å
·ä½å®ç°å¦ä¸ï¼
ãã1 ListView listview;
2 Handler handler;
3 List<Map<String, Object>> data;
4
5 final String CSDNURL = "
http://tech.qq.com/bi.htm";
ããé¦å
æ¯åéç声æï¼è³äºåéåçé®é¢è¯·éæå槽ï¼å 为ä¸ç´å¨å°è¯æ¿åç§ç½ç«çæ°é»å
容ï¼æ以åéåæ¯æåçï¼ç±äºæå°±ä¸ç´æ²¡æ¢-ã -ï¼ç±äºæ°é»ç½ç«çå
容è¾å¤ï¼æ以ç¨ListViewæ¯è¾åéï¼è¿æ ·ä¸ä¼åºç°æ¾ç¤ºä¸å
¨çæ
åµã
ãã1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_geek);
5 handler = getHandler();
6 ThreadStart();
7 }ã
ãã1 <RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
2 xmlns:tools="
http://schemas.android.com/tools"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 tools:context="${packageName}.${activityClass}" >
6
7 <ListView
8 android:id="@+id/listView"
9 android:layout_width="wrap_content"
10 android:layout_height="fill_parent"
11 ></ListView>
12
13 </RelativeLayout>
ããactivity_geek.xml
ããæ¥ä¸æ¥æ¯onCreateæ¹æ³ï¼è¿éçé¢æ¯activity_geekï¼ç¶åè°ç¨ä¸¤ä¸ªæ¹æ³ï¼ç±äºè·åæ°æ®è´¹æ¶ï¼æ以åèµ·äºä¸ä¸ªçº¿ç¨ï¼å½ç¶æ¯è¾å¥½çæ¹æ³æ¯ç¨å¼æ¥çº¿ç¨æ¥åï¼é£æ ·çè¯ä¸ä»
å¯ä»¥ä¸å ç¨ä¸»çº¿ç¨ï¼èä¸è¿å¯ä»¥å¾æ¹ä¾¿çå è¿åº¦æ¡ä»ä¹çï¼ç¸å½å¥½ç¨ï¼è³äºæ为ä»ä¹ä¸ç¨ï¼å½ç¶æ¯ä¸ä¼ç¨äºæ~
ãã1 private void ThreadStart() {
2 new Thread() {
3 public void run() {
4 Message msg = new Message();
5 try {
6 data = getCsdnNetDate();
7 msg.what = data.size();
8 } catch (Exception e) {
9 e.printStackTrace();
10 msg.what = -1;
11 }
12 handler.sendMessage(msg);
13 }
14 }.start();
15 }
ããThreadStart
ããè¿æ¯æ°ç线ç¨ï¼ç¨äºä»ç½åè·åæ们æ³è¦çHTMLæ件ï¼å¹¶å°å
¶ä¼ ç»handlerå¤çãè·åçå½æ°æ¹æ³æ¯ï¼
ãã1 data = getCsdnNetDate();
ãã1 private List<Map<String, Object>> getCsdnNetDate() {
2 List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
3 Document doc = http_get(CSDNURL);
4 Elements links = doc.select("h3>a");
5 for(Element link: links)
6 {
7 Map<String, Object> map = new HashMap<String, Object>();
8 map.put("title", link.attr("title"));
9 map.put("url", link.attr("abs:href"));
10 result.add(map);
11 }
12
13
14 return result;
15 }
ããgetCsdnNetDate
ãã1 Document doc = http_get(CSDNURL);
ãã1 private Document http_get(String url) {
2 Document doc=null;
3 try {
4 doc = Jsoup.connect(url)
5 .timeout(50000)
6 .get();
7 } catch (IOException e) {
8 // TODO Auto-generated catch block
9 e.printStackTrace();
10 }
11
12 return doc;
13 }
ããhttp_get
ããéè¿http_getæ¹æ³ä¸çJsoup.connectæ¥è¿æ¥å°ç½åï¼ç¶åéè¿.getæ¹æ³æ¥è·å¾HTMLçææ¬ä¿¡æ¯ï¼è®¾å®çè¿æ¥æ¶é´æ¯5Sï¼è·åå°è¿ä¸ªææ¬ä¿¡æ¯ä¹åJsoupè¿å¸¦æ解ææ¹æ³ï¼éè¿link.attr("title")æ¥è·åHTMLä¸ç<title>æ ç¾ä¸çæ é¢ï¼ç¶ååéè¿link.attr("abs:href")æ¥è·åæ°é»ä¸çé¾
ããæ¥ï¼ç±æ¤ï¼æ们就è·å¾äºHTMLä¸æ为éè¦ç两é¨åï¼ä¹å°±æ¯æ é¢ä»¥åé¾æ¥ï¼äºæ
å°è¿éå·²ç»å®æ大åäºï¼æ¥ä¸æ¥å°±æ¯å°æ é¢æ¾ç¤ºå¨å½å页é¢ï¼ç¶åç¹å»æ é¢åï¼è½å°æ é¢ä»¥åæä¸å
容æ¾ç¤ºå¨ä¸ä¸ªé¡µé¢ï¼å¤ççæ¹æ³å¦ä¸ï¼
ãã1 private Handler getHandler() {
2 return new Handler(){
3 public void handleMessage(Message msg) {
4 if (msg.what < 0) {
5 Toast.makeText(GeekActivity.this, "æ°æ®è·å失败", Toast.LENGTH_SHORT).show();
6 }else {
7 initListview();
8 }
9 }
10 };
11 }
ããgetHandler
ããæ¤æ¹æ³ä¼å¤ææ°æ®æ¯å¦ä¸ºç©ºï¼è¥ä¸ºç©ºåå¨ææºå±å¹è·³åºï¼æ°æ®è·å失败çåæ ·ï¼å½ç¶äºï¼å欢ä»ä¹å°±æ¹æä»ä¹ï¼éä½ ææ³~ç¶åæåè·åæ°æ®åä¼è¿å
¥å°initListviewæ¹æ³ï¼
ãã1 private void initListview() {
2 listview = (ListView)findViewById(R.id.listView);
3 SimpleAdapter adapter = new SimpleAdapter(this, data,
4 android.R.layout.simple_list_item_1, new String[] { "title"},
5 new int[] { android.R.id.text1 });
6 listview.setAdapter(adapter);
7
8
9 listview.setOnItemClickListener(new OnItemClickListener() {
10 @Override
11 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
12 long arg3) {
13 Map<String, Object> map = data.get(arg2);
14 String url = (String)(map.get("url"));
15 String title = (String)(map.get("title"));
16 Intent intent = new Intent();
17 intent.putExtra("url", url);
18 intent.putExtra("title", title);
19 intent.setClass(GeekActivity.this, ContentActivity.class);
20 startActivity(intent);
21 }
22 });
23 }
ããinitListview
ããè¿ä¸ªæ¹æ³ä¼å°è·åçæ°é»æ é¢æ¾ç¤ºå¨å½å页é¢ä¸ï¼ç¶åå°æ°é»çæ é¢ä»¥åé¾æ¥ä¿åä¸æ¥ï¼éè¿intentä¼ å°ä¸ä¸ä¸ªActivityï¼ä¹å°±æ¯ContentActivityè¿è¡å¤çï¼å¹¶å°æ é¢ä»¥åå
容æ¾ç¤ºå¨ä¸ä¸ä¸ªé¡µé¢ä¸ã代ç çåä¸å¦ä¸ï¼
ãã1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.activity_content);
5
6 url = getIntent().getStringExtra("url");
7 String title = getIntent().getStringExtra("title");
8 TextView tv = (TextView)findViewById(R.id.title_content);
9 tv.setText(title);
10 handler = getHandler();
11 ThreadStart();
12 }
ããonCreate
ããonCreateæ¹æ³ä¸è·åä¸ä¸ªActivityä¸ä¼ è¿æ¥çurl以åtitleï¼ç¶åç´æ¥å°æ°é»æ é¢æ¾ç¤ºå¨å½å页ï¼ç¶åå©ä½é¨ååä¸ä¸ªæ¹æ³å·®ä¸å¤ªå¤ï¼è¿æ¥å°ç½ä¸ï¼è·åHTMLå
容ï¼è¿æ¬¡å¨æ¹æ³ä¸ä»
ä»
æ¯è§£æçæ¹æ³ä¸åï¼æ¯ç«è¿æ¬¡è§£ææ¯è¦è·åå
容å~代ç å¦ä¸ï¼
ãã1 private List<Map<String, Object>> getCsdnNetDate() {
2 List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
3 Document doc = http_get(url);
4 Elements links = doc.select("div#Cnt-Main-Article-QQ>p");
5 for(Element link: links)
6 {
7 Map<String, Object> map = new HashMap<String, Object>();
8 map.put("title", link.text());
9 result.add(map);
10 }
11
12
13 return result;
14 }
ããæ 红é¨å为ä¸ä¸æ¬¡ä¸åçé¨åï¼è¿ä¸ªè§£æé½æ¯ç¨çJsoupèªå¸¦çï¼å½ç¶æ£å表达å¼ä¹æ¯å¯ä»¥åå°çå¦ï¼å³å³ï¼ææ¿è®¤æå¾æçåï¼æ好ç¨çå·¥å
·å°±ç´æ¥ç¨äºï¼çæ¶çåçäºå¹²åä¸ç¨å¢ï¼å°±ååç½ç«ææ¡æ¶äºèªç¶å°±ç¨äºï¼ä¸å欢ç¨çæä¹æ¨æåæ³ï¼ä½ å¯ä»¥ä½¿ç¨æ£å表达å¼æ¥åï¼è¯è¯´ä»¥åç¨
ããPythonåç¬è«çæ¶åå°±æ¯æ£å表达å¼åçã
ããè³æ¤ä¸ä¸ªå°çæ°é»çé
读APPå°±åºä¸äºï¼å¦ï¼å¯¹äºï¼ä¸è¦å¿äºå¨ä½ çé
ç½®æ件å å
¥Activity以åä¸ç½è®¸å¯ï¼ä¸ç¶çè¯æ¯ä¼éªéçå¦ãå½ç¶è¿ä¸ªAPPå¾æ¯ç²ç³ï¼ææ¶é´ç人å¯ä»¥å°å¾çä¹å ä¸è¿è¡ä¸ä¸é¡µé¢ç设计ï¼åä¸ä¸ç¾å·¥ä»ä¹çã
转载