Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 發現----Android Demo

發現----Android Demo

編輯:關於Android編程

時間悄悄的走,轉眼來實習已經三個月了,三個月的時間,小編慢慢的成長著,從剛開始的電商項目到現在的車段子項目,小編在走過一個又一個項目的同時,走過了一個又一個戰勝自己的奇跡,每次遇到一個新的技術點,小編就開始搗鼓,搗鼓這回事,真的需要勇氣,搗鼓搗鼓,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 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 getContent() {
		return Content;
	}

	public void setContent(List 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;

	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

	public List getContent() {
		return Content;
	}

	public void setContent(List content) {
		Content = content;
	}

	

}
接著,來編寫我們的需要調用的接口方法,代碼如下所示:

 

 

/**
	 * 說明:發現
	 * @user 丁國華
	 * @date 2015-8-31 下午2:10:59
	 */
	public ContentVo discover(boolean isFirst, int contentVoId)
			throws AppException {

		ContentVo contentVo = null;

		// 構建緩存文件的key
		String 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布局,具體代碼如下所示:

 




    

        

        

        

        
    

    

    

        

        
         
    

    

    

        

        
    

    

    

        
        
        

    

第四步,編寫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> data = new ArrayList>();
	
	/**用來獲得服務器接口的發現內容集合*/
	private List discoverContent;

	@Override
	protected 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 stub
		rlFoundSearchEmpty=(RelativeLayout) findViewById(R.id.rl_search_id);
		//ivTuBiao=(ImageView) findViewById(R.id.iv_search_tubiao_id);

	}

	@Override
	public 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() {

			@Override
			public 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() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);

			// 需要根據線程中傳遞的msg中what的返回值進行判斷
			// 消息的what值為1,為空what為-1,異常為0
			switch (msg.what) {
			case 1:
				
				//獲取線程得到的服務器數據
				contentVo = (ContentVo)msg.obj;
				discoverContent = contentVo.getContent();
				
				//將數據賦給List>集合
				for (int i = 0;  i< discoverContent.size(); i++) {
					
					Map map = new HashMap();
					//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() {

		@Override
		public void run() {
			Message msg = new Message();

			// 獲取全局對象Application
			AppContext appContext = (AppContext) getApplication();

			try {
				// 獲取服務器數據
				contentVo = appContext.discover(true, 1);

				// 返回contentVo則將消息的what值為1,為空what為-1,異常為0
				if (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;
		}
	}
	
	@Override
	public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
		// TODO Auto-generated method stub

	}

}

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

 

/

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

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved