我有一个已发布的应用程序,当新引入的Display size操作系统设置设置为太大值时,在Android N上启动时崩溃.
当我查看logcat时,我看到以下消息:
java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.
Run Code Online (Sandbox Code Playgroud)
我在第一个Activity中将问题跟踪到ImageView,它显示了一个漂亮的大背景图像.有问题的图像是2048x1066,位于我的通用drawables目录中,因此无论密度如何,都将使用此图像.
当Display size设置为时,一切正常Small.但是当我上去时Default,它就会停止工作.如果我然后用较小的图像交换图像,它可以工作Default,但如果我去Large,它会再次停止工作.
我的猜测是,调整Display size会使您的设备表现得像具有更高像素密度的物理上更小的设备.但我不明白我应该在这做什么.如果我逐渐增加较小的图像以逐渐提高分辨率,那么在实际大型显示器上看起来不会很好.或者我不明白什么?
任何指针都将非常感激.
所以我买了一台用于开发的Nexus 10,并且对能够使用"adb shell wm"命令模拟其他设备的前景感到非常兴奋,该命令具有大小,密度和过扫描子命令.
但是,我在制作这项工作时遇到了一些问题.我想看看是否还有其他人遇到过这些问题.为了便于讨论,我想说我正在尝试模拟一部典型的手机,运行以下内容:
adb shell wm size 800x480
adb shell wm density 240
adb shell wm overscan reset
Run Code Online (Sandbox Code Playgroud)
首先,设置大小会使菜单栏变得混乱.在纵向模式下,只有部分按钮存在且尺寸错误,而在横向模式下,菜单栏完全丢失.实际上,即使重置了所有内容,在重新启动设备之前,它仍然会丢失.有什么解决方法吗?
其次,过扫描命令有什么作用?我无法在任何地方找到任何文档.
第三,有没有办法让设备使用新尺寸的1个像素渲染屏幕到物理屏幕的1个像素?也就是说,如果我将大小设置为800x480,我希望看到新屏幕占用的空间非常大.相反,似乎发生的事情是800x480屏幕被拉伸,因此最长的一面恰好适合物理显示器.我怀疑过扫描可能是答案,但当我尝试将其设置为0,0,800,480时,它会永久挂起我的系统,我不得不重置为出厂图像以便恢复.
最后,有没有办法让平板电脑根据菜单栏在方向更改期间发生的情况来模拟手机?在平板电脑上,菜单栏会进入屏幕的新底部,但在手机上,它会保持原样.
到目前为止,我喜欢这个设备,但如果我能让这个设备模拟工作正常,我会喜欢它!提前感谢任何指针.
我有一个复杂的对象图,我正在使用Json.NET序列化/反序列化.一些对象派生自抽象类,因此为了使反序列化正常工作,我需要创建一个自定义JsonConverter.它唯一的作用是在反序列化时选择抽象类的适当具体实现,并允许Json.NET继续运行.
当我想序列化时,我的问题出现了.我根本不需要做任何自定义.我想获得完全相同的行为,因为JsonConvert.SerializeObject没有自定义JsonConverter.
但是,由于我使用自定义JsonConverter类来满足反序列化需求,因此我不得不提供WriteJson实现.由于WriteJson是抽象的,我不能只是调用base.WriteJson,但我想基本上这样做.所以我的问题是,我该用什么方法来获得普通的Jane,默认行为?换一种说法:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// What goes here to get default processing?
}
Run Code Online (Sandbox Code Playgroud) 更新:我有一个解决方法,使事情工作可以接受,没有黑客.我将下面描述的先前尝试留给子孙后代.请参阅工作解决方案的答案.
我刚刚将一个项目升级到Visual Studio 2017,我突然得到了各种类型的TypeScript错误.其中许多都是Duplicate identifier错误的.当我双击其中一个错误时,它会打开一个名为index.d.ts的文件,该文件位于以下目录中:
C:\Users\[me]\AppData\Local\Microsoft\TypeScript\node_modules\@types\jquery\index.d.ts
Run Code Online (Sandbox Code Playgroud)
根据我在此页面上阅读的内容:
...似乎正在发生的事情是Visual Studio正在尝试帮助下载我已经手动包含定义文件的类型的定义文件.自动包含定义文件听起来像一个很棒的功能!我只是删除手动包含的,对吧?但我所做的一切似乎都无效.我希望有人可以告诉我哪里出错了.
对于背景,我在Visual Studio 2015中工作的方式如下.我正在使用三个库:jQuery,jQuery UI和QUnit.我只是从DefinitelyTyped下载了.d.ts文件并将它们放在我的项目中的Scripts目录中,一切正常,直到我在VS 2017中打开项目.
从错误消息来看,似乎Visual Studio 2017引入了自己的定义文件,所以我想我只是删除我手动带来的那些文件.但是,当我这样做时,现在我遇到了大量Cannot find name $错误,这似乎意味着这些定义文件不再由于某种原因而被引入.
接下来,我想可能问题是我的项目中实际上没有JQuery(和其他库)源文件.我只是在我的HTML源代码中从Google的CDN引用它们.上面的链接听起来像Visual Studio正在寻找一个实际的松散文件作为它应该带入定义文件的指示器.所以我手动将文件添加到我的Scripts目录并重建,但没有任何改变.
上面的链接页面还讨论了从npm或bower包含你的库文件,或者使用tsconfig.json文件,但是在我走这些道路之前(不是我正常工作流程的一部分),我希望有人可以告诉我,是有一种在Visual Studio 2017中引入TypeScript定义的首选方法吗?提前致谢.
更新:(见下面的更新2)我能够让事情发生.这不完全是直观的,所以我在这里分享我的步骤,希望a)它可以帮助某人,b)有人可以告诉我,如果我只是以错误的方式做这件事.
var foo = $(document);{ "compilerOptions": { "types": [] } }<Project>\obj\Debug\...(路径较长但我忘记记录)obj手动删除整个目录.更新2:我发现上述方法存在一些缺点.我也有更好的解决方案.
使用tsconfig.json有一个主要的缺点.在保存时重新编译的选项在Visual Studio中不起作用.我希望我的网站在调试模式下运行,对TypeScript进行一些更改,点击保存,然后立即看到网站中反映的那些更改.
我认为给我带来麻烦的一件事就是我将TypeScript文件放在Scripts以外的文件夹中,我保留了应该按原样部署到服务器的文件.我想微软认为这是一个非标准的用例.
在我的头撞到墙上太长时间之后,我找到了一个简单的,虽然很笨拙的解决方案.我把这个目录中的所有子目录:
C:\Users\[me]\AppData\Local\Microsoft\TypeScript\node_modules\@types
Run Code Online (Sandbox Code Playgroud)
并将它们移动到名为Deleted的目录.
巴姆.不再自动包含定义,不再有错误.
微软,如果您正在阅读,请为我的方案提供支持,重申的是:
更新3: …
我看到一些奇怪的行为保存到DocumentDB.我开始使用看起来像这样的普通旧类来保存文档:
public class Person
{
public string Name;
public int Age;
}
Run Code Online (Sandbox Code Playgroud)
我保存这些文件是这样的:
var person = new Person { ... };
client.CreateDocumentAsync(myCollectionLink, person);
Run Code Online (Sandbox Code Playgroud)
这很好.保存的属性与类中的名称完全相同.然后我意识到我需要文档的SelfLink才能执行更新和删除."啊,"我想."我只是从Document中衍生出来,就像这样:
public class Person: Microsoft.Azure.Documents.Document
{
public string Name;
public int Age;
}
Run Code Online (Sandbox Code Playgroud)
然而,令我惊讶的是,当我进行此更改时,除了DocumentDB本身分配的"id"属性外,新文档创建完全空白.
我多次仔细检查.从文档派生可防止保存文档中的自定义属性...
...除非我用[JsonProperty]明确地装饰每一个,如下所示:
public class Person: Document
{
[JsonProperty(PropertyName="name")]
public string Name;
[JsonProperty(PropertyName="age")]
public int Age;
}
Run Code Online (Sandbox Code Playgroud)
然后它再次工作(当然,使用新的更多JSON适当的camelCase属性名称).并且,在检索时,对象将填充我需要更新和删除的SelfLink属性.都好.
我的问题是...... 为什么会这样?我是从文件衍生出来做错了吗?非常感谢您的反馈意见.
如果这个问题听起来很广泛,那只是因为我很难找到关于Google在Jelly Bean中引入的app加密的重要细节.
为了清楚起见,我指的是Google在本页底部的一个段落中提及的功能:http://developer.android.com/distribute/googleplay/about/distribution.html
听起来很棒:付费用户像以前一样下载到他们所有的设备,但无法与成千上万的最亲密朋友分享.但是,正如所报告的那样,应用程序加密似乎遇到了一些问题,例如,这里(http://blog.gsmarena.com/google-disables-jelly-bean-app-encryption-after-issues-with-several-付费应用/).
那是一年多以前的事了.据推测谷歌已经解决了这个问题,但我还没有看到任何后续文章来确认.如果他们通过操作系统更新来修复它,那么可能需要一个特定的操作系统才能工作.但是上面链接的页面没有说明这一点.
所以这引出了我的一系列问题:
感谢您对此有所了解!
我知道之前已经提出了类似的问题,但唯一的答案是六年了,人们提到的项目似乎没有被维护.
我想在控制台应用程序或类库中使用Razor来呈现HTML.我还想在.cshtml文件中使用Intellisense.
目前,我可以通过以下方式对此进行评审:
Custom Tool为RazorTemplatePreprocessor这会导致识别Razor语法.所以,如果你有Test.cshtml,它会生成一个名为的类Test,你可以这样使用:
var test = new Test();
test.Model = "Hi there";
var html = test.GenerateString();
Console.WriteLine(html);
Run Code Online (Sandbox Code Playgroud)
这对我的目的来说已经足够好了.但是,.cshtml文件中的实际编码体验非常糟糕:
var因为它是C#2.@model关键字无法识别.奇怪的是,如果你忽略所有这些错误,HTML实际上是正确生成的,包括使用Razor引擎抱怨的库和@model关键字.但是,这会导致严重的心理混乱,因为如果您有任意数量的.cshtml文件,您很快就会遇到成千上万的这些错误与真正的错误混在一起.
我能做些什么来使实际的Razor编码体验更像是在ASP.NET Web应用程序中工作吗?
我有一堆枚举,我希望 Json.NET 将它们序列化为驼峰式字符串。我的 Global.asax.cs 文件中有以下内容,并且运行良好:
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter { CamelCaseText = true });
Run Code Online (Sandbox Code Playgroud)
这使它成为这样的枚举:
public enum FavoriteWebSite {
StackOverflow,
GoogleNews
// Etc
}
Run Code Online (Sandbox Code Playgroud)
将序列化为“stackOverflow”、“googleNews”等值。
但是,我有几个枚举是按位掩码。举一个简单的例子,假设一个看起来像这样:
public enum Hobbies {
Walking = 0x01,
Biking = 0x02,
// Etc
}
Run Code Online (Sandbox Code Playgroud)
当我序列化这个枚举的实例时会发生什么取决于它里面有什么样的值。例如:
Hobbies set1 = Hobbies.Walking; // Serializes as "walking" -- bad
Hobbies set2 = Hobbies.Walking | Hobbies.Biking; // Serializes as "3" -- good!
Run Code Online (Sandbox Code Playgroud)
我想覆盖此枚举上的序列化以仅将其序列化为 int,同时保留全局设置以完整使用驼峰式字符串。
我尝试删除全局配置,以便默认情况下将枚举序列化为整数,然后仅添加[JsonConverter(typeof(StringEnumConverter))]到非位掩码枚举。但是,这会导致 PascalCased,而不是 CamelCased 序列化。在像上面这样的方法装饰中使用 StringEnumConverter 时,我没有看到任何方法来设置 CamelCaseText 属性。
所以,回顾一下,目标是:
自从升级到Visual Studio 2017以来,我运行了大约五到六个Node.js进程并且不断占用大量CPU.这似乎主要发生在调试我的ASP.NET网站时,特别是在编译Less和TypeScript文件时.
通常,只需在Less文件中按Ctrl-S就足以让Visual Studio停止响应20秒或更长时间.这非常令人沮丧.
要清楚,这不是Node.js项目.我猜测Visual Studio 2017在幕后使用Node.js,可能是因为它的Less和TypeScript编译.
有没有办法在Visual Studio 2017中禁用Node.js并仍然可以正确编译TypeScript和Less文件?
我在ASP.NET 5.0 Web应用程序中将用户从旧用户存储迁移到ASP.NET Identity 2.0.我有一种验证遗留哈希的方法,但我想在登录时将它们升级到ASP.NET Identity 2.0哈希.
我创建了一个IPasswordHasher能够检测和验证遗留哈希的自定义,并PasswordVerificationResult.SuccessRehashNeeded在适当的时间返回.(如果它检测到散列不是遗留的,那么它只会进入内置的ASP.NET标识哈希验证.)
但是,返回PasswordVerificationResult.SuccessRehashNeeded似乎并不会导致ASP.NET Identity实际执行任何操作.当IPasswordHasher返回此结果时,是否存在某个配置选项会导致系统重新哈希密码?
如果上面的答案是否定的,那么我建议我只是手动重新哈希并更新用户吗?我会在哪里这样做?我没有在控制器级别看到任何可以看到PasswordVerificationResult的地方.
我是ASP.NET身份的新手,所以我确信我错过了一些简单的东西.提前感谢您的任何指示.
android ×3
c# ×3
json ×3
asp.net-mvc ×2
json.net ×2
typescript ×2
.net ×1
adb ×1
azure ×1
encryption ×1
hash ×1
layout ×1
less ×1
node.js ×1
razor ×1