小编Gas*_*lén的帖子

如何向应用程序添加清单权限?

我试图HttpURLConnection在Android中使用HTTP链接来下载文件,但我收到此警告LogCat:

WARN/System.err(223):java.net.SocketException:权限被拒绝(可能缺少INTERNET权限)

我已将android.Manifest.permission添加到我的应用程序中,但它仍然提供相同的异常.

android exception android-manifest

402
推荐指数
9
解决办法
72万
查看次数

kotlin字符串模板中的格式

Kotlin有一个很棒的功能叫做字符串模板.我真的很喜欢它.

 val i = 10 
 val s = "i = $i" // evaluates to "i = 10"
Run Code Online (Sandbox Code Playgroud)

但是模板中是否可以有任何格式?例如,我想在kotlin中格式化字符串模板中的Double,至少在小数分隔符后设置一些数字:

val pi = 3.14159265358979323
val s = "pi = $pi??" // How to make it "pi = 3.14"?
Run Code Online (Sandbox Code Playgroud)

string-formatting kotlin

166
推荐指数
5
解决办法
10万
查看次数

升级到Android 8.1后,startForeground失败

将手机升级到8.1开发人员预览后,我的后台服务不再正常启动.

在我长期运行的服务中,我实现了一个startForeground方法来启动正在进行的通知,该通知在create上调用.

    @TargetApi(Build.VERSION_CODES.O)
private fun startForeground() {
    // Safe call, handled by compat lib.
    val notificationBuilder = NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID)

    val notification = notificationBuilder.setOngoing(true)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .build()
    startForeground(101, notification)
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

11-28 11:47:53.349 24704-24704/$PACKAGE_NAMEE/AndroidRuntime: FATAL EXCEPTION: main
    Process: $PACKAGE_NAME, PID: 24704
    android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=My channel pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x42 color=0x00000000 vis=PRIVATE)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Run Code Online (Sandbox Code Playgroud)

服务通知的通道无效,显然我的旧通道DEFAULT_CHANNEL_ID不再适用于我假设的API 27.什么是合适的渠道?我试图浏览一下文档

service android background-service android-notifications kotlin

159
推荐指数
6
解决办法
8万
查看次数

Kotlin-android:未解析的引用数据绑定

我使用新的数据绑定库在Java中编写了以下片段类

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}
Run Code Online (Sandbox Code Playgroud)

它编译并运行良好.
我试图在Kotlin中重写它并提出以下内容:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在步骤:app:compileDebugKotlin输出如下:

错误:(16,38)未解析的引用:数据绑定
错误:(37,27)未解析的引用:FragmentDataBinding

如何在Kotlin中使用android-databinding库?

我的顶级build.gradle:

