使用rxjava吧
線程操作比較方便
package com.github.rxjavatest
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.bumptech.glide.Glide
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.BiFunction
class MainActivity : AppCompatActivity() {
lateinit var recyclerView: RecyclerView
val list = arrayListOf<String>()
val adapter = ImageAdapter(list)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView = findViewById(R.id.recyclerView)
recyclerView.layoutManager = GridLayoutManager(this, 3)
recyclerView.adapter = adapter
initImage()
}
private fun initImage() {
val imageGetter = ImageGetter("http://588ku.com/beijing/0-0-pxnum-4-8-0-0-0-1/")
val imgOb = imageGetter.getImageObserable()
val imageGetter2 = ImageGetter("http://588ku.com/beijing/0-0-pxnum-4-8-0-0-0-2/")
val imgOb2 = imageGetter2.getImageObserable()
Observable.zip(imgOb, imgOb2, BiFunction<List<String>, List<String>, List<String>> { t1, t2 ->
val list = arrayListOf<String>()
list.addAll(t1)
list.addAll(t2)
list
}).observeOn(AndroidSchedulers.mainThread())
.subscribe {
list.addAll(it)
adapter.notifyDataSetChanged()
}
}
}
class ImageAdapter(val list: List<String>) : RecyclerView.Adapter<VH>() {
override fun onBindViewHolder(holder: VH?, position: Int) {
holder?.apply {
val src = list[position]
Glide
.with(itemView)
.load(src)
.into(img)
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): VH {
val view = LayoutInflater.from(parent?.context)?.inflate(R.layout.item_img, parent, false)
return VH(view)
}
override fun getItemCount(): Int {
return list.size
}
}
class VH(itemView: View?) : RecyclerView.ViewHolder(itemView) {
val img: ImageView by lazy { itemView!!.findViewById<ImageView>(R.id.iv_image) }
}
package com.github.rxjavatest
import android.annotation.SuppressLint
import android.util.Log
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import java.util.concurrent.Executors
/**
* Created by cai on 2018/2/12.
*/
class ImageGetter(var url: String) {
fun getImageObserable(): Observable<ArrayList<String>> {
return Observable
.create<Document> {
val doc = Jsoup.connect(url)
.get()
it.onNext(doc)
it.onComplete()
}
.subscribeOn(Schedulers.io())
.map {
it.select("div a img")
}
.map {
val list = arrayListOf<String>()
it.forEach {
val image = it.attr("data-original")
list.add(image)
}
list
}
.observeOn(AndroidSchedulers.mainThread())
}
@SuppressLint("SetJavaScriptEnabled")
companion object {
}
}
val Any.TAG
get() = this.javaClass.simpleName
fun Any.logger(msg: Any?) {
Log.i(TAG, msg.toString())
}
簡單寫了個demo
項目地址
這里用JSoup爬數(shù)據(jù)
然后Rxjava返回數(shù)據(jù)流處理結(jié)果的img src的集合的Observable
在實際Activity中同時獲得兩個Observable,使用zip操作符組合,然后在主線程中將圖片添加到list
刷新adapter
使用Glide加載圖片
之前思考過這個問題,把我的思路告訴你 一般來說,如果直接想要語音轉(zhuǎn)語音幾乎是很難實現(xiàn)的,現(xiàn)在的神經(jīng)網(wǎng)絡也沒有那么智能,或者說現(xiàn)在硬件的速度內(nèi)存都有一定的限制。
我認為語音準文字,或者文字轉(zhuǎn)語音的技術,可能會比較復雜,如果自己做,可能會成為這個問題的核心難點。但是這個問題的核心卻是第2步。所以建議調(diào)用第三方模塊來實現(xiàn)文字語音互相轉(zhuǎn)換;
回到第2步。做文字轉(zhuǎn)文字的訓練,目前有很多類似電影臺詞的內(nèi)容都可以作為訓練數(shù)據(jù)集。然后再尋找一個比較合適的神經(jīng)網(wǎng)絡即可快速完成訓練;
以上就是我此前思考的思路。
Redis有一個list的數(shù)據(jù)結(jié)構(gòu)可以滿足你的需求,詳情可以看一下慕課網(wǎng)的教程高峰削流
修改.cs文件需要重新編譯,生成dll。
個人覺得,其實這個跟你需要完成的任務有關。打個比方,你只是自己想寫一個程序,方便自己工作,那你就可以寫函數(shù)為主,反正自己知道這些函數(shù)什么意思,有時候換地方使用直接copy一下,修修改改就好了。
而如果是完成某個大的項目,項目要分很多塊,那么就必須寫類了。有人說我寫個函數(shù),最終實現(xiàn)起來還不是一樣?實現(xiàn)起來是一樣,那么后期維護呢?你是更喜歡看一個模塊,這個模塊有幾個類,還是說喜歡看幾十個函數(shù)呢?顯而易見,一般稍微有點樣子的項目都是分成幾個模塊,每個模塊會分出幾個類來各自實現(xiàn)某個特定的任務。到代碼層的時候,才會需要看函數(shù)的代碼。
如果一個項目是由按照某些順序,直接調(diào)用幾十個函數(shù)完成的,相信后期維護的人會瘋吧?好氣啊,全是函數(shù),雖然有說明,也很費事的吧?
頁面用vue做好后,就build一下生成靜態(tài)的資源,index.html直接引入build好的資源,我們的項目前后端徹底分離,頁面用vue寫好,build好直接發(fā)布,然后調(diào)用springboot寫好的接口
Leaflet就可以做到,
你說的都是可以做到的,但是沒有現(xiàn)成的產(chǎn)品
應該是IP的問題,你進Ubuntu里ifconfig看看IP多少,不要直接用127.0.0.1
可以把表單驗證錯誤信息賦值給變量傳遞到視圖,在視圖顯示錯誤信息試試
$data=validation_errors();
$this->load->view('user/insertData',$data);
放getter方法更好
沒人遇到這種問題么?
lua-nginx-module和OpenSSL 1.1.0不兼容
你換成OpenSSL 1.0.2就好了
使用 lateinit var 定義延遲初始化變量
class Machine : AbstractVerticle {
private lateinit var config: Config
constructor();
constructor(config: TicketMachineConfig) {
this.config = config
}
}
使用 kotlin 構(gòu)造函數(shù)
class Machine(private val config: Config) : AbstractVerticle {
}
entry.js中加一行代碼就行了window.a = a;a是一個模塊,不是一個全局變量,需要掛在windows上才可以。
index-》list->detail 跳轉(zhuǎn)用push
detail->list->index 用back 或者go(-1)不就好了。。。。。
關于點擊兩次退出app的,
app可以攔截到返回物理鍵的事件的,你在首頁的時候 告訴app 這個頁面不允許返回到上一頁(或者說當前在首頁了),
剩下的就是app的事了,計數(shù)點擊了幾次返回按鈕之類的
很多web應用都提供了從其他的服務器上獲取數(shù)據(jù)的功能。使用用戶指定的URL,web應用可以獲取圖片,下載文件,讀取文件內(nèi)容等。這個功能如果被惡意使用,可以利用存在缺陷的web應用作為代理攻擊遠程和本地的服務器。這種形式的攻擊稱為服務端請求偽造攻擊(Server-side Request Forgery)。
例如使服務器獲取本地任意文件
file:///C:/Windows/win.inifile:///etc/passwd
SSRF 可用于實現(xiàn)任意文件下載,但其可以用于更高級別的攻擊,通過判斷本地已經(jīng)安裝的服務,從而實現(xiàn)針對特定服務的漏洞利用,甚至獲得完整控制權(quán)。
你需要引入這個組件
import fontAwesomeIcon from 'xxxxx'
export default {
components: { fontAwesomeIcon }
}
然后再去使用,應該就可以了。
首先你要確保這三個東西都裝了
npm i --save @fortawesome/pro-solid-svg-icons
npm i --save @fortawesome/pro-regular-svg-icons
npm i --save @fortawesome/pro-light-svg-icons
然后,需要在main.js里面引入
import { library } from '@fortawesome/fontawesome-svg-core'
import { faCoffee } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
library.add(faCoffee)
Vue.component('font-awesome-icon', FontAwesomeIcon)
然后你再使用應該就不會報錯了。
npm官方文檔
如果是nuxt項目,你可以找到/layouts/default.vue這個文件,在這個文件加入以下引入的代碼,就可以了。親試。
<script>
import Vue from 'vue'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faCoffee, faSpinner } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
library.add(faCoffee,faSpinner)
Vue.component('font-awesome-icon', FontAwesomeIcon)
export default {
}
</script>你寫的getCommonItem方法,返回的是一個promise對象。所以在界面上顯示的是一個對象
promise只能傳遞值,不能返回值
你自己寫的commonItem不要返回Promise
cell中的黑色小標簽用collectionView展示
正則表達式不正確,匹配不了數(shù)據(jù),才導致hbase數(shù)據(jù)無法寫入
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。