Android Github API从目录获取文件数据
我试图使用GithubAPI来获取我创建的目录的内容 这是我的目录结构:Android Github API从目录获取文件数据,android,kotlin,rx-java,github-api,Android,Kotlin,Rx Java,Github Api,我试图使用GithubAPI来获取我创建的目录的内容 这是我的目录结构: 图像 移动图像 IMG124125123 extractedText.txt img.jpeg(这些文件可能大于1MB) img2142412312 extractedText.txt img.jpeg 正如您所看到的,我知道在images/mobile\u images/目录中有一组遵循某种结构的目录 从这些目录中,我想提取每个extractedText.txt文件(存储在该文件中的文本)的内容,并保
- 图像
- 移动图像
- IMG124125123
- extractedText.txt
- img.jpeg(这些文件可能大于1MB)
- img2142412312
- extractedText.txt
- img.jpeg
- IMG124125123
- 移动图像
images/mobile\u images/
目录中有一组遵循某种结构的目录
从这些目录中,我想提取每个extractedText.txt
文件(存储在该文件中的文本)的内容,并保存每个img.jpeg
的下载url
我的步骤如下:
img124…
,img214…
等等extractedText.txt
和img.jpeg
。(步骤1中的响应。)extractedText.txt
文件,因为它们的大小不超过1 MB,但对于图像文件,它将抛出一个错误
我想获得如下所示的对象列表:
Image(val name: String, //this is something I extract from img123...
val date: Long, //this is something I extract from img123...
val extractedText: String, //this should be the text from extractedText.txt
val url: String) //this should be the download_url of img.jpeg file
你可以找到我当前的代码
一切顺利,直到明天。当我到达该文件时,我需要检查它是文本文件还是图像文件
问题是我不知道如何管理“if case”,然后将我得到的数据(download\u url
和extractedText content
)合并到一个图像对象中。这是我不知道如何处理的代码部分:
// from here starts the problem
.flatMap(object:
Function < ResponseBody, Observable < Any >> {
override fun apply(responseBody: ResponseBody): Observable < Any > {
return
if (responseBody.path.contains("txt", true)) {
// if the file is a text file I need to get the content of the file so I'll call this
mModel.getFile(responseBody.path) as Observable < Any >
} else {
// as I mentioned if the file is an img I only need to get download_url
responseBody.download_url
}
}
})
// merge the data into an Image file
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object: Consumer < MutableList < Image >> {
// ...
//问题从这里开始
.flatMap(对象:
功能>{
覆盖乐趣应用(responseBody:responseBody):可观察{
返回
if(responseBody.path.contains(“txt”,true)){
//如果文件是一个文本文件,我需要得到文件的内容,所以我称之为
mModel.getFile(responseBody.path)作为可观察的
}否则{
//正如我提到的,如果文件是img,我只需要获得下载url
responseBody.download\u url
}
}
})
//将数据合并到图像文件中
托利斯先生()
.observeOn(AndroidSchedulers.mainThread())
.订阅(对象:消费者>{
// ...
我设法实施了一个临时解决方案 我编写了两个将返回的函数:
mModel.getFile(responseBody.path)
响应库。下载\u url
.zip()
方法和combine方法将它们合并:
Observable.zip(getImageDataObservable(),
getImageDownloadUrlObservable(),
object: BiFunction < MutableList < Image > , MutableList < Image > , List < Image >> {
override fun apply(imageData: MutableList < Image > , imageUrl: MutableList < Image > ): List < Image > {
return combineImageObservables(imageData, imageUrl)
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object: Consumer < List < Image >> {
override fun accept(images: List < Image > ? ) {
Log.d(TAG, "images = ${images?.size}")
Log.d(TAG, images.toString())
if (images != null) {
mViewDelegate.showImages(images)
} else {
mViewDelegate.showError("Try again!")
}
mViewDelegate.showSuccess("Displaying ${images?.size} images")
mViewDelegate.hideLoading()
}
}, object: Consumer < Throwable > {
override fun accept(t: Throwable ? ) {
Log.e(TAG, t.toString(), t)
if (t != null) {
mViewDelegate.showError(t.message)
} else {
mViewDelegate.showError("Error")
}
Crashlytics.logException(t)
mViewDelegate.hideLoading()
}
})
Observable.zip(getImageDataObservable(),
getImageDownloadUrlObservable(),
对象:双功能,MutableList,List>{
覆盖应用(imageData:MutableList,imageUrl:MutableList):List{
返回combineImageObservables(imageData、imageUrl)
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(对象:消费者>{
覆盖乐趣接受(图像:列表<图像>?){
Log.d(标记“images=${images?.size}”)
Log.d(标记,images.toString())
如果(图像!=null){
mViewDelegate.showImages(图像)
}否则{
mViewDelegate.batherror(“再试一次!”)
}
mViewDelegate.showSuccess(“显示${images?.size}图像”)
mViewDelegate.hideLoading()
}
},对象:消费者<可丢弃>{
覆盖乐趣接受(t:可丢弃?){
Log.e(标记,t.toString(),t)
如果(t!=null){
mViewDelegate.BREASHROR(t.message)
}否则{
mViewDelegate.showError(“错误”)
}
Crashlytics.logException(t)
mViewDelegate.hideLoading()
}
})
我设法实现了一个临时解决方案
我编写了两个将返回的函数:
mModel.getFile(responseBody.path)
响应库。下载\u url
.zip()
方法和combine方法将它们合并:
Observable.zip(getImageDataObservable(),
getImageDownloadUrlObservable(),
object: BiFunction < MutableList < Image > , MutableList < Image > , List < Image >> {
override fun apply(imageData: MutableList < Image > , imageUrl: MutableList < Image > ): List < Image > {
return combineImageObservables(imageData, imageUrl)
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object: Consumer < List < Image >> {
override fun accept(images: List < Image > ? ) {
Log.d(TAG, "images = ${images?.size}")
Log.d(TAG, images.toString())
if (images != null) {
mViewDelegate.showImages(images)
} else {
mViewDelegate.showError("Try again!")
}
mViewDelegate.showSuccess("Displaying ${images?.size} images")
mViewDelegate.hideLoading()
}
}, object: Consumer < Throwable > {
override fun accept(t: Throwable ? ) {
Log.e(TAG, t.toString(), t)
if (t != null) {
mViewDelegate.showError(t.message)
} else {
mViewDelegate.showError("Error")
}
Crashlytics.logException(t)
mViewDelegate.hideLoading()
}
})
Observable.zip(getImageDataObservable(),
getImageDownloadUrlObservable(),
对象:双功能,MutableList,List>{
覆盖应用(imageData:MutableList,imageUrl:MutableList):List{
返回combineImageObservables(imageData、imageUrl)
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(对象:消费者>{
覆盖乐趣接受(图像:列表<图像>?){
Log.d(标记“images=${images?.size}”)
Log.d(标记,images.toString())
如果(图像!=null){
mViewDelegate.showImages(图像)
}否则{
mViewDelegate.batherror(“再试一次!”)
}
mViewDelegate.showSuccess(“显示${images?.size}图像”)
mViewDelegate.hideLoading()
}
},对象:消费者<可丢弃>{
覆盖乐趣接受(t:可丢弃?){
Log.e(标记,t.toString(),t)
如果(t!=null){
mViewDelegate.BREASHROR(t.message)
}否则{
mViewDelegate.showError(“错误”)
}
Crashlytics.logException(t)
mViewDelegate.hideLoading()
}
})