我需要一个Observable,例如提供一个系统时钟,它不需要在onNext()中传递任何东西.我找不到允许我这样做的签名.
当然,我可以使用任何对象,然后传递null,但这没有多大意义.所以我的问题是,是否有更好的方法来做到这一点.
Observable.create(new Observable.OnSubscribe<Anyobject>() { // use any object in the signature
@Override public void call(Subscriber<? super Anyobject> subscriber) {
subscriber.onNext(null); // then pass null
subscriber.onCompleted();
}
})
Run Code Online (Sandbox Code Playgroud) Android Studio拒绝签署我的代码以进行调试构建.
我有一个较旧的项目,在build.gradle中没有任何签名说明,所以我根据这个Android gradle signingConfig错误和其他帖子添加了这些.
我在模块级别的build.gradle文件(唯一的模块)看起来像这样(摘录):
android {
compileSdkVersion 21
buildToolsVersion '21.1.2'
defaultConfig {
applicationId "cc.appname.android"
minSdkVersion 11
targetSdkVersion 21
versionCode 1
versionName '1.0'
}
signingConfigs {
debug {
storeFile file('../../../.android/debug.keystore')
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
Run Code Online (Sandbox Code Playgroud)
可以找到storeFile,因为当我更改路径时,我收到编译错误.当路径正确时,它会编译,但是当我尝试在我的应用程序中使用Facebook SDK时,它会报告错误的键盘.
我注意到签署了Configs
signingConfig signingConfigs.debug
Run Code Online (Sandbox Code Playgroud)
带有错误消息"无法推断参数类型..."
所以我去了用户界面中的项目设置,删除了签名以及构建和签名之间的关系,保存了这个,并将其添加回来.同样的问题.
我确信这是一个非常小的东西,我只是忽略了,或谷歌重命名版本之间的命令,无论如何.
有人可以帮忙吗?
请考虑以下代码:
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("text/plain; charset=utf-8"); // [A]
RequestBody body = RequestBody.create(mediaType, media);
String[] aclHeader = "x-goog-acl:public-read".split(":");
Request request = new Request.Builder()
.addHeader("Content-Type", "text/plain") // [B]
.addHeader(aclHeader[0], aclHeader[1])
.url(url)
.put(body)
.build();
Response response = client.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)
我从客户端访问GCS,并使用以前签名的URL.
问题:似乎okhttp将为身体[A]声明的字符集添加到URL中(至少对于text/plain),即使它未在[B]中声明.这会弄乱我签名的URL,GCS会返回403 Forbidden.
但这不是应该的.至少在使用签名URL时,必须将这些URL完全按照声明的方式发送到服务器.
我尝试使用Apache http客户端(我不想在生产中使用,因为okhttpclient已经是我的安装的一部分)并且该客户端不会暴露这种行为:
String[] aclHeader = "x-goog-acl:public-read".split(":");
StatusLine statusLine = Request
.Put(url)
.addHeader("Content-Type", "text/plain")
.addHeader(aclHeader[0], aclHeader[1])
.bodyByteArray(media)
.execute().returnResponse().getStatusLine();
Run Code Online (Sandbox Code Playgroud)
有没有办法抑制okhttp中的行为,它是添加到Content-Type还是冗余地传输了Body-Type中的Content-Type?
我在这篇Google Cloud Endpoints帖子和用户身份验证中引用了@MinWan的精彩答案,他描述了一种向针对App Engine的Cloud Endpoints的请求添加自定义标头的方法.
很明显,我们可以添加一个自定义标头,并根据我们想要验证的每个服务(例如Google,Twitter,Facebook)编写验证器,其中每个验证器读取特定的标头并对服务进行身份验证.如果令牌有效,则服务通常会返回包含电子邮件地址或用户ID的响应,以及一些额外信息[A],我们会从中生成com.google.api.server.spi.auth.common.User,稍后将其作为com.google.appengine.api.users.User传递到端点方法.
第一个问题:为什么我们有两个不同的用户实体,例如具有不同命名空间的用户?看起来,这些都不是子/超类,所以它们可能在幕后明确地投射.
第二个问题:显式转换的User实体带来的问题,并且没有自定义字段,我可以放置服务返回的额外信息[A],这是额外的信息丢失.这样的额外信息可能有助于将外部服务的oauth2用户与本地用户或由其他服务返回的oauth2用户进行匹配.
有什么输入?处理多种身份验证服务的建议方法是什么?
authentication google-app-engine facebook-authentication google-cloud-endpoints google-oauth
我想展示一张照片系列,照片之间没有间隙,照片会定期更换.我意识到Picasso在开始下载之前初始化了ImageView,无论我是否在调用()之前获取(),它总是这样做.
我使用fetch()来保持图像之间的间隙较小,并使用.placeholder(R.color.black),但即使从内存加载图像,间隙仍然可见.
我的代码看起来像这样
Picasso.with(getContext()).load(url).fetch();
Run Code Online (Sandbox Code Playgroud)
然后延迟[目前正在修复,我想根据网络速度调整]
Picasso.with(getContext()).load(url).into(screenSurface);
Run Code Online (Sandbox Code Playgroud)
我注意到fetch()不支持任何回调参数并返回void,因此我似乎不可能知道缓存何时变暖.
两个问题:
[我知道我可以用某种方式手动编码,但如果Picasso支持它,我想使用它.]
Google在此处推广其新的Java客户端库:https://developers.google.com/appengine/docs/java/googlecloudstorageclient/
注意:我不是在谈论本机REST库.我想使用Java客户端库.
在网站上,Google没有为Gradle指定import指令.对于Maven,pom.xml看起来像这样:
<dependency>
<groupId>com.google.appengine.tools</groupId>
<artifactId>appengine-gcs-client</artifactId>
<version>RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我将其更改为使用我的Gradle项目时,它不起作用:
dependencies {
compile 'com.google.appengine.tools:appengine-gcs-client:RELEASE'
}
Run Code Online (Sandbox Code Playgroud)
它在那里找到了工具,但无法解析com.google.appengine.tools.cloud存储(它解析了工具).
我做了什么:我删除了库并在Android Studio依赖项对话框中为"gcs"进行了分析; 它找到并将以下指令添加到build.gradle:
dependencies {
compile 'com.google.appengine.tools:appengine-gcs-client:0.3.9@jar'
}
Run Code Online (Sandbox Code Playgroud)
与以前一样的问题:工具已解决,但不是tools.cloudstorage.
我不想下载jar,因为我希望我的项目能够自动更新jar.设置了mavenCentral(),这是我的完整build.gradle文件,以防万一你需要它:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.appengine.tools:appengine-gcs-client:0.3.9@jar'
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示感谢,谢谢!
java google-app-engine gradle google-cloud-storage android-studio
这个问题已被问过几次,但不知怎的,我不知道这个问题.Gradle是一个很棒的工具,但它的文档不是很好.没有任何例子使得几乎不可能理解每天不使用它的人.
我正在使用Android Studio,我想将模块输出jar上传到我的本地Maven存储库.
apply plugin: 'java'
dependencies {
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
}
apply plugin: 'maven'
configure(install.repositories.mavenInstaller) {
pom.project {
groupId 'com.example'
artifactId 'example'
packaging 'jar'
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Android Studio中开始构建时,我可以在Gradle选项卡上看到
:install
Run Code Online (Sandbox Code Playgroud)
被调用.我的build文件夹中也有一个新jar,但是jar没有上传到Maven.[Maven回购存在且Google appengine gradle插件从同一项目的另一个模块上传它的jar就好了.]
我错过了什么?
我正在将WebRTC本地实现到Android中.我能够编译和运行这里描述的代码http://www.webrtc.org/native-code/android,但我遇到了一个问题,apprtc.appspot.com显然没有按照假设返回一个通道令牌:
01-05 20:01:51.230 15488-15488/org.appspot.apprtc E/AppRTCDemoActivity? Fatal error: Missing channelToken in HTML: <!DOCTYPE html>
<!--
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree.
-->
<html>
<head>
<title>WebRTC Reference App</title>
<meta charset="utf-8">
<meta name="description" content="WebRTC reference app">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<script type='text/javascript'>window.mod_pagespeed_start = Number(new …
Run Code Online (Sandbox Code Playgroud) 我不知道它是否相关,但我使用Java与azure-storage-android-0.2.0.aar进行上传.
我可以将文件上传到Microsoft Azure blob存储
CloudBlockBlob blob = container.getBlockBlobReference("filename.ext");
blob.upload(inputStream, n);
Run Code Online (Sandbox Code Playgroud)
其中n是从文件派生的inputStream的长度.
这是我的问题:我想直接流式传输,例如来自相机,这显然是不可能的,因为Azure需要上传的长度参数,这在流式传输时是未知的.
我需要指定长度吗?(MD5?)有没有一种方法可以在流仍在生成时上传(这显然是Java中的InputStream的想法,InputStream没有长度属性的原因)?
我指的是让毕加索预先获取即将出现的图像的帖子,其中@BillMote使用带有centerCrop()的fetch()和更多选项:
Picasso.with(getApplicationContext())
.load(url)
.resizeDimen(R.dimen.article_image_preview_width, R.dimen.article_image_preview_height)
.centerCrop()
.fetch();
Run Code Online (Sandbox Code Playgroud)
毕加索是否会尊重这些选项,或者毕加索是否会将图像直接保存到缓存中以便忽略这些选项,以后应该在从缓存中提取图像并查看时使用?
它仍然不清楚(并且在6个月之后我没有找到任何明确定义的文件[我承认我没有调查过这个])如果毕加索在保存文件之前应用任何这样的选项缓存,或每次显示图像时重复.
在上面的语句中,像centerCrop()这样的东西对我来说没有意义,因为目前ImageView的大小还不清楚.对于resizeDimen(),这可能会有所不同,但我仍然怀疑Picasso会应用这些维度,因为JakeWharton曾在帖子中说Picasso依赖okhttp进行图像缓存.
请有人点光.
android ×4
java ×4
gradle ×3
picasso ×2
apprtcdemo ×1
azure ×1
caching ×1
code-signing ×1
google-oauth ×1
maven ×1
okhttp ×1
rx-java ×1
webrtc ×1