小编sza*_*ske的帖子

在 sharedPref.getString 中有一个默认值有什么意义?

我正在SharedPreferences通过以下方式访问我的 Android 应用程序

private val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)`
Run Code Online (Sandbox Code Playgroud)

然后尝试使用它从中获取数据

val lat: String = sharedPref.getString("MyKey", "Default")
Run Code Online (Sandbox Code Playgroud)

但是这一行给了我一个错误读数 "Type mismatch. Required String, found String?"

根据文档,getString 方法中的第二个参数表示“如果此首选项不存在,则返回此值可能为空。

那么如果该值可以为空,那么拥有默认值有什么意义呢?我似乎无法获得永远使用的默认值,我可以让我的代码工作的唯一方法是使用 elvis 运算符并将我的代码重写为:

val lat: String = sharedPref.getString("MyKey", "Default") ?: "Default"
Run Code Online (Sandbox Code Playgroud)

哪个看起来很丑。我疯了吗?我错过了什么?

android sharedpreferences kotlin

13
推荐指数
2
解决办法
2186
查看次数

如何隐藏jsFiddle面板?

我想在jsFiddle中展示纯JavaScript示例,我只需要一个JavaScript窗口和一个控制台.我已经想出如何让控制台窗口出现,但有没有办法删除HTML和CSS窗口?有没有比jsFiddle更好的服务来满足我的需求?

jsfiddle

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

如何在angularfire2/auth signOut之后断开与Google身份验证的连接?

我正在使用Angular和Firebase构建一个网站.我正在使用Angularfire2和AngularFireAuth库以及GoogleAuthProvider(Google)作为我的身份验证提供程序.

这是我的服务代码:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';

@Injectable()
export class AuthenticationService {
  user: Observable<firebase.User>;

  constructor(public afAuth: AngularFireAuth) {
    this.user = afAuth.authState;
  }

  login() {
    this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
  }

  logout() {
    this.afAuth.auth.signOut();
  }
}
Run Code Online (Sandbox Code Playgroud)

当用户"退出"我的网站时,它可以正常工作,但似乎可以"缓存"Google身份验证.因此,当他们第二次尝试登录时,我遇到了一些问题:

  1. 用户不得选择其他Google帐户登录.
  2. 用户自动登录...这似乎是一个安全问题.另一个用户可以访问相同的共享PC,并以前一个用户身份登录,并且不需要输入密码来执行此操作.

我究竟做错了什么?有没有办法可以阻止angularfire2/auth缓存这些凭据?有没有办法在用户退出我的网站时将用户退出Google?

firebase angularfire firebase-authentication angularfire2 angular

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

按钮 GPIO.FALLING 事件被触发两次

这是我第一次尝试对 Raspberry Pi 和面包板上的硬件按钮进行编码。程序很简单,当检测到按下按钮时,打开面包板上的 LED 1 秒钟。我的代码似乎有效,但奇怪的是,每隔一个按钮就会触发回调函数两次。我是一个完全的编程菜鸟,所以我不确定问题是否出在我的代码上,或者硬件或按钮是否实际上以某种方式掉落了两次。我希望这里有人能帮助我解决这个奇怪的问题。这是我的代码:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time


LedPin = 11    # pin11 --- led
BtnPin = 12    # pin12 --- button

def setup():
    GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
    GPIO.setup(LedPin, GPIO.OUT)   # Set LedPin's mode is output
    GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)    # Set BtnPin's mode is input, and pull up to high level(3.3V)
    GPIO.output(LedPin, GPIO.HIGH) # Set LedPin high(+3.3V) to off led

def Light(ev=None):
        print 'A button press was detected'
        GPIO.output(LedPin, 0) …
Run Code Online (Sandbox Code Playgroud)

python gpio raspberry-pi raspberry-pi2

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

在Ember中,this和this.controller有什么区别

我正在尝试构建一个简单的Ember应用程序,它从表单中收集信息.我正在使用本教程作为指南.在本教程中,它具有以下代码以从表单中获取信息:

export default Ember.Component.extend({
  ...
  actions: {
    saveRental1() {
      var params = {
        owner: this.get('owner'),
        city: this.get('city'),
        type: this.get('type'),
        image: this.get('image'),
        bedrooms: this.get('bedrooms'),
      };
      ...
      this.sendAction('saveRental2', params);
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

这里有一些相关的表单代码:

      <div class="form-group">
        <label for="image">Image URL</label>
        {{input value=image id="image"}}
      </div>

      <button {{action 'saveRental1'}}>Save</button>
    </form>
Run Code Online (Sandbox Code Playgroud)

在我的解决方案中,我无法让它发挥作用.this.get('whatever')总是在我的代码中显示为'undefined'.经过一些调试后,我找到了一个解决方案,但这意味着我将代码更改this.get('city')this.controller.get('city')

有人可以解释我做错了什么或为什么?使用this.controller是"标准"吗?

javascript forms ember.js ember-data

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

我是否需要清除/清空自定义视图中的视图绑定字段?

我已经开始在我的片段和活动中使用视图绑定。片段的推荐模式是中的null绑定字段onDestroyView()。我还在自定义视图中使用视图绑定。我是否还需要清除该视图绑定字段?我想是这样,但没有onDestroyed()视图功能。有一个View.onDetachedFromWindow()函数,但我不确定这是否是null绑定字段的合适位置。

这是一个合理的担忧吗?如果是,我该如何实现呢?

android android-viewbinding

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

Firebase Auth UI 注销后,如何禁用密码自动登录请求的智能锁?

我正在构建一个单一的活动 Android 应用程序,以尝试遵循 Google 的建议。我正在使用 FirebaseAuth UI 进行身份验证,它显然使用“Smart Lock for Passwords”将凭据保存到您的 Google 帐户中。我的注销功能如下所示:

private fun signOutUser(){
    AuthUI.getInstance()
            .signOut(this)
            .addOnCompleteListener {
                Timber.i("Sign out completed")
            }
    sharedViewModel.setUser(null)
}
Run Code Online (Sandbox Code Playgroud)

但是,一旦注销完成,UI 会立即启动用户登录过程,这意味着使用 Smart Lock for Passwords 会弹出一个对话框。这会阻止用户选择另一个帐户。在 FirebaseAuth UI 的 github 帐户中,Google 提到了这个问题说:

“必须指示 Smart Lock for Passwords 禁用自动登录,以防止自动登录循环阻止用户切换帐户。”

他们建议的代码是:

public void onClick(View v) {
  if (v.getId() == R.id.sign_out) {
    AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // user is now signed out
                startActivity(new Intent(MyActivity.this, SignInActivity.class));
                finish();
            }
        });
    } …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-authentication

4
推荐指数
2
解决办法
2029
查看次数

如何调整折叠工具栏的左边距?

我正在使用折叠工具栏,折叠时它看起来像这样......

在此处输入图片说明

我一直在试图弄清楚如何控制左边距,在图中用黄色标记。这里有些人建议我使用,app:contentInsetStart="0dp"但这对我没有任何作用。有人有线索吗?我已经尝试了几乎所有东西,在工具栏、CollapsingToolbar 和 AppBarLayout 上。

android android-toolbar android-collapsingtoolbarlayout

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