第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何設(shè)計(jì)Android中需要從網(wǎng)絡(luò)獲取數(shù)據(jù)更新組件的最佳實(shí)現(xiàn)?

如何設(shè)計(jì)Android中需要從網(wǎng)絡(luò)獲取數(shù)據(jù)更新組件的最佳實(shí)現(xiàn)?

肆意先生 2016-12-07 22:02:46
聲明:不用框架。學(xué)習(xí)了一段時(shí)間,有幾個(gè)問(wèn)題沒(méi)想通:1、網(wǎng)絡(luò)獲取數(shù)據(jù),肯定要用回調(diào)。但是回調(diào)貌似不能控制時(shí)間...比如這個(gè)請(qǐng)求可能10s后才能獲取到數(shù)據(jù),那么這10s該如何監(jiān)控?2、如果是ListView這種含有子項(xiàng)的,每個(gè)子項(xiàng)都需要從網(wǎng)絡(luò)請(qǐng)求,那么是不是有幾個(gè)子項(xiàng),就要聲明幾個(gè)Handler?
查看完整描述

3 回答

?
alionSSS

TA貢獻(xiàn)57條經(jīng)驗(yàn) 獲得超82個(gè)贊

  1. 第一個(gè)問(wèn)題,不太理解你的意思。監(jiān)控這10s是什么意思,服務(wù)器返回?cái)?shù)據(jù)的快慢是和網(wǎng)絡(luò)有關(guān)了,快慢不定。如果想知道什么時(shí)候返回的數(shù)據(jù),當(dāng)數(shù)據(jù)返回后,callback有幾種狀態(tài),舉個(gè)栗子:onSuccess、onError、onFailed。這種情況返回時(shí)會(huì)調(diào)用這函數(shù)。

  2. ListView這種需要一個(gè)adapter來(lái)控制,在重寫(xiě)getView方法中,可直接修改UI,例如給ImageView設(shè)置圖片。但是網(wǎng)絡(luò)請(qǐng)求屬于延時(shí)操作,不可以在這里設(shè)置。你可以開(kāi)子線程請(qǐng)求網(wǎng)絡(luò),在adapter中設(shè)置一個(gè)handler,網(wǎng)絡(luò)請(qǐng)求完成發(fā)消息通知handler(發(fā)的消息附帶圖片),最后再handler給imageView設(shè)置圖片

//adapter中的代碼
@Override
public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{
????……
????//bitmap是網(wǎng)絡(luò)請(qǐng)求得到的圖片
????Message?message?=?new?Message();
????message.obj?=?bitmap;//message攜帶圖片
????mHandler.sendMessage(message);
????……
}
//handler中重寫(xiě)handleMessage方法
@Override
public?void?handleMessage(Message?msg)?{
????imageView.setImageBitmap((Bitmap)?msg.obj);
}

3.*注意*,開(kāi)發(fā)一般不這樣寫(xiě),學(xué)習(xí)的時(shí)候可以這樣練習(xí)??梢栽囋嚨谌綀D片框架,一句話搞定,例如Picasso、Fresco等等。

【另外提一下】Handler應(yīng)該這樣寫(xiě)(新手如果看不懂的話,在網(wǎng)上多看看、查查吧)

private?MyHandler?mHandler?=?new?MyHandler(this);

private?static?class?MyHandler?extends?Handler?{
????private?final?WeakReference<MainActivity>?mActivity;

????public?MyHandler(MainActivity?activity)?{
????????//對(duì)引用對(duì)象進(jìn)行弱引用,利于java垃圾回收機(jī)回收,防止引用對(duì)象(例如activity)被關(guān)閉后,在內(nèi)存中
????????//仍然持有引用(例如有個(gè)10分鐘的延時(shí)消息),長(zhǎng)期占用內(nèi)存(activity屬于重量級(jí)組件,會(huì)占用很多內(nèi)存)
????????mActivity?=?new?WeakReference<>(activity);
????}

????@Override
????public?void?handleMessage(Message?msg)?{
????????MainActivity?activity?=?mActivity.get();
????????if?(activity?!=?null)?{
????????????
????????}
????}
}


查看完整回答
1 反對(duì) 回復(fù) 2016-12-08
  • 肆意先生
    肆意先生
    第一個(gè)問(wèn)題,具體來(lái)說(shuō)就是進(jìn)度條應(yīng)該怎么做?;卣{(diào)的話,不管是什么方法,都是網(wǎng)絡(luò)請(qǐng)求相應(yīng)完畢了,所以想搞一個(gè)實(shí)時(shí)的進(jìn)度條,肯定不能在回調(diào)里做吧,應(yīng)該在什么地方做呢?
  • alionSSS
    alionSSS
    1.進(jìn)度的話,可以這樣:例如下載一個(gè)10MB的文件,你下載的時(shí)候會(huì)有InputStream和OutputStream,你會(huì)去保存文件對(duì)吧?例如每次存1024字節(jié),存滿10MB為止。寫(xiě)個(gè)interface,每次保存的時(shí)候回調(diào)你里面的函數(shù),傳遞保存了多少的值進(jìn)去。進(jìn)度條那邊再實(shí)現(xiàn)interface,拿到回調(diào)值,顯示到屏幕。這樣就可以顯示進(jìn)度了。 2.一般都是聲明一個(gè)Handler的成員變量,但是開(kāi)發(fā)中handler很少這樣用。除此之外,你還可以這樣寫(xiě) new Thread() { @Override public void run() { //先從網(wǎng)絡(luò)獲取數(shù)據(jù) getDataFromServer(); //更新UI new Handler().post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } }.start();
  • alionSSS
    alionSSS
    關(guān)于下載那里,可能說(shuō)得有點(diǎn)模糊,再補(bǔ)充一下。下載一個(gè)10mb的文件,服務(wù)器會(huì)不斷地傳輸數(shù)據(jù)過(guò)來(lái),直到全部傳完。例如每次傳1024byte,你這里就會(huì)收到1024byte的inputStream,再用FileOutputStream去存文件(不斷在原文件后面添加)。每次服務(wù)器傳輸過(guò)來(lái)一點(diǎn),你就存一點(diǎn),存的時(shí)候使用接口回調(diào),實(shí)現(xiàn)進(jìn)度條的UI更新。
點(diǎn)擊展開(kāi)后面1
?
慕村8705556

TA貢獻(xiàn)7條經(jīng)驗(yàn) 獲得超7個(gè)贊

這個(gè) 。。。不懂

查看完整回答
反對(duì) 回復(fù) 2016-12-08
  • 3 回答
  • 1 關(guān)注
  • 2356 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)