buildscript { …
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-databinding

132
推荐指数
9
解决办法
4万
查看次数

在firebase上构建数据的最佳方法是什么?

我是firebase的新手,我想知道在其上构建数据的最佳方法是什么.

我有一个简单的例子:

我的项目有申请人和申请.1申请人可以有几个申请.如何在firebase上关联这两个对象?它是否像关系数据库一样工作?或者在数据设计方面需要完全不同的方法?

nosql data-structures firebase firebase-realtime-database

107
推荐指数
2
解决办法
5万
查看次数

删除Firebase java中的所有侦听器

我知道文档说"//在Java中,必须明确删除每个侦听器." 但有一个问题.

我部署我的应用程序 - 添加一个监听器(保存指针).但是,当我重新部署我的应用程序时,监听器仍然存在,但我无法删除它,因为我没有指针.:(

那么如何删除所有听众呢?(没有服务器重启)

java android listener firebase firebase-realtime-database

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

intelliji或android studio - 创建方法测试用例的捷径

在intelliji中快速创建测试方法是否有捷径?我想要发生的是,如果我有一个名为TestClass的测试类,那么在我的类文件中,如果我创建一个新方法,我可以右键单击新方法并单击方法本身上的"创建测试".这个类有一个选项,但是我无法看到它的方法级别.看看这张照片,你会看到该选项适用于该类(通过按alt + enter),但我也希望它可用于该方法.

在班级

更新:似乎选项可能在Intelliji中,但我在Android Studio 1.1中找不到.当我在android工作室(托管类已经有一个测试用例)的方法中点击alt +输入时,我得到这个菜单:

在此输入图像描述

这是android studio中有趣的事情,如果我进入测试用例类本身,那么我会看到在该类中创建测试方法的选项.它只是没有出现在我需要测试的具体类中:

在此输入图像描述

testing junit intellij-idea android-studio

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

Firebase Auth - 获取提供商ID

我正在使用以下代码来检测身份验证提供程序并正确注销

static func logOut() {
    let auth = FIRAuth.auth()!
    let provider = auth.currentUser?.providerID
    switch provider! {
        case "Facebook": FBSDKLoginManager().logOut()
        case "Google": GIDSignIn.sharedInstance().signOut()
        case "Twitter": Twitter.sharedInstance().sessionStore.logOutUserID(TWTRAPIClient.withCurrentUser().userID!)
        default:
            print("Unknown provider ID: \(provider!)")
            return
    }
    try! auth.signOut()
}
Run Code Online (Sandbox Code Playgroud)

但提供商始终是"Firebase".我究竟做错了什么?0_o当我登录twitter时,该代码抛出"Facebook".提前致谢

UPD:是的,我实际上可以存储身份验证提供程序UserDefaults,但可能是Firebase错误.我正在使用Firebase SDK 3.5.2

ios firebase firebase-authentication swift3

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

如何使用Navigation type safeargs插件将Parcelable类型的对象传递给Fragment

我正在重写我的简单UI应用程序以使用导航架构组件,我需要传递一个实现Parcelable的Pojo,没有看到任何关于如何做到这一点的文档.

任何帮助,将不胜感激.

android android-fragments android-architecture-components android-jetpack

15
推荐指数
4
解决办法
6314
查看次数

Firebase如何保护用户操纵数字数据,例如.比赛得分

我正在使用Firebase开发多人游戏.每场比赛后,玩家得分记录在火力基础中,并且玩家总得分字段也会使用新总数进行更新.我的问题:是否有可能使用firebase安全规则来保护playerTotalScore字段免受用户的任意操纵?如果是这样,怎么样?

我已详细阅读了firebase网站上的firebase安全信息.虽然我理解可以在安全规则中实现一些复杂的逻辑(按照给定的数量增加一个数字,例如这个要点,或者只使用字段插入(".write": "!data.exists()"),但在这种情况下,没有任何信息似乎有帮助. - 仅仅规则是不够的,因为分数可以通过多次递增来操纵.仅插入似乎是totalScore的一个选项,因为它在每次游戏后更新.

更新

根据加藤的要求,这是具体的用例.

我正在开发的游戏是一个问答游戏,其中玩家回答问题,并且玩家得分实时显示.

在游戏过程中,通过以下声明在每个问题之后更新该特定游戏的得分:

gameRef.child('players').child(UserId).child('score').set(gameScore)
Run Code Online (Sandbox Code Playgroud)

游戏结束后,totalScore=totalScore+gameScore玩家的总分数(所有游戏玩法)计算为,然后使用以下语句在Firebase中更新玩家总分:

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Run Code Online (Sandbox Code Playgroud)

Update2:Kato请求的数据结构

这是我目前具体的具体结构.这不是一成不变的,所以我愿意根据建议的方法来保护数据,无论如何需要更改它.

用户(玩家)所玩的每个游戏的得分存储在以下结构中

<firebase_root>/app/games/<gameId>/players/<userId>/score/
Run Code Online (Sandbox Code Playgroud)

<gameId>是firebase生成的密钥,作为调用firebase push()方法的结果. <UserId>是firebase simplelogin uid.

每个用户(玩家)的总分数(所有游戏的所有分数的总和)存储在以下数据结构中

<firebase_root>/app/leaderboard/<userId>/totalScore/
Run Code Online (Sandbox Code Playgroud)

出于查询目的,总分数的排行榜数据使用totalScore作为优先级进行设置

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Run Code Online (Sandbox Code Playgroud)

得分和总分数都是数字整数值.这就是我能想到的当前数据结构的所有细节.

firebase firebase-security firebase-realtime-database

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