Android设备仅显示地图图块.似乎被广泛报道.我按照这个链接的说明:
https://developers.google.com/maps/documentation/android/start
Run Code Online (Sandbox Code Playgroud)
我做了以下事情:
1)在Eclipse中,我签署了发布模式.我选择文件>导出.选择导出Android应用程序,然后单击下一步.创建了一个新的密钥库.然后上传apk到谷歌播放.
2)Android应用程序在设备上工作,但地图没有显示.它只显示了瓷砖.
3)所以我按照上面链接中的说明操作.
4)我找到了我在上面创建的密钥库文件.我的密钥库名为ziggy.keystore,别名为ziggy密钥库.
5)我在Mac OSX的终端上运行了这个:
keytool -list -v -keystore ziggy.keystore -alias ziggy\ keystroke
Run Code Online (Sandbox Code Playgroud)
6)上面的命令产生的输出包括一行包含证书的SHA-1指纹.指纹是由冒号分隔的20个两位十六进制数字的序列.
7)现在我有了签名证书指纹,我在Google API控制台中为该应用程序创建了一个项目.在浏览器中,我导航到https://code.google.com/apis/console/
8)我点击了Create Project.我把它命名为API项目.我在主窗口中看到了API和服务列表.
9)我向下滚动,直到看到Google Maps Android API v2.在条目的右侧,我单击了开关指示器,使其处于打开状态.我同意服务条款并点击接受.
10)在左侧导航栏中,我单击了API Access.在结果页面中,我单击了Create New Android Key.在结果对话框中,我输入了SHA-1指纹,然后是分号,然后输入了应用程序的包名称.
11)我复制了API密钥.我打开了我的应用程序的清单,包含在AndroidManifest.xml文件中.并通过在结束标记之前插入以下元素作为元素的子元素:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="your_api_key"/>
Run Code Online (Sandbox Code Playgroud)
*请注意,我使用了真正的api密钥.
12)我也添加了这个:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<permission
android:name="com.otl.AndroidRemoteApp1.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.otl.AndroidRemoteApp1.permission.MAPS_RECEIVE"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
Run Code Online (Sandbox Code Playgroud)
13)然后在我的ShowMapActivity.java中:
super.onCreate(savedInstanceState);
setContentView(R.layout.show_map);
mapView = (MapView) findViewById(R.id.mapview);
myMapController = mapView.getController();
mapView.setBuiltInZoomControls(true);
Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on);
...
Run Code Online (Sandbox Code Playgroud)
14)然后在我的show_map.xml文件中:
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:state_enabled="true"
android:apiKey="my_api_key" …Run Code Online (Sandbox Code Playgroud) 目前,在我的请求模型中,我有:
belongs_to :requestor, :class_name => 'User'
Run Code Online (Sandbox Code Playgroud)
因此请求者是current_user.
问题是当current_user单击创建按钮以提交请求的表单时,所有属性都会更新到表单中的数据库.
但由于requestor_id不是表单中填写的值,因此在创建新请求记录时会在数据库中返回null值.
我想要的是requestor_id当用户单击创建按钮时,在请求表的列中更新的整数(相当于Users表的主键).
所以我认为可能requestor_id在创建动作的参数中添加一个符号可以解决这个问题:
def create_common
@a = Request.new
b = @a.requestor_id
@resource = yield params[:contact + "#{b}".to_sym]
self.resource = @resource
Run Code Online (Sandbox Code Playgroud)
但它返回以下错误:
实习空字符串
谢谢你的任何建议.
半字节是四位.这意味着有16(2 ^ 4)个可能的值.这意味着半字节对应于单个十六进制数字,因为十六进制是基数16.字节是2 ^ 8,因此可以用2个十六进制数字表示,因此可以用2个半字节表示.
所以下面我有一个1字节的字符:
'一个'
那个角色是2 ^ 8:
'A'.unpack('B*')
=> ["01000001"]
Run Code Online (Sandbox Code Playgroud)
这意味着它应该由两个十六进制数字表示:
01000001 == 41
Run Code Online (Sandbox Code Playgroud)
根据Ruby文档,对于Array方法包,当aTemplateString(参数)等于'H'时,它将返回一个十六进制字符串.但这就是我得到的回报:
['A'].pack('H')
=> "\xA0"
Run Code Online (Sandbox Code Playgroud)
我的第一点是它不应该返回的十六进制值.它应该返回十六进制值41.第二点是半字节的概念,正如我上面解释的那样,意味着1个字节,它应该返回两个半字节.但在它上面插入一个0,因为它认为输入只有1个半字节,即使'A'是一个字节并且有两个半字节.很明显我在这里遗漏了一些东西.
我似乎和我之前发布的那个问题一样.我想默认隐藏那里的所有div,只显示一个.然后,用户可以单击侧面选项卡以显示另一个.问题是div只在页面加载后隐藏了一秒钟,但很快就会重新出现.这是代码,它假设隐藏页面的div,只显示id为"pple"的div:
$("a#link2").click(function(){$("#content > div").hide(); $("#pple").show();});
markup:
home.html:
<li><a href="about.html" id="link2">About</a></li>
about.html:
<div id="content">
<div class="tabContent" id="pple">
<p>
Content
<p>
</div>
<div class="tabContent" id="serv">
<p>
Content
</p>
</div>
<div class="tabContent" id="sol">
<p>
Content
</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复.
我有这个:
ActiveAdmin.register User do
index do
column :email
column :name
column :role
column "Last Sign In", :last_sign_in_at
column :account
column "Units" do |user|
user.units.count.to_s
end
default_actions
end
Run Code Online (Sandbox Code Playgroud)
default_actions方法应创建显示,编辑和删除链接.它显示了它们,但删除链接只是show动作的链接:
admin/users/1
Run Code Online (Sandbox Code Playgroud)
规格说它应该创建一个删除链接.
不知道为什么会那样做.所以我尝试了另一种选择:
column "Delete" do |user|
link_to "Delete", destroy_admin_user_path(user)
end
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
undefined method `destroy_admin_user_path' for <div class="index_as_table"></div>:ActiveAdmin::Views::IndexAsTable
Run Code Online (Sandbox Code Playgroud)
我甚至尝试在路线中添加这个:
match "/admin/users/:id/destroy(.:format) " => "admin/users#destroy"
Run Code Online (Sandbox Code Playgroud)
还是有同样的错误.
我在application.html.haml中包含了这个:
= javascript_include_tag :all
Run Code Online (Sandbox Code Playgroud)
还有与上述相同的问题.
谢谢你的回复
这种特定方法导致应用程序中断:
# needed becasuse of a rails bug
def to_s
"#{self.class.name.underscore}__#{object_id}"
end
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
ActionView::TemplateError (`@content_for_details_view_builder__2234321380' is not allowed as an instance variable name) in app/views/shared/_details_view.haml:
Run Code Online (Sandbox Code Playgroud)
基本上这是导致上述异常的代码执行:
# controller
def new
@view_mode = :new
template = "new"
render template, :layout => false
end
# new.haml
- details_view @user do |b, f|
# build_helper
def details_view(model, options = {}, &block)
# instantiate OptionsWrapper passing a hash of key/value pairs, in this case
# an empty hash. OptionsWrapper contains a method_missing method so …Run Code Online (Sandbox Code Playgroud) 我查看了这个文档:
\n\n\n\n它指出:
\n\n当您订阅频道时,您将收到一条消息,该消息表示为包含三个元素的批量回复。消息的第一个元素是消息的类型(例如SUBSCRIBE 或UNSUBSCRIBE)。消息的第二个元素是您正在订阅或取消订阅的给定频道的名称。消息的第三个元素是您当前订阅的频道数量:
\n\n> SUBSCRIBE first second\n\n*3 #three elements in this message: \xe2\x80\x9csubscribe\xe2\x80\x9d, \xe2\x80\x9cfirst\xe2\x80\x9d, and 1\n$9 #number of bytes in the element \nsubscribe #kind of message\n$5 #number of bytes in the element \nfirst #name of channel\n:1 #number of channels we are subscribed to\nRun Code Online (Sandbox Code Playgroud)\n\n这很酷,您可以在订阅频道的批量回复中看到您订阅的频道数量。现在我尝试在使用 ruby 时得到此回复:
\n\nrequire \'rubygems\'\nrequire \'redis\'\nrequire \'json\'\n\nredis = Redis.new(:timeout => 0)\n\nredis.subscribe(\'chatroom\') do |on|\n on.message do |channel, msg, total_channels|\n data = JSON.parse(msg)\n puts "##{channel} - [#{data[\'user\']}]: #{data[\'msg\']} - channels subscribed …Run Code Online (Sandbox Code Playgroud) 在处理指针和const时,我看到有三种方法来声明它们:
1)
int nValue = 5;
int *const pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
2)
int nValue = 5;
const int *pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
3)
const int 5;
const int *const pnPtr = &nValue;
Run Code Online (Sandbox Code Playgroud)
示例1被称为"Const指向非const的指针".地址不能更改,但值可能会更改.所以我们可以做类似下面的事情,因为例1中的nValue是一个非const int:
int nValue = 5;
int const *pnPtr = &nValue;
*pnPtr = 6;
Run Code Online (Sandbox Code Playgroud)
但是我们不能在示例1中执行以下操作:
int nValue = 5;
int nValue2 = 6;
int const *pnPtr = &nValue;
pnPtr = &nValue2;
Run Code Online (Sandbox Code Playgroud)
示例2被称为"指向const的指针".这意味着地址可以更改,但值不能.我们可以做到以下几点:
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
pnPtr = &nValue2;
Run Code Online (Sandbox Code Playgroud)
但是我们在示例2中不能执行以下操作: …
当运行多个线程时,我发现交错成为一个问题,其中一个线程不考虑另一个线程对对象的更改。Jave 提供了同步方法、同步状态、Lock 对象和新的 Concurrency 类对象,以确保当多个线程影响单个对象时,每个线程在其他线程影响对象字段之前获得独占轮流影响对象字段。
现在,虽然这一点很清楚,但当您不使用单个对象而是对多个对象使用多个线程时,它对我来说有点灰色。所以我尝试测试一下。我有一个有 50 个线程的 ExecuterService。它产生一个新的响应者线程(它本身就是一个新对象):
ExecutorService executor=Executors.newFixedThreadPool(50);
for(int i=0;i<50;i++){
executor.execute(new Responder());
}
Run Code Online (Sandbox Code Playgroud)
因为每个线程本身就是一个实例化对象,如果我的 Responder 类如下所示:
public class Responder implements Runnable {
private ArrayList<Integer> list=new ArrayList<Integer>();
private Random random = new Random();
@Override
public void run() {
for(int i=0;i<1000;i++){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
list.add(random.nextInt(100));
}
System.out.println("The list size: " + list.size());
}
}
Run Code Online (Sandbox Code Playgroud)
每个线程是否都使用自己的 Responder 实例,以便线程安全不成问题?比如ArrayList列表是线程间共享数据吗?我的直觉告诉我,线程安全在这里不是问题,因为每个线程都使用自己的实例、自己的成员,而不是共享数据,当我尝试运行这个示例时, size() 调用输出相同的 (1000)所有线程。所以看起来它是线程安全的,但我尝试了一种据说是非线程安全的方法:
public static void main(String[] args) {
int i;
//checking if instantiating new …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用capistrano进行部署,但由于rubyracer gem问题而失败.
我尝试将以下变体添加到gemfile,然后在ubuntu上部署到生产服务器并且没有任何效果:
1)
gem 'libv8', '3.11.8.3'
3)
gem 'therubyracer'
gem 'libv8', '3.3.10.4'
4)
gem 'libv8', '~> 3.11.8.3'
Run Code Online (Sandbox Code Playgroud)
这一切都给出了同样的错误:
安装therubyracer(0.11.0)时发生错误,Bundler无法继续.在捆绑之前确保gem install therubyracer -v'0.11.0'成功.
所以我试着这样做:
group :production do
gem 'therubyracer', '0.10.2', :platforms => :ruby
end
Run Code Online (Sandbox Code Playgroud)
但是这导致了这个错误:
Bundler could not find compatible versions for gem "libv8":
In Gemfile:
therubyracer (= 0.10.2) ruby depends on
libv8 (~> 3.3.10) ruby
libv8 (3.11.8.3)
Run Code Online (Sandbox Code Playgroud)
看来我目前在服务器上有两个版本的lib8:
libv8 (3.11.8.4, 3.3.10.4 x86_64-linux)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?