小编pho*_*bus的帖子

Redux-Persist - 无法完全重置状态

我在我的 React 应用程序中使用 redux-persist 。注销时,我想完全重置 redux 状态并删除所有本地存储数据。

这是我的注销操作,其中我从后端删除刷新令牌,然后在调度 RESET 之前对 redux 存储持久器调用 purge。

export const logout = () => (dispatch) => {
    if (localStorage.refreshToken) {
        axios.post(`${API_URL}/logout`, {token: localStorage.refreshToken}).then( async () => {
            // rest redux-persist
            await persistor.purge();
            dispatch({ type: RESET });
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的根减速器中,我按照此处的答案来处理此重置操作:

const appReducer = combineReducers({
    /* app level reducers...*/
});

const rootReducer =  (state, action) => {
    console.log("Reducing action: ", action);
    if (action.type === RESET) {
        // reset state
        state = undefined;
        // reset …
Run Code Online (Sandbox Code Playgroud)

javascript local-storage reactjs redux redux-persist

6
推荐指数
0
解决办法
1万
查看次数

Android - 使用 PackageInstaller 和 PackageInstaller.Session 静默安装 APK

查看 Android (AOSP) 的来源,installPackage标记为已弃用并检查 Android 的 PackageManager 应用程序,它使用PackageInstaller该类创建一个PackageInstaller.Session实例来执行 APK 的安装。

我正在尝试在我的应用程序中做同样的事情。我使用系统密钥签名,并且我确实INSTALL_PACKAGES在清单中包含了权限。

这是我的代码:

    val packageName = "com.spotify.music"
    val inputStream = File(filesDir, "spotify.apk").inputStream()

    // ...

    val packageInstaller = context.packageManager.packageInstaller
    val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
    params.setAppPackageName(packageName)

    val sessionId = packageInstaller.createSession(params)
    val session = packageInstaller.openSession(sessionId)
    val out = session.openWrite("COSU", 0, -1)
    inputStream.copyTo(out)
    session.fsync(out)
    inputStream.close()
    out.close()
    session.commit(null)
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下奇怪的空指针异常:

Error while installing: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AppOpsManager.checkPackage(int, java.lang.String)' on a null object reference

有人知道这里出了什么问题吗?

android android-source silent-installer android-package-managers kotlin

5
推荐指数
1
解决办法
5138
查看次数

React Redux - 等待数据加载

我正在使用 Redux (+ thunk) 从我的 API 获取数据。我实现了一个 Data Fetcher 组件,它调用所有操作,完成后调度 LOADED。在我渲染内容的实际主要组件中,我会等到isLoadedprops 中的 flag 设置为 true。

这是数据获取器中的方法:

const fetchData = () => {
    if (isAuthenticated) {
        const p = [];
        p.push(fetchDataSetOne());
        p.push(fetchDataSetTwo());
        Promise.all(p).then( () => setHasLoaded() );
    }
}
Run Code Online (Sandbox Code Playgroud)

每个 fetch 方法都会返回一个 axios Promise,一旦检索到,我就会分派,如下所示:

export const fetchDataSetOne = () => dispatch => {
  return axios.get(`${API_URL}/dataSetOne`)
    .then(res => {
        dispatch({
            type: FETCH_ALL_DATA_SET_ONE,
            payload: res.data.docs
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

在我的组件的渲染函数中,我仅在加载时渲染内容(由操作中的 LOADED 调度设置setHasLoaded),如下所示:

{ hasLoaded && <MyContent> }
Run Code Online (Sandbox Code Playgroud)

即使我“等待”操作完成(= Promise.all),我的变量 hasLoaded …

reactjs redux

5
推荐指数
1
解决办法
7371
查看次数

ARKit中的FaceTracking –如何在屏幕上显示“ lookAtPoint”

ARFaceTrackingConfigurationARKit场所ARFaceAnchor有关的位置和面部的朝向到现场信息。除其他外,此锚具有lookAtPoint我感兴趣的属性。我知道此向量相对于面部。如何在屏幕上为此位置绘制一个点,这意味着如何转换该点的坐标?

augmented-reality eye-tracking ios arkit

4
推荐指数
1
解决办法
360
查看次数

Python Scapy - 拦截并修改localhost上的http数据包

我在localhost上运行apache2,我想截取并修改来自localhost的http请求.通过修改我想将标题的Accept-Encoding属性更改为'identity'.使用Burp-Suite,它工作得很好.但是,使用我的scapy脚本似乎已经发送了数据包,因为http响应仍然是编码的.

scapy脚本:

from scapy.all import *

def intercept(pkt):

   if pkt.haslayer(Raw):
      http_content = pkt.getlayer(Raw).load

      http_content = http_content.replace("Accept-Encoding: gzip, deflate", "Accept-Encoding: identity")
      pkt[Raw].load = http_content         
      print pkt.show()
      send(pkt)

def main():
   sniff(iface='lo', filter='tcp port 80', prn=intercept)

if __name__ == '__main__':
   main() 
Run Code Online (Sandbox Code Playgroud)

这就是我作为回应得到的回复:

<skipped>
###[ Raw ]###
           load      = 'HTTP/1.1 200 OK\r\nDate: Thu, 11 Aug 2016 09:34:38 GMT\r\nServer: Apache/2.4.23 (Debian)\r\nLast-Modified: Thu, 11 Aug 2016 09:34:25 GMT\r\nETag: "7d-539c878b8f8fd-gzip"\r\nAccept-Ranges: bytes\r\nVary: Accept-Encoding\r\nContent-Encoding: gzip\r\nContent-Length: 103\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xb3\xc9(\xc9\xcd\xb1\xe3\xb2\xc9HML\xb1\xe3RPP\xb0)\xc9,\xc9I\xb5\xf3H\xcd\xc9\xc9W\x08\xcf/\xcaI\xb1\xd1\x87\x08q\xd9\xe8CT\xd9$\xe5\xa7TB\x14g\x18!\xabT\x04\xaa0\x82H\x14@\xc5\x13\xd3\x133\xf3\xf4\xf4\xf4l\xf4\x0b@\x06@t\x02\x95\x81m\x05\x00\x1c\x95F\x1d}\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

这是编码的.

有人可以帮忙吗?

http code-injection scapy intercept

3
推荐指数
1
解决办法
2875
查看次数

Android - 自动填充另一个应用程序的文本字段

我正在实现一个 Android 应用程序,它负责与其他服务(如凭据)进行一些数据交换。然后我想使用该信息自动填写设备上其他应用程序(如 Spotify)的输入字段。

有什么办法可以填写另一个应用程序的输入字段,比如用户名和密码,以消除用户手动输入的麻烦?

我还注意到,至少在 iOS 上,Spotify 识别出要安装的 1Password 并在输入字段旁边显示一个小图标,我可以用它来填充 1Password 中存储的数据中的字段 - 这是如何完成的,因为它似乎是另一种解决方案我的问题?

提前致谢

android autofill textfield

2
推荐指数
1
解决办法
1868
查看次数

以编程方式执行segue,并将其保留在情节提要中

我想在单击表格单元格后从嵌入在导航控制器中的表格视图选择到另一个视图控制器。我仍然希望将第二个视图控制器嵌入到同一导航控制器中。因此,我通过情节提要创建了segue。

但是,我想在点击单元格后有条件地检查是否应该执行segue。

我已经签出了shouldPerformSegueWithIdentifier满足我需要的方法,但是不幸的是,它在表单击处理程序之前执行。如果我删除情节提要segue并仅通过进行segue performSegue,则我的第二个视图控制器不再嵌入相同的导航控制器中。

有什么建议吗?

这是我的代码:

// Called on click event on table cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    let app = apps[indexPath.section]
    if app.state == .INSTALLED {
        let inputVC = self.navigationController?.viewControllers[1] as? InputVC
        inputVC?.app = app
        performSegue(withIdentifier: "showAccSync", sender: self)
    } else {
        // show alert
    }
}
Run Code Online (Sandbox Code Playgroud)

ios uistoryboard segue swift

1
推荐指数
1
解决办法
2317
查看次数

处理 aws s3 预签名 URL 到期日期的最佳实践

我将图像保存到我的 s3 存储桶,生成一个预先签名的 URL 并将其保存为我的模型架构中的一个字段。当我的前端从后端检索模型对象时,它使用该 URL 来检索图像。

您可以使用 v4 设置的最大到期日期为 7 天。那么处理这些 URL 的“刷新”的最佳实践是什么?

我想到的事情:

  • 在我的后端有一个 cron 工作,它每隔 24 小时检查一次,如果我有任何 URL 在接下来的 24 小时内失效,并生成一个新的以防万一。
  • 每次收到 GET 请求时都检查它,如果无效则重新生成
  • 根本不检查后端,只需尝试点击前端的 URL,如果我得到 403,则请求从后端重新生成。我不太喜欢这个想法,因为我不能简单地使用 "/> 但必须将它包装在其他一些逻辑中。

javascript amazon-s3 amazon-web-services pre-signed-url

1
推荐指数
1
解决办法
1098
查看次数

Swift - 将UIRefreshControl添加到表的节头视图中

我试图根据标志添加一个UIRefresh控件到节头表,但它没有显示,有人可以看到原因吗?

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView()
    ...
    let textAttribs = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name: "Arial", size: 16.0)!]
    if appsAreGettingInstalled {  
            let titleString = NSAttributedString(string: "Apps are getting installed", attributes: textAttribs)
            let lbl = UILabel(frame: CGRect(x: 10, y: 0, width: tableView.bounds.size.width - 20, height: 40))
            lbl.attributedText = titleString

            let refreshCtrl = UIRefreshControl()
            refreshCtrl.beginRefreshing()

            let view = UIScrollView(frame: CGRect(x: 10, y: 50, width: tableView.bounds.size.width - 20, height: 40))
            view.addSubview(refreshCtrl)
            view.addSubview(lbl)

            headerView.addSubview(view)
     } …
Run Code Online (Sandbox Code Playgroud)

uitableview ios uirefreshcontrol swift

0
推荐指数
1
解决办法
259
查看次数