我在我的 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) 查看 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
我正在使用 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 …
该ARFaceTrackingConfigurationARKit场所ARFaceAnchor有关的位置和面部的朝向到现场信息。除其他外,此锚具有lookAtPoint我感兴趣的属性。我知道此向量相对于面部。如何在屏幕上为此位置绘制一个点,这意味着如何转换该点的坐标?
我在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)
这是编码的.
有人可以帮忙吗?
我正在实现一个 Android 应用程序,它负责与其他服务(如凭据)进行一些数据交换。然后我想使用该信息自动填写设备上其他应用程序(如 Spotify)的输入字段。
有什么办法可以填写另一个应用程序的输入字段,比如用户名和密码,以消除用户手动输入的麻烦?
我还注意到,至少在 iOS 上,Spotify 识别出要安装的 1Password 并在输入字段旁边显示一个小图标,我可以用它来填充 1Password 中存储的数据中的字段 - 这是如何完成的,因为它似乎是另一种解决方案我的问题?
提前致谢
我想在单击表格单元格后从嵌入在导航控制器中的表格视图选择到另一个视图控制器。我仍然希望将第二个视图控制器嵌入到同一导航控制器中。因此,我通过情节提要创建了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) 我将图像保存到我的 s3 存储桶,生成一个预先签名的 URL 并将其保存为我的模型架构中的一个字段。当我的前端从后端检索模型对象时,它使用该 URL 来检索图像。
您可以使用 v4 设置的最大到期日期为 7 天。那么处理这些 URL 的“刷新”的最佳实践是什么?
我想到的事情:
我试图根据标志添加一个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) ios ×3
android ×2
javascript ×2
reactjs ×2
redux ×2
swift ×2
amazon-s3 ×1
arkit ×1
autofill ×1
eye-tracking ×1
http ×1
intercept ×1
kotlin ×1
scapy ×1
segue ×1
textfield ×1
uistoryboard ×1
uitableview ×1