Go項目(一)、伺服器資料拉取和Material Design風格

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

零、Go項目的github地址:https://github.com/fantianwen/Go

一、前言:因為希望能能夠整合現在安卓的圍棋app中較好的東西和當下較為流行的App中常見的功能,於是,打算開始這個叫Go的項目。

初步希望實現的功能:

1、使用Material Design風格進行app介面的搭建;
2、具體實現模組:

1>使用者中心;
2>新聞中心;

二、新聞中心的實現:

2.1、使用技術:Jsoup,tcpdump,wireshark,本來打算使用tcpdump和wireshark來進行sina體育用戶端的資料包的抓取,然後分析出sina體育用戶端和伺服器端的互動介面。希望有時間能夠學習下lunix下的抓包工具tcpdump命令。使用tcpdump分析資料介面失敗之後,就使用了別人部落格上沒有使用的jsoup工具,jsoup能夠根據url位址解析出該介面中所有的link連結等東西。這樣,有了這樣的工具,就能根據sina頁面的url去解析出這個頁面資訊為我們所用。

2.1.1、使用tcpdump和wireshake進行抓包

在lunix下面,我們可以使用tcpdump進行轉包,在安卓shell下面,我們同樣可以使用這個命令去抓取好該安卓機器進行互動的資料包。具體操作:

1、將tcpdump指令push到android檔案目錄中去:

RadAsm:~ RadAsm$ adb push /Users/RadAsm/Desktop/tcpdump /data/local/  1889 KB/s (749040 bytes in 0.387s)   

2、在adb shell模式下運行tcpdump指令進行該手機和伺服器端的資料包的抓取

adb shell  cd data/local/  tcpdump -n -s 0 -w /sdcard/go/news.pcap(將抓取的資料包儲存到sdcard下面) 

3、這樣,在/sdcard/go/目錄下面就有了一個叫做news.pcap的資料包
4、接下來,使用wireshark進行資料包的分析,一般性而言,app即時性非特別高的,使用http協議,即時性要求很高的,可以使socket方式進行實現。
5、在wireshark下面找到和app伺服器進行互動的資料包,分析出url介面訪問地址即可。

2.1.2、使用jsoup對url對應的html頁面進行解析,解析出我們希望的資訊(如頁面連結,新聞標題等等)

jsoup解析html頁面代碼實現:
public class HtmlUtils {    //list contained url link    private static ArrayList<NewsModel> newsList =new ArrayList<NewsModel>();    /**     * form a url in net,we can parse all the useful information for us     * @param url     * @return     */    public static ArrayList<NewsModel> parseDataFromHtml(String url) {        Document doc = null;        try {            doc = Jsoup.connect(url).get();        } catch (IOException e) {            e.printStackTrace();        }        Elements links = doc.select("a[href]");        Elements imports = doc.select("link[href]");        Elements times = doc.select("font[class]");        Log.e("time",times.size()+"");        for (Element link : links) {            /**             * put all the url to list             */            //judge wheather this news is a weiqi news            String content=trim(link.text(),35);            if(content.length()>13){                //we can judge that this is a weiqi news,and we add this news to the list                NewsModel newsModel = new NewsModel();                newsModel.setUrl(link.attr("abs:href"));                newsModel.setContent(trim(link.text(),35));                newsList.add(newsModel);            }        }        Log.e("links",newsList.size()+"");        for (int i=0;i<times.size();i++){            NewsModel newsModel = newsList.get(i);            Element element = times.get(i);            newsModel.setUpdateTime(trim(element.text(),35));            Log.e("lklklkl", newsList.get(i).getUpdateTime());        }        return newsList;    }    private static String trim(String s, int width) {        if (s.length() > width)            return s.substring(0, width - 1) + ".";        else            return s;    }}

在這個類中,我企圖將html中我們希望的頁面元素解析到一個ArrayList中。以方便RecyclerView的資料載入。

2.2、具體實現中碰到的問題

2.2.1、新聞頁面的資料的ArrayList的資料的擷取

要知道,我們希望擷取到的資料的特徵,比方說新聞標題的長度什麼的,然後根據這個長度將資料擷取到返回。

2.2.2、RecyclerView問題

其一、
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);NewsViewHolder newsViewHolder=new NewsViewHolder(v);

在onCreateViewHolder中返回的ViewHolder會在自己建立的ViewHolder的構造方法中實現,而需要瞭解的是:這裡的View的對象是RecyclerView的每個Item的根布局的實現。

2.2.3、jsoup資料解析問題

在jsoup中資料的擷取輸在主線程中實現的,我們需要自己開一個子線程,這樣比較不美觀,往後還是希望能夠將jsoup項目中自己寫出一套非同步擷取資料的方法,並提供回調方法。

三、小結

希望在網路編程這方面能有長足的進步吧!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.