gpt4 book ai didi

ios - 从 firebase 获取链接后图像不显示

转载 作者:行者123 更新时间:2023-11-28 07:52:07 28 4
gpt4 key购买 nike

我在我的 raspberry pi 上运行一个 python 脚本来拍照,将它移动到云端并将链接上传到 firebase。

因为拍照和上传大约需要 15 秒,所以我使用 DispatchQueue.main.asyncAfter。

以我目前的状态,我可以随时拍照,但有两件事我不能做。

  1. 如何在发生更改时获取 firebase 元素。 Python 可以做到这一点,我不知道那是什么 swift 方法。

  2. 图片不显示。是因为我要从DispatchQueue.main.asyncAfter中显示吗?

谢谢

import UIKit
import Firebase
import FirebaseDatabase

class RpiOps: UIViewController {

@IBOutlet weak var ivImage: UIImageView!
@IBOutlet weak var LblResult: UILabel!
@IBOutlet weak var tvLink: UITextView!


@IBAction func btn1Pic(_ sender: Any) {
rpi2do(state: "single_pic")
rpiResults(state: "-")

let actityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
actityIndicator.center = self.view.center
actityIndicator.hidesWhenStopped = true
actityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
view.addSubview(actityIndicator)
actityIndicator.startAnimating()

UIApplication.shared.beginIgnoringInteractionEvents()
DispatchQueue.main.asyncAfter(deadline: .now() + 20) {
actityIndicator.stopAnimating()
UIApplication.shared.endIgnoringInteractionEvents()
let ref = Database.database().reference()
//let post : [String: AnyObject] = ["2do": state as AnyObject]
ref.child("rpi_results").observeSingleEvent(of: .value, with: { (snapshot) in
let ud = snapshot.value as! [String: Any]
let asa = ud["got"] as! String
self.tvLink.text = asa
print("asa:", asa)
//self.LblResult

let url = URL(string: asa)
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
self.ivImage.image = UIImage(data: data!)

self.displayAlert(title: "Finished!", message: "Your picture has been taken. See the link here: " + asa)

//self.rpi2do(state: "-")
})
}
rpi2do(state: "-")

}


override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

// rpi operation
func rpi2do(state: String) {
let ref = Database.database().reference()
let post : [String: AnyObject] = ["2do": state as AnyObject]
ref.child("rpi2do").setValue(post)
}


// rpi operation
func rpiResults(state: String) {
let ref = Database.database().reference()
let post : [String: AnyObject] = ["got": state as AnyObject]
ref.child("rpi_results").setValue(post)
}


func displayAlert(title: String, message: String) {

let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in

self.dismiss(animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

最佳答案

根据Firebase docs ,我认为您在上面的 observeSingleElement 中使用了正确的方法来回答您的第一个问题。在第二个上,确保在尝试更新任何 UI 元素之前将 observeSingleEvent 的结果返回到主线程,如下所示。您可能会看到照片没有变化,因为您在数据库调用后不在主线程上。

    ref.child("rpi_results").observeSingleEvent(of: .value, with: { (snapshot) in
let ud = snapshot.value as! [String: Any]
let asa = ud["got"] as! String
DispatchQueue.main.sync {
self.tvLink.text = asa
print("asa:", asa)
//self.LblResult

let url = URL(string: asa)
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
self.ivImage.image = UIImage(data: data!)

self.displayAlert(title: "Finished!", message: "Your picture has been taken. See the link here: " + asa)

//self.rpi2do(state: "-")
}
})

关于ios - 从 firebase 获取链接后图像不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49367047/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com