發現----Android Demo

來源:互聯網
上載者:User

標籤:

       時間悄悄的走,轉眼來實習已經三個月了,三個月的時間,小編慢慢的成長著,從剛開始的電商項目到現在的車段子項目,小編在走過一個又一個項目的同時,走過了一個又一個戰勝自己的奇蹟,每次遇到一個新的技術點,小編就開始搗鼓,搗鼓這回事,真的需要勇氣,搗鼓搗鼓,duang,功能出來了,好開心`(*∩_∩*)′,能力往往是做了才會獲得,而不是有了能力才去做,丫頭加油。小夥伴們可能都在某些app上看見過發現的功能,點擊發現的按鈕自動載入最熱門的資訊,在小編最近搗鼓的項目裡面就有這個功能,經過幾天的搗鼓,終於新鮮出爐了,今天這篇部落格小編就來簡單的介紹一下如何點擊發現按鈕,自動載入我們所需要的相關資訊,希望可以協助到需要的小夥伴們,還請小夥伴多多指教`(*∩_∩*)′。

       首先,我們來編寫我們的實體層,需要用到兩個實體,第一個content如下所示:

package com.jczb.car.bean;import java.util.Date;import java.util.List;import android.R.integer;import android.R.integer;/** * 說明:段子內容實體 * 丁國華 * 時間:2015年9月10日 10:41:43 */@SuppressWarnings("serial")public class Content extends Entity {/** 內容表標識 */private int uid;/** 顯示標題 */private String title;/** 視頻或者圖片路徑 */private String path;/**詳情*/private String details;/**頻道類型*/private String channelType;/**頻道名稱*/private String channelName;/**作者*/private String author;/**是否推薦*/private String isRecommend;/**閱讀或者播放數量*/private int  browseNumber;/**評論數*/private int commentbrowseNumber;/**贊數*/private int praiseNumber;/**踩數*/private int treadNumber;/**發布時間*/private String issueTime;/**是否收藏*/private int isCollect;/**關聯視頻*/private List<VideoRelation> Content;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getDetails() {return details;}public void setDetails(String details) {this.details = details;}public String getChannelType() {return channelType;}public void setChannelType(String channelType) {this.channelType = channelType;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getIsRecommend() {return isRecommend;}public void setIsRecommend(String isRecommend) {this.isRecommend = isRecommend;}public int getBrowseNumber() {return browseNumber;}public void setBrowseNumber(int browseNumber) {this.browseNumber = browseNumber;}public int getCommentbrowseNumber() {return commentbrowseNumber;}public void setCommentbrowseNumber(int commentbrowseNumber) {this.commentbrowseNumber = commentbrowseNumber;}public int getPraiseNumber() {return praiseNumber;}public void setPraiseNumber(int praiseNumber) {this.praiseNumber = praiseNumber;}public int getTreadNumber() {return treadNumber;}public void setTreadNumber(int treadNumber) {this.treadNumber = treadNumber;}public String getIssueTime() {return issueTime;}public void setIssueTime(String issueTime) {this.issueTime = issueTime;}public String getChannelName() {return channelName;}public void setChannelName(String channelName) {this.channelName = channelName;}public int getIsCollect() {return isCollect;}public void setIsCollect(int isCollect) {this.isCollect = isCollect;}public List<VideoRelation> getContent() {return Content;}public void setContent(List<VideoRelation> content) {Content = content;}public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}}
      第二個實體contentVo,具體代碼如下所示:        

package com.jczb.car.bean;import java.util.List;/** *說明: 內容集合,用於Json串的解析 *丁國華 *時間:2015年9月10日 10:38:38 */@SuppressWarnings("serial")public class ContentVo extends Entity {/** 伺服器返回結果:true或false */private String result;/** 伺服器返回的Json串解析為List結合 */private List<Content> Content;public String getResult() {return result;}public void setResult(String result) {this.result = result;}public List<Content> getContent() {return Content;}public void setContent(List<Content> content) {Content = content;}}
     接著,來編寫我們的需要調用的介面方法,代碼如下所示:

      

