我目前正在使用Firebase实时数据库开发应用程序,但是我选择省略使用SDK从数据库中检索数据.原因是我不希望我的代码与FireBase紧密相关,因为一旦应用程序构建,api本身将转移到基于自定义休息的api.
我根据文档使用REST和Firebase实现了api调用,没有问题 - POST,GET,DELETE等.
我遇到的问题是,如果我在数据库上启用任何类型的身份验证,根据我需要发送带有请求的"access_token"的文档,但是我不知道从哪里检索它. firebaseUser.getToken(true)
返回看起来像JWT令牌的内容,如果我将其发送为无法识别"access_token"
.我明白了401 Unauthorized
我还按照说明设置了一个服务帐户,该帐户似乎生成了一个有效的令牌,但它并没有唯一地标识用户.
所以我的问题是,任何人都可以指出我如何获得所需的访问令牌,以识别哪个用户正在访问该API?我的Firebase项目支持的登录选项是Google,Facebook和Twitter.
android oauth-2.0 firebase firebase-authentication firebase-realtime-database
我正在编写一个应用程序,它使用以下代码在运行的应用程序上在屏幕上绘制一个edittext:
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
PixelFormat.TRANSLUCENT);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(mEditText, params);
Run Code Online (Sandbox Code Playgroud)
edittext的xml是:
<EditText
android:id="@+id/mEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:inputType="textAutoComplete|text"
android:focusable="true"
android:focusableInTouchMode="true" />
Run Code Online (Sandbox Code Playgroud)
然而,专注于此并没有调出键盘.我也试过用onFocusListener以编程方式提出它:
mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
Log.d("", "Has focus");
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
} else {
Log.d("", "Lost focus");
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,虽然这被称为,从logcat看,没有任何反应.到目前为止,我发现显示键盘的唯一方法是使用:
getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0);
Run Code Online (Sandbox Code Playgroud)
但这似乎是在屏幕上输入而不是在编辑文本中.当编辑文本显示时我也尝试过清晰可聚焦但无济于事.
我猜这个问题是因为我正在使用一个"浮动窗口",但必须有一种方法可以使这项工作,因为Playstore上的浮动计算器等应用程序存在输入.任何人都有任何想法?我很难过:(
我正在尝试在我的应用程序中实现图标包支持,以便使用与Apex,Nova,ADW等相同的图标包.也可以使用我的应用程序.使用此代码,找到appfilter xml文件,然后解析它以获取可绘制的名称,我已经能够使用免费主题:
Context context = createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
Resources res = context.getResources();
String str = "";
res.getAssets().list(str);
Run Code Online (Sandbox Code Playgroud)
但是,使用付费图标包时,这不起作用.返回的资产是0.我相信这是因为JB +上的付费应用程序存在转发锁定,这使得资产变得私密.(此处概述:在Jelly Bean上访问其他Android应用程序的资产)
我一直无法找到有关如何支持图标包和反编译图标包的任何信息.我可以看到没有内容提供商,因此我只能假设这些启动器应用程序使用类似于我的方法来检索资产.
有人能够给我任何关于如何做到这一点的信息或者指出我正确的方向吗?
从传入短信中检索移动号码时,会附加国家/地区代码.
现在,因为数据库中的匹配联系人可能不包含国家代码来获取我正在使用的联系人姓名:
public static String getContactName(String number, Context context) {
try {
Uri personUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim()));
String selection = PhoneLookup.NUMBER + " LIKE %" + number.trim() + "%";
Cursor cur = context.getContentResolver().query(personUri,
new String[] {
PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
String str = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
cur.close();
return str;
}
} catch (Exception e) {
//e.printStackTrace();
return number;
}
return number;
}
Run Code Online (Sandbox Code Playgroud)
如果我传入完全匹配或部分匹配,这将完美地工作.但是,如果我想获取联系人ID我正在使用此代码:
public static Contact getContact(String number, ContentResolver contentResolver) {
Contact contact = new Contact(-1, number); …
Run Code Online (Sandbox Code Playgroud) 我已经使用官方API编写了一个应用程序来上传到Google驱动器,这非常有效.但是我无论如何都无法取消上传.我在ASyncTask中运行它,到目前为止,我已尝试制作驱动器对象,文件路径,令牌和其他一些变量.我也尝试使令牌无效,但似乎这只是从缓存中删除它并没有实际上使服务器端无效.我已经在ASyncTask上调用了cancel,但是如果在上传开始时它被取消,那么似乎无法阻止它.
我的问题是,如果用户开始上传100mb文件,他们无法取消它,除了打开和关闭互联网连接这是不切实际的.这是我的上传代码:
java.io.File jFile = new java.io.File(path); //Does not get file just info
File body = setBody(jFile, mimeType);
try
{
java.io.File mediaFile = new java.io.File(path);
InputStreamContent mediaContent =
new InputStreamContent(mimeType,
new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());
request = drive.files().insert(body, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
File file = request.execute();
Run Code Online (Sandbox Code Playgroud)
肯定有办法取消上传?
java android google-api-java-client android-asynctask google-drive-api
所以我需要将Android Pay集成到我正在处理的应用程序中.应用程序中的此选项仅适用于美国用户,但我在英国并且很难尝试测试我的实施.我使用沙盒Stripe帐户atm作为支付处理器.
一旦我按下"使用Android Pay付款"按钮,我会弹出一个"要使用Android Pay购物,请在Android Pay应用中设置您的卡".现在Android Pay应用程序在美国境外不可用,所以我已经侧载了它,但是一旦我尝试添加卡就崩溃了.在快速谷歌之后,似乎这种崩溃是应用程序说它在美国以外不受支持..(很棒的UX顺便说一句)
我还尝试将其中一张卡片https://developers.google.com/android-pay/test-flows添加到我的Google帐户,但它们不会显示在Android Pay应用中.
我试图对此进行测试有点失落,看起来非常像谷歌忽视了美国以外的开发者希望在他们的应用程序中为美国客户实现这一点的事实.
有没有人对我如何测试这个有任何想法?
(顺便说一句,我正在测试一只股票,无法运行的Nexus 5运行Marshmallow.我也试图欺骗我的位置无济于事.)
编辑:发言到Android Pay支持谁告诉我没有机制在美国以外的国家进行测试.他们说它检查你的IP地址以确定位置,这就是为什么GPS欺骗不起作用但它似乎代理也不起作用,除非任何人已经破解了这种方式,看起来当他们说美国时他们只是指美国 - 包括发展:|
我正在尝试匹配以@开头的字符串,可以包含任意数量的字母或数字,但最多只能包含一个空格(或零空格).到目前为止我有
@([A-Za-z0-9]+)
Run Code Online (Sandbox Code Playgroud)
它匹配字符但没有空格.我想我需要\ {{0,1}但是我不知道该把它放在哪里..任何人都可以帮忙吗?
谢谢.
我有一个包含一个句子的字符串,我希望根据一个单词将它分成两半.我有正则表达式(\\w+) word
,我认为它会在"单词"+"单词"本身之前得到所有单词,然后我可以删除最后四个字符.
然而这似乎不起作用..任何想法我做错了什么?
谢谢.
我正在尝试编写一个可以将文件上传到Google云端硬盘的应用程序。我选择通过原始的HTTP请求与该服务进行交互,因为我没有在Android上找到任何有用的API示例,而且与提供的库相比,它似乎更轻巧。
我已经使用https://developers.google.com/oauthplayground/来获取各种调用和响应,并试图编写一个简单的请求以返回文件列表。通过该工具发送的请求是:
POST /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Content-type: application/json
Authorization: OAuth *token goes here*
Run Code Online (Sandbox Code Playgroud)
我试图使用以下方法在eclipse中复制它:
URL url = new URL("https://www.googleapis.com/drive/v2/files?v=3");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Host:", "www.googleapis.com");
conn.setRequestProperty("Content-length:", "0");
conn.setRequestProperty("Content-type:", "application/json");
conn.setRequestProperty("Authorization:", "OAuth " + token);
Run Code Online (Sandbox Code Playgroud)
我的应用程序中有一个有效的令牌,并且我也尝试添加conn.setRequestProperty("GData-Version:", "3.0")
Google文档中指定的标头。我得到的响应代码为400,我确定我的代码有明显的错误,但是在示例之前和之后的示例中,我还没有编写标头请求,我认为这看起来是正确的。
任何帮助,将不胜感激。
编辑:好的,我还有进一步的准备-我现在正在获取401-并显示一条消息,要求我登录编辑:我现在从服务器收到“接收到的身份验证质询为空”响应。
String token = fetchToken();
if (token == null) {
return;
}
URL url = new URL("https://www.googleapis.com/drive/v2/files");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
conn.setRequestMethod("POST"); //use post method
conn.setDoOutput(true); //we will send stuff
conn.setDoInput(true); …
Run Code Online (Sandbox Code Playgroud) 我需要将一个java字符串拆分成一个单词数组.我们说这个字符串是:
"Hi!! I need to split this string, into a serie's of words?!"
Run Code Online (Sandbox Code Playgroud)
目前我尝试使用它,String[] strs = str.split("(?!\\w)")
但它保留了符号,如!在数组中,它还保留像"嗨!"这样的字符串.在数组中也是如此.我分裂的字符串将始终为小写.我想是要生产一个数组,看起来像:
{"hi", "i", "need", "to", "split", "this", "string", "into", "a", "serie's", "of", "words"}
-注意撇号被保留.
我怎么能改变我的正则表达式不包括数组中的符号?
道歉,我会将一个单词定义为一个字母数字字符序列但是如果它在上面的上下文中是"包含",例如"它是",而不是用于引用诸如"'它'"之类的单词. .此外,在这种情况下,"hi"或"hi-person"不是单词,而是"hi"和"person".我希望澄清这个问题.
我正在尝试将记录添加到mysql数据库并立即检索该记录ID.我希望使用mysql_insert_id()但是我想知道它是否拉了最后一条记录或你插入的最后一条记录?
我在想,如果网站的两个用户都运行查询,那么添加的最后一条记录可能不是用户记录的,所以mysql_insert_id()是区分两者还是只拉动最后一条记录?
谢谢.