如何检查后台服务(在Android上)是否正在运行?
我想要一个能够切换服务状态的Android活动 - 它可以让我打开它,如果它打开则关闭.
我正在寻找一个相当于这个php调用的java:
hash_hmac('sha1', "test", "secret")
Run Code Online (Sandbox Code Playgroud)
我试过这个,使用java.crypto.Mac,但两人不同意:
String mykey = "secret";
String test = "test";
try {
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(mykey.getBytes(),"HmacSHA1");
mac.init(secret);
byte[] digest = mac.doFinal(test.getBytes());
String enc = new String(digest);
System.out.println(enc);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
key ="secret"和test ="test"的输出似乎不匹配.
我有一个使用本地sqlite数据库的Android应用程序.
private SQLiteDatabase mDb;
Run Code Online (Sandbox Code Playgroud)
当我运行这个查询时,我根据需要将我的Cursor放在pid等于id的行上:
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询,旨在获得相同的结果集,由pid命令我得到" android.database.sqlite.SQLiteException:datatype mismatch "
mDb.query(true, PT_TABLE, new String[] {KEY_PID, KEY_TID},
KEY_PID+" = "+id, null, null, null, null, KEY_PID+" DESC");
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
是否有红宝石等效的lisp汽车,cdr和cons功能?对于那些不熟悉lisp的人来说,这就是我想要的ruby:
[1,2,3].car => 1
[1,2,3].cdr => [2,3]
[2,3].cons(1) => [1,2,3]
Run Code Online (Sandbox Code Playgroud)
(在口齿不清):
(car '(1 2 3)) => 1
(cdr '(1 2 3)) => (2 3)
(cons 1 '(2 3)) => (1 2 3)
Run Code Online (Sandbox Code Playgroud) 我刚刚将一个应用程序从Rails 3升级到Rails 4,我看到一堆InvalidAuthenticityToken异常弹出.挖掘它看起来我们的用户在我们的网站上打开多个长期标签是相当普遍的.所以我认为发生的事情是这样的:用户Alice有三个标签打开,她的会话到期.她重新登录其中一个选项卡,这会更新存储在其会话中的真实性令牌.然后她返回到其他一个打开的选项卡并尝试提交数据,但她从我们引发的InvalidAuthenticityToken错误中得到500错误.
为Alice做一些错误处理显然很好,所以她没有得到500错误.我想知道这种情况的最佳做法.从过期的标签处理Alice的提交有什么好方法?我不想让当前会话到期,因为从用户的角度来看这会非常烦人("我刚登录,你笨蛋!").理想情况下,我只是希望用户重新加载页面,这将导致表单中存在正确的真实性令牌.或者我应该做一些不同的事情,以便打开的长期标签注意到会话已过期并强制重新加载?从用户的角度来看,这可能是次优的,因为他们喜欢准备好该页面并且可以轻松访问以保持引用,这就是为什么他们首先在选项卡中将其打开.
我在Rails项目中使用Mongoid(均为4.0.x),并且我有一个带有哈希字段的文档,该字段存储一些无模式数据.
class Thing
field :name, type: String
field :mass, type: Integer
field :info, type: Hash
end
Run Code Online (Sandbox Code Playgroud)
通过这种设置,我可以查询具有如下关键字的内容:endDate
:
Thing.where("info.endDate"=>{'$exists'=>true})
Run Code Online (Sandbox Code Playgroud)
这一切都很好用.对这个:info
字段使用哈希字段是很好的,因为我想要存储的东西没有固定的模式,并且从一个东西到另一个东西各不相同.
好吧,但是,我不能$set
对:info
哈希中的键/值对使用相同的点语法.[1]
thing.set("info.endDate"=>Time.now)
Run Code Online (Sandbox Code Playgroud)
引发Mongoid::Errors::UnknownAttribute
错误.
它告诉我,我必须Mongoid::Attributes::Dynamic
在我的模型中包含这样做,但这对我来说似乎不对.哈希字段类型的要点似乎是允许您处理没有固定模式的数据.我似乎不应该包含一个特殊的"动态属性"模块来使用哈希字段.
所以现在,我正在使用常规的旧[]
语法更新值,然后调用save
模型,如下所示:
thing.info[:endDate] = Time.now
thing.save
Run Code Online (Sandbox Code Playgroud)
但是很多时候它会发生这样$set
的价值更好.是否有其他语法来设置哈希字段值?我错误的上述错误消息和动态属性是错误的?我暂时不想对哈希字段进行两步更新吗?
[1]不可否认,我最近从mongomapper迁移过来,所以我对这种语法的期望部分是由于能够在mongomapper中做到这一点.
我正在编写一个Wordpress MU插件,它包含每个帖子的链接,我想在用户点击此链接时使用ajax调用其中一个插件函数,然后使用该函数的输出动态更新链接文本.
我坚持使用ajax查询.我有这种复杂的,明显是黑客的方式,但它不是很有效.在插件中包含ajax功能的'正确'或'wordpress'方式是什么?
(我当前的黑客代码如下.当我点击生成链接时,我没有得到与wp页面相同的输出,就像我在浏览器中直接访问sample-ajax.php一样.)
我的代码[1]设置如下:
MU-插件/ sample.php:
<?php
/*
Plugin Name: Sample Plugin
*/
if (!class_exists("SamplePlugin")) {
class SamplePlugin {
function SamplePlugin() {}
function addHeaderCode() {
echo '<link type="text/css" rel="stylesheet" href="'.get_bloginfo('wpurl').
'/wp-content/mu-plugins/sample/sample.css" />\n';
wp_enqueue_script('sample-ajax', get_bloginfo('wpurl') .
'/wp-content/mu-plugins/sample/sample-ajax.js.php',
array('jquery'), '1.0');
}
// adds the link to post content.
function addLink($content = '') {
$content .= "<span class='foobar clicked'><a href='#'>click</a></span>";
return $content;
}
function doAjax() { //
echo "<a href='#'>AJAX!</a>";
}
}
}
if (class_exists("SamplePlugin")) {
$sample_plugin = new SamplePlugin();
}
if …
Run Code Online (Sandbox Code Playgroud) 我的应用程序将数据本地存储在本机SQLite数据库中,我希望允许用户通过向自己发送.csv文件来导出这些数据.为了做到这一点,我从数据库生成.csv并将其写入SD卡,然后将其附加到电子邮件中:
StringBuilder csv = generateFile();
writeFile(csv.toString(),"file.csv");
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://sdcard/file.csv"));
Run Code Online (Sandbox Code Playgroud)
哪一切都很棒.但我想知道的是,是否有可能首先跳过写入SD的步骤,并直接附加数据.
我想指定Android应该在数字/符号模式下为给定的EditText启动软键盘.我知道这可以通过使用EditText.setInputType()将EditText的输入类型设置为数字来完成,除了我不想将EditText的输入类型限制为仅数字输入**.还有另一种方法告诉Android应该为给定的EditText打开哪个键盘?
**我基本上想要一个Math类的数字输入,接受任意数学表达式,包括[0,9.+ - /*()@:].
当我尝试在我的用户模型中覆盖to_param以使用电子邮件地址作为id时,我的路由出错了.它似乎试图在尝试匹配路由时匹配id的整个对象.任何人都可以帮我弄清楚我错过了什么吗?
这是错误:
No route matches {:controller=>"users", :action=>"show", :id=>#<User id: 1, email: ....>}
Run Code Online (Sandbox Code Playgroud)
这是我如何设置代码.
车型/ user.rb:
attr_accessible :email
def to_param
email
end
Run Code Online (Sandbox Code Playgroud)
控制器/ users_controller.rb:
before_filter :get_user, :only=>[:show,:update,:edit,:destroy]
...
def get_user
@user = User.find_by_email params[:id]
end
Run Code Online (Sandbox Code Playgroud)
配置/ routes.rb中
resources :users
Run Code Online (Sandbox Code Playgroud)
这是rake路线的输出:
user GET /users(.:format) {:controller=>"users", :action=>"index"}
POST /users(.:format) {:controller=>"users", :action=>"create"}
new_user GET /users/new(.:format) {:controller=>"users", :action=>"new"}
edit_user GET /users/:id/edit(.:format) {:controller=>"users", :action=>"edit"}
user GET /users/:id(.:format) {:controller=>"users", :action=>"show"}
PUT /users/:id(.:format) {:controller=>"users", :action=>"update"}
DELETE /users/:id(.:format) {:controller=>"users", :action=>"destroy"}
Run Code Online (Sandbox Code Playgroud)