/** * 說明:發現 * @user 丁國華 * @date 2015-8-31 下午2:10:59 */public ContentVo discover(boolean isFirst, int contentVoId)throws AppException {ContentVo contentVo = null;// 構建快取檔案的keyString key = "contentVo_" + contentVoId;// 1.如果連網則首先從伺服器擷取資料if (isNetworkConnected() &&(isReadDataCache(key) || isFirst)) {try {// 從伺服器擷取Content的集合contentVo = ApiClient.discover(this);// 如果能夠擷取到伺服器中的資料則儲存到本機快取,只有保證資料不為空白,且擷取到的結果為true的時候才緩衝到本地if (contentVo != null && contentVo.getResult().equals("false")) {contentVo.setCacheKey(key);saveObject(contentVo, key);}} catch (AppException e) {// 如果出現訪問中途斷網,則擷取本機快取中的資料contentVo = (ContentVo) readObject(key);// 如果本機快取中資料為空白,則拋出異常if (contentVo == null) {throw e;}}}// 2.如果未連網則從緩衝中擷取資料else {contentVo = (ContentVo) readObject(key);if (contentVo == null) {contentVo = new ContentVo();}return contentVo;}return contentVo;}
       第三步,我們來編寫我們的xml布局,具體代碼如下所示:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#F7F7F7"    android:orientation="vertical" >    <LinearLayout style="@style/top_title_style" >        <!-- 角括弧的布局 -->        <ImageButton            android:id="@+id/about_us_back"            android:layout_width="14dp"            android:layout_height="25.5dp"            android:layout_gravity="center_vertical"            android:layout_marginLeft="10dp"            android:background="@drawable/back" />        <!-- 車段子布局 -->        <TextView            style="@style/top_title_word_style"            android:text="車段子" />    </LinearLayout>    <!-- 搜尋 -->    <RelativeLayout        android:id="@+id/rl_search_id"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="2dp"        android:orientation="horizontal" >        <TextView            android:id="@+id/et_seachkey_id"            android:layout_width="match_parent"            android:layout_height="50dp"            android:background="@drawable/search_photo"            android:textSize="15sp" />        <ImageView            android:id="@+id/iv_search_id"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_marginLeft="290dp"            android:layout_marginTop="15dp"            android:background="@drawable/search" />         <TextView            android:id="@+id/iv_search_id"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:layout_marginLeft="10dp"            android:layout_marginTop="15dp"            android:textSize="15sp"            android:hint="請輸入搜尋索引鍵" />    </RelativeLayout>    <!-- 熱門兒 -->    <LinearLayout        android:layout_width="match_parent"        android:layout_height="50dp"        android:layout_marginTop="5dp"        android:orientation="vertical" >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center"            android:gravity="center"            android:text="@string/hot_channels_str"            android:textColor="@color/light_blue"            android:textSize="25sp" />        <View            android:layout_width="match_parent"            android:layout_height="1dp"            android:layout_marginTop="2dp"            android:background="@color/lightgray" />    </LinearLayout>    <!-- 熱門兒內容 -->    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:minHeight="?android:attr/listPreferredItemHeight"        android:orientation="vertical" >        <ListView            android:id="@+id/lv_hotchannel_id"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:divider="@null"            android:minHeight="200dp" >        </ListView>            </LinearLayout></LinearLayout>
      第四步,編寫java類裡面所需要的代碼,如下所示:
package com.jczb.car.ui;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.jczb.car.AppContext;import com.jczb.car.AppException;import com.jczb.car.R;import com.jczb.car.bean.Content;import com.jczb.car.bean.ContentVo;/** * 說明:發現功能頁面 * 丁國華 * 時間: 2015-9-2下午2:02:58 */public class DiscoveryActivity extends Activity implements OnClickListener,OnItemClickListener {//RelativeLayout rlFoundSearch;//ImageView ivTuBiaoSearch;// 聲明用到的幾個控制項private TextView etSearch;private ImageView ivSearch;private ListView lvHotChannel;private RelativeLayout rlFoundSearchEmpty;//private ImageView ivTuBiao;/**解析發現介面用的實體類*/private ContentVo contentVo = null;/**用來填充ListView的List*/private List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();/**用來獲得伺服器介面的發現內容集合*/private List<Content> discoverContent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.discovery);findViewById();// 初始化頁面控制項initView();/*跳轉到搜尋索引鍵的空白的頁面*/rlFoundSearchEmpty.setOnClickListener(this);//ivTuBiao.setOnClickListener(this);// 啟動子線程,擷取伺服器資料discoverThread.start();}private void findViewById() {// TODO Auto-generated method stubrlFoundSearchEmpty=(RelativeLayout) findViewById(R.id.rl_search_id);//ivTuBiao=(ImageView) findViewById(R.id.iv_search_tubiao_id);}@Overridepublic void onClick(View v) {switch (v.getId()) {/*case R.id.iv_search_tubiao_id:           break;*/case R.id.rl_search_id:Intent intentFoundSerch = new Intent(this,SearchResourceActivity.class);    startActivity(intentFoundSerch);break;default:break;}}/** *說明:初始化控制項和監聽事件 *丁國華 * 時間:2015-9-2 下午2:12:49 */public void initView() {// 初始化控制項etSearch = (TextView) findViewById(R.id.et_seachkey_id);ivSearch = (ImageView) findViewById(R.id.iv_search_id);lvHotChannel = (ListView) findViewById(R.id.lv_hotchannel_id);//rlFoundSearch=(RelativeLayout)findViewById(R.id.rl_search_id);// 初始化監聽事件ivSearch.setOnClickListener(this);// ListView想要實現點擊事件本Activity必須實現OnItemClickListener介面lvHotChannel.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {//點擊item之後能夠根據點擊位置擷取將要攜帶的參數跳轉到搜尋結果頁Intent intent = new Intent(DiscoveryActivity.this, VedioInfoActivity.class);intent.putExtra("channelType", discoverContent.get(position).getChannelType());intent.putExtra("Id", discoverContent.get(position).getId());startActivity(intent);}});};/** * 說明:從伺服器端擷取並載入資料到ListView中 *  丁國華 * 時間: 2015-9-2 下午2:54:27 */public void loadData() {}/** * 定義一個線程等待 */ Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);// 需要根據線程中傳遞的msg中what的傳回值進行判斷// 訊息的what值為1,為空白what為-1,異常為0switch (msg.what) {case 1://擷取線程得到的伺服器資料contentVo = (ContentVo)msg.obj;discoverContent = contentVo.getContent();//將資料賦給List<Map<>>集合for (int i = 0;  i< discoverContent.size(); i++) {Map<String, Object> map = new HashMap<String, Object>();//map.put("Id", discoverContent.get(i).getId());//map.put("channelType", discoverContent.get(i).getChannelType());map.put("title", discoverContent.get(i).getTitle());map.put("channelName", discoverContent.get(i).getChannelName());data.add(map);}//定義填充ListView的Adapter並填充到ListView中//String[]{}與map中填的名字必須保持一致SimpleAdapter contentAdapter = new SimpleAdapter(DiscoveryActivity.this, data, R.layout.discovery_item,new String[]{"title","channelName"}, new int[]{R.id.tv_channelTopNews_id,R.id.tv_channelName_id});lvHotChannel.setAdapter(contentAdapter);break;case -1:Toast.makeText(DiscoveryActivity.this, "資料為空白!", Toast.LENGTH_LONG).show();break;case 0:Toast.makeText(DiscoveryActivity.this, "資料擷取失敗!", Toast.LENGTH_LONG).show();break;default:break;}}};/** * 開啟一個發現子線程 */Thread discoverThread = new Thread(new Runnable() {@Overridepublic void run() {Message msg = new Message();// 擷取全域對象ApplicationAppContext appContext = (AppContext) getApplication();try {// 擷取伺服器資料contentVo = appContext.discover(true, 1);// 返回contentVo則將訊息的what值為1,為空白what為-1,異常為0if (contentVo != null) {msg.what = 1;msg.obj = contentVo;} else {msg.what = -1;}} catch (AppException e) {msg.what = 0;e.printStackTrace();}handler.sendMessage(msg);}});/** * 說明:根據handler傳過來的類型顯示不同的Toast提示 * 丁國華  * 時間:2015-9-2 下午3:53:30 */public void showToast(int what) {switch (what) {case -1:Toast.makeText(DiscoveryActivity.this, "資料為空白!", Toast.LENGTH_LONG).show();break;case 0:Toast.makeText(DiscoveryActivity.this, "資料擷取失敗!", Toast.LENGTH_LONG).show();default:break;}}@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stub}}

       到此,我們的發現這個功能的一條線就走下來了,最後,我們來看一下我們的運行效果,如下所示:

        

        小編寄語:發現的實現功能,小編就簡單的介紹到這裡,發現實現了,但是小編到現在還是雲裡霧裡,不過沒關係,小編會越挫越勇的,這就是生命的意義,還是那句話對於小編來說,既是挑戰更是機遇,因為知識都是相通的,再者來說,在小編的程式人生中,留下最珍貴的記憶,雖然以後小編不一定從事安卓這個行業,代碼世界裡,很多種事,有的甜蜜,有的溫馨,有的婉轉成歌,有的綿延不息,在這些故事裡,我們唯一的共通之處就是,某年,某月,某個波瀾不驚的日子裡,曾經很愛很愛你!愛你--這段實習的日子裡,安卓帶給小編的種種的驚喜。在 下篇博文中小將和小夥伴們一起來分享,如何輸入關鍵字,搜尋出相應內容,敬請期待`(*∩_∩*)′!

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

發現----Android Demo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.