小编ove*_*tor的帖子

通过Gradle和Android Studio构建和运行应用程序比通过Eclipse慢

我有一个多项目(~10个模块),每次建筑大约需要20-30秒.当我在Android Studio中按Run时,我必须每次都等待重建应用程序,这非常慢.

是否可以在Android Studio中自动化构建过程?或者您对如何更快地完成此过程有任何建议?

在Eclipse中,由于自动构建,在模拟器上运行相同的项目大约需要3-5秒.

这是我的build.gradle文件(app模块):

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':libraries:SharedLibs')
    compile project(':libraries:actionbarsherlock')
    compile project(':libraries:FacebookSDK')
    compile project(':libraries:GooglePlayServices')
    compile project(':libraries:HorizontalGridView')
    compile project(':libraries:ImageViewTouch')
    compile project(':libraries:SlidingMenu')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 16
    }
}
Run Code Online (Sandbox Code Playgroud)

android gradle android-studio build.gradle

456
推荐指数
13
解决办法
22万
查看次数

如何从Swift中的数组中删除元素

如何在Apple的新语言Swift中取消/删除数组中的元素?

这是一些代码:

let animals = ["cats", "dogs", "chimps", "moose"]
Run Code Online (Sandbox Code Playgroud)

如何animals[2]从阵列中删除元素?

arrays swift

207
推荐指数
14
解决办法
25万
查看次数

swift中"前置条件"和"断言"之间的区别?

Swift precondition(condition: Bool, message: String)assert(condition: Bool, message: String)Swift有什么区别?

他们两个看起来都一样.我们应该在哪种情况下使用其中一种?

swift

93
推荐指数
4
解决办法
2万
查看次数

如何调试WKWebView中的javascript代码

我在WKWebView中运行webapp时遇到了一些麻烦(特别是:某些按钮没有响应).我使用本教程作为指南,并成功地让webview显示我的webapp.所以现在我想调试javascript代码.

我知道webapp有效,因为我已经在Android webview以及无数浏览器(包括我正在使用的iPad模拟器上的safari)中尝试过它.经过一些快速的谷歌搜索后,我发现了如何使用Safari在UIWebView中调试javascript.可悲的是,这似乎不适用于新的WKWebView.

当我导航到Develop->iPad Simulator我被告知有"没有可检查的应用程序"时.我用一个简单的应用程序和UIWebView尝试了同样的事情,并通过safari调试完美地工作.

有没有办法在WKWebView中调试javascript代码?

要重现我的问题(使用swift),在xCode 6中启动一个新的单个屏幕项目,将下面提供的代码(由kinderas提供)复制到ViewController.swift文件中,然后将插座拖到文件中文档大纲的View下方.如果出现混淆,请参阅我上面链接的教程.View ControllerMain.storyboard

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet var containerView : UIView! = nil
    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        self.webView = WKWebView()
        self.view = self.webView!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        var url = NSURL(string:"http://www.kinderas.com/")
        var req = NSURLRequest(URL:url)
        self.webView!.loadRequest(req)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}
Run Code Online (Sandbox Code Playgroud)

javascript debugging ios ios8 wkwebview

12
推荐指数
2
解决办法
2万
查看次数

在类声明中使用自己的类作为类型参数约束

我在Delphi XE8中有一个类的以下声明:

TestClass = class;
TestClass = class
  function test<T: TestClass>(supplier: TFunc<T>): T; // Compiler error
end;
Run Code Online (Sandbox Code Playgroud)

这会抛出以下编译器错误:

E2086 Type 'TestClass' is not yet completely defined
Run Code Online (Sandbox Code Playgroud)

当我在混合中添加另一个类并将其作为约束使用时,它可以正常工作:

AnotherTestClass = class
end;

TestClass = class;
TestClass = class
  function test<T: AnotherTestClass>(supplier: TFunc<T>): T; // No Error
end;
Run Code Online (Sandbox Code Playgroud)

我怀疑问题是前向类型声明没有告诉Delphi足够的TestClass类型.这可能更明显,因为以下尝试解决该问题会在不同的行上抛出相同的编译器错误:

TestClass = class;
AnotherTestClass = class (TestClass) // Compiler Error
end;
TestClass = class
  function test<T: AnotherTestClass>(supplier: TFunc<T>): T;
end;
Run Code Online (Sandbox Code Playgroud)

我做错了什么,如果没有,是否有解决这个问题的方法?

delphi generics forward-declaration type-constraints delphi-xe8

9
推荐指数
1
解决办法
173
查看次数

在不影响存储对象的情况下更改值 - Realm swift

我正在使用领域来保存我的数据.我的问题是,我想有对象了一些小的,临时的变化,我不希望这些变化在我的存储对象的反映,但境界并不让我改变检索到的对象的属性没有写入块,最终导致保存我在数据库中的临时更改.我不能通过创建新对象和分配值来创建对象的副本,因为我有大数据集.

有没有简单的解决方案来实现这一目标?

realm ios swift

8
推荐指数
1
解决办法
2122
查看次数

如何从WakefulBroadcastReceiver启动IntentService

我有一个应用程序,您应该可以使用我将在此问题中发布的代码完全且非常轻松地重新创建.这是清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcasttest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.WAKE_LOCK"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name="com.example.broadcasttest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name="com.example.broadcasttest.TestReceiver"
            android:label="@string/app_name"
            android:enabled="true" >
        </receiver>

        <intentservice 
            android:name="com.example.broadcasttest.MonitorService"
            android:enabled="true" >
            <intent-filter>
                <action android:name="com.example.broadcasttest.MonitorService" />
            </intent-filter>
        </intentservice>
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

如您所见,它包含一个活动,一个(唤醒)广播接收器和一个intentservice,都在同一个包中.活动在启动时开始,这是代码:

package com.example.broadcasttest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver android-intentservice

6
推荐指数
1
解决办法
2万
查看次数

在运行时创建自定义标题栏和边框,TMainMenu起作用

我正在使用自定义表单的一个相当大的项目中工作,我想自己绘制这些表单的非客户区域。我不能使用vcl样式,因为许多表格需要在运行时选择带有颜色的标题栏和边框,据我所知,样式在设计上是广泛应用的。

到目前为止,我已经完成的工作是绘制标题栏和边框,绘制标题,禁用最小化,最大化和关闭按钮,并用我自己的按钮替换。我通过截获WM_NCPaint和WM_NCACTIVATE消息,并在处理WM_NCACTIVATE并在不处理WM_NCPAINT消息的情况下发送WM_ACTIVATE消息的情况下在继承的关键字之后调用我自己的过程来实现此目的:

SendMessage(Handle, WM_NCACTIVATE, ORD(active), -1);
Run Code Online (Sandbox Code Playgroud)

之所以这样做,是因为我无法使TMainMenu始终如一地绘制自身,在逐步执行代码之后,似乎正在正确处理的WM_NCACTIVATE消息可以绘制主菜单。我尝试过的另一种方法是在主菜单上调用UpdateItems,但这没有产生任何结果。

我通过这样处理WM_NCHITTEST消息来停用右上角的按钮:

procedure TBasicForm.WMNCHITTEST(var message : TMessage);
begin
  inherited;
  case message.Result of
    HTMINBUTTONE, HTMAXBUTTON, HTCLOSE: message.Result := HTCAPTION;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我通过处理WM_NCLBUTTONDOWN得到了自己的按钮(在处理WM_NCACTIVATE时在我调用的过程中绘制),这不是一个完美的解决方案,但可以轻松进行改进。(我相信我不需要对此进行详细说明。

到目前为止,这听起来还不错。

  • 在某些形式之间切换焦点时,会有很多闪烁。
  • 有时会显示原始的右上按钮,尽管它们不再对鼠标有反应。
  • 关闭表单时,标题栏(仅标题栏)恢复为旧外观。

直接的问题是,我如何解决这三个问题?但是,可能是我完全采用了错误的方式,在这种情况下,问题是,如何实现自定义绘制的标题栏和边框,最好不要过多地使用边框和标题栏的功能,并且正确绘制主菜单?

正如我所说的,这是一个包含许多表单的相当大的项目,因此在表单设计器中进行更改是我考虑要做的最后一件事。

要重现我遇到的问题,请创建一个新表格并处理WM_NCHITTEST,WM_NCACTIVATE和WM_NCPAINT,如我之前所述。

...
procedure WMNCHITTEST(var message : TMessage); message WM_NCHITTEST;
procedure WMNCACTIVATE(var message : TMessage); message WM_NCACTIVATE;
procedure WMNCPAINT(var message : TMessage); message WM_NCPAINT;
...
implementation
...
procedure TBasicForm.WMNCHITTEST(var message : TMessage);
begin
  inherited;
  case message.Result of
    HTMINBUTTONE, HTMAXBUTTON, HTCLOSE: message.Result := HTCAPTION;
  end; …
Run Code Online (Sandbox Code Playgroud)

delphi vcl delphi-xe3

4
推荐指数
1
解决办法
1810
查看次数

在自己处理WM_NCPAINT时强制重新绘制TMainMenu

我是在一个相当大的应用程序中自定义绘制我的标题栏,有许多表单,并且决定尝试通过自己处理一些消息并在我处理WM_NCPAINT时填写绘图的老式方法.

这幅画本身很顺利,基本上是有效的.有一件事是行不通的是绘制TMainMenu.要么我有默认的WM_NCACTIVATE处理程序绘制整个非客户区域(我必须在我的WM_NCPAINT处理程序中执行WM_NCACTIVATE消息),然后再绘制它,这会导致看似无法帮助的闪烁.或者我可以尝试让WM_NCPAINT的默认处理程序仅绘制包含TMainMenu的Rect,这会产生平滑的结果,但不会重新绘制菜单.

我的问题是:

  • 当我自己处理WM_NCPAINT时,如何才能有TMainMenu并且只重新绘制了一个TMainmenu?

我已经给了它一些去,我想我是在正确的方式,但我撞到了一堵墙; 我对我正在做的事情知之甚少,似乎无法找到关于它的明确文档.我的代码中最重要的部分是:

RedrawWindow(Handle, nil, MenuRegion, RDW_INVALIDATE or RDW_FRAME or RDW_NOERASE or RDW_ALLCHILDREN or RDW_UPDATENOW);
Run Code Online (Sandbox Code Playgroud)

而且我认为这正是出了什么问题.(或者更确切地说,我计算'MenuRegion'的代码.我只是不知道是否出错,因为我使用了错误的坐标系,或者是因为我这样做完全是错误的.

这是我的代码的简化版本,它将在delphi(xe3)中"按原样"编译和运行:

unit Unit3;
interface
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
  TForm3 = class(TForm)
  private
    FDrawMenu: Boolean;
    function CalcFrameRegion: HRGN;
    function CalcMenuRegion: HRGN;
    procedure DrawMenu;
    procedure FormFrame(minimal: Boolean = false);
    procedure WMNCActivate(var message: TWMNCActivate); message WM_NCACTIVATE;
    procedure WMNCPaint(var message: TMessage); message WM_NCPAINT;
    procedure WMSIZE(var message : TWMSIZE); message WM_SIZE;
    constructor Create(AOwner: TComponent); override;
  public
    { Public …
Run Code Online (Sandbox Code Playgroud)

delphi vcl titlebar nonclient-area delphi-xe3

3
推荐指数
1
解决办法
1042
查看次数

Swift 中的字典词典

我想建立一本字典的字典。在 Swift 中,如何声明一个具有字符串键和相同类型字典值的字典?我需要能够拥有无限的巢穴。(有点像使用节点构建树。只不过它不是树,而是字典。)

我尝试使用 AnyObject,但出现转换错误:

var node1: Dictionary<String, AnyObject?> = ["foo" : nil]
var node2: Dictionary<String, AnyObject?> = ["bar" : node1] // ERROR: Cannot convert value of type 'Dictionary<String, AnyObject?>' (aka 'Dictionary<String, Optional<AnyObject>>') to expected dictionary value type 'Optional<AnyObject>'
Run Code Online (Sandbox Code Playgroud)

是否有类型安全的方法来执行此操作(即不使用 AnyObject?)

dictionary nested swift

0
推荐指数
1
解决办法
3926
查看次数