Github API从目录获取文件数据

格里高雷

我试图使用Github API来获取我创建的目录的内容。

这是我拥有的目录结构:

  • 图片
    • mobile_images
      • img1241251235
        • extractedText.txt
        • img.jpeg(这些文件可能大于1MB)
      • img2142412312
        • extractedText.txt
        • img.jpeg

如您所见,我知道images/mobile_images/目录中有一堆遵循结构的目录。

从这些目录中,我想提取每个extractedText.txt文件的内容(存储在该文件中的文本)并保存每个文件的download_url img.jpeg

我遵循的步骤是:

  1. 在根目录(images / mobile_images)上,我调用方法并获取其中的目录列表(此响应)。所以我得到了img124...img214...依此类推。

  2. 现在,我获得了所有目录(imgXX..一个),然后在每个目录上调用相同的方法以获取其内容。这将返回extractedText.txtimg.jpeg(来自步骤1的响应。)

到现在为止还挺好。

现在,如果我在文件上调用相同的方法,则应返回this这适用于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

您可以在这里找到我当前的代码

那时为止一切正常当我到达文件时,我需要检查它是文本文件还是图像文件。

问题是,我不知道如何管理“如果情况”,而合并后,我获得(数据download_urlextractedText 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 >> {
 // ...
  1. 有没有更简单的方法来解决此问题?
  2. 我的方法可以吗?
  3. 如何处理“如果”情况,如何将数据合并到单个Image对象中?
格里高雷

我设法实现了一个临时解决方案。

我编写了两个将返回的函数:

  1. Observable包含方法中数据的列表中的一个mModel.getFile(responseBody.path)
  2. 一个Observable列表的含有responseBody.download_url

之后,我得到两个观测我将它们合并使用.zip()方法与相结合的方法:

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()
  }
 })

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章