小编Gui*_*ume的帖子

单击后退按钮两次以退出活动

我最近在很多Android应用和游戏中都注意到了这种模式:当点击后退按钮"退出"应用程序时,Toast会出现类似于"请再次单击BACK退出"的消息.

我想知道,因为我越来越频繁地看到它是一个内置的功能,你可以以某种方式访问​​活动?我查看了许多类的源代码,但我似乎无法找到任何相关内容.

当然,我可以考虑几种方法来轻松实现相同的功能(最容易的是在活动中保留一个布尔值,表明用户是否已经点击过一次......)但是我想知道这里是否有东西.

编辑:正如@LAS_VEGAS所说,我并不是指传统意义上的"退出".(即终止)我的意思是"回到应用程序启动活动启动之前打开的任何东西",如果这是有意义的:)

java android back-button

311
推荐指数
16
解决办法
21万
查看次数

正则表达式匹配没有给定前缀的特定字符串

我需要匹配包含值且没有给定前缀的所有行.

示例:我想要所有包含word前缀的行prefix

所以:

foobar -> no match
prefix word -> no match
prefix word suffix -> no match
word -> MATCH
something word -> MATCH
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

(?!prefix)word
Run Code Online (Sandbox Code Playgroud)

似乎没有做我想要的

regex

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

实现用户选择的主题

我想让用户在几个不同的主题之间做出选择,并且想知道这是否是一种正常的做事方式.我用这种方法进行了一些测试并且它有效,但我认为可能有更好的方法并认为它可能会在以后引起一些问题,所以想问一下.

我正在考虑为每个主题创建一个不同的布局,并且onCreate只是为setContentView()方法切换.我首先加载一个保存的SharedPreference值(整数),具体取决于显示相应布局的值.显然,用户可以SharedPreference使用按钮或其他内容更改值.

由于这些布局基本相同但颜色不同,我想TextViews在每个布局文件中为我和其他视图使用相同的ID .我的主要问题是这会导致问题吗?

抱歉没有代码的文本墙.我想对这种情况大致了解良好做法.提前致谢.

android android-theme

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

Android:如何保护SQLite数据库中的数据?

我目前正在开发一款将数据保存到SQLite数据库中的Android游戏.这不是真正的"敏感"数据,但我不希望用户能够修改它(出于游戏平衡的明显原因,因为它会作弊).当手机植根时,访问和修改SQLite数据库非常容易(市场上有很多应用程序).

那么我是否应该担心这一点,或者考虑使用带有根电话的用户可以做任何他们想做的事情,包括作弊,这是他们的选择?或者我可以以某种方式加密我不希望他们修改的数据,或添加MD5校验和或类似的东西?

另一种方法是完全放弃SQLite并使用某种二进制文件和游戏数据.

如果你们中的一些人已经遇到过类似的问题,你们采取了哪些方法,以及Android游戏开发社区的"良好实践",请告诉我们.

谢谢.

sqlite encryption android protection

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

如何在Android中扩展Application的类中显示Dialog Box?

我希望在特定条件之后显示一个对话框,但是对于现在的演示,我想从扩展应用程序的类中显示一个对话框.这是我的代码

public class ControlApplication extends Application
{
    @Override
    {
    super.onCreate();
    final Dialog dialog = new Dialog ( getApplicationContext() ); 
    dialog.setTitle("zakasssssssssssssssssss");
    dialog.setCancelable(false);
    dialog.show();
}
Run Code Online (Sandbox Code Playgroud)

}

但是在dialog.show()我得到的错误就像

Attempted to add window with non-application token WindowToken{4067a268 token=null}.  Aborting.
D/AndroidRuntime( 1923): Shutting down VM
W/dalvikvm( 1923): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 1923): FATAL EXCEPTION: main
E/AndroidRuntime( 1923): java.lang.RuntimeException: Unable to create application 
com.test.shrenik.ControlApplication: android.view.WindowManager$BadTokenException: 
Unable to add window -- token null is not for an application
E/AndroidRuntime( 1923):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3275)
E/AndroidRuntime( …
Run Code Online (Sandbox Code Playgroud)

android android-dialog

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

黑匣子单元测试

在我的上一个项目中,我们的单元测试几乎达到了100%cc,因此我们几乎没有任何错误.但是,由于单元测试必须是白盒(你必须模拟内部函数来获得你想要的结果,所以你的测试需要知道你的代码的内部结构)任何时候我们改变函数的实现,我们不得不也改变测试.请注意,我们没有更改函数的逻辑,只是实现.这非常耗时,感觉好像我们的工作方式不对.由于我们使用了所有适当的OOP准则(特别是封装),每次我们更改实现时,我们都不必更改其余的代码,但必须更改单元测试.感觉好像我们正在为测试服务,而不是为我们服务.

为了防止这种情况,我们中的一些人认为单元测试应该是黑盒测试.如果我们创建整个Domain的一个大模拟并为一个地方的每个类中的每个函数创建一个存根,并在每个单元测试中使用它,那么这是可能的.当然,如果特定的测试需要调用特定的内部函数(就像确保我们写入DB一样),我们可以覆盖我们的存根.

因此,每次我们更改函数的实现(比如添加或替换对帮助函数的调用)时,我们只需要更改我们的主要大模拟.即使我们确实需要改变一些单元测试,它仍然会比以前少得多.

其他人认为单元测试必须是White Box,因为不仅要确保你的应用程序在特定的地方写入数据库,你要确保你的应用程序不会在其他任何地方写入数据库,除非你特别期望它.虽然这是一个有效的观点,但我认为值得花时间编写白盒测试而不是黑盒测试.

总之,有两个问题:

  1. 您如何看待黑匣子单元测试的概念?

  2. 您如何看待我们希望实施该概念的方式?你有更好的想法吗?

unit-testing

17
推荐指数
3
解决办法
6207
查看次数

Android测试:如何查看屏幕上显示的对话框?(使用ActivityInstrumentationTestCase2)

我正在尝试最终将UI测试添加到我的Android应用程序中,以增加覆盖率(我所有其他层都经过适当测试,因此我的所有错误现在都来自UI ...)我开始使用ActivityInstrumentationTestCase2我的基类作为模拟器单元 - 测试,简单的事情很容易检查和工作.

但现在,我正在尝试按预期检查对话框,我不知道该怎么做.

我的测试:

public void testOpensAboutDialogWhenAboutButtonClicked() {
    final MyActivity activity = getActivity();
    final Instrumentation instrumentation = getInstrumentation();

    final Button aboutButton = (Button) activity.findViewById(R.id.about);
    TouchUtils.clickView(this, aboutButton);

    // how to test for the AboutDialog?
}
Run Code Online (Sandbox Code Playgroud)

现在我的对话框没有id,所以我无法使用findViewById获取指向它的指针.它是使用可用的构建器类创建的:

final AlertDialog about = new AlertDialog.Builder(parent)
            .setTitle(parent.getString(R.string.about_title))
            .setCancelable(true)
            .setIcon(R.drawable.skull)
            ....
Run Code Online (Sandbox Code Playgroud)

任何想法,或指向教程的指针?

编辑:要回答Jens评论,我没有使用托管对话框,只是创建AlertDialog并使用.show()显示它

android unit-testing

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

Selenium:找到元素"旁边"其他元素

我正在使用Selenium将web测试添加到我的项目中.我已经有一堆测试用于检查特定元素:

final WebElement dateElement = web.findElement(By.id(elementId));
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我有另一个要求.这是在我生成的页面中:

<input type="text" id="dateElement" name="dateElement" value="bunch of monkeys" tabindex="101" placeholder="yyyy-mm-dd">
<span class="error">dateElement is an invalid date</span>
Run Code Online (Sandbox Code Playgroud)

如何获取错误消息?我想要一些允许我在dateElement之后请求类"错误"的span元素的东西.

(这个错误消息是由Spring MVC批准的,因此直接更改它并不容易.可能我猜,但我不愿意).

欢迎任何其他想法.

java testing selenium

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

Maven:带有sql-maven-plugin的PL/SQL脚本抛出错误PLS-00103

我正在尝试使用sql-maven-plugin在Oracle 11数据库上执行PL/SQL脚本.虽然脚本是有效的PL/SQL(据我所知),执行会给我一个PLS-00103错误:

SQL脚本:(drop_all_tables.sql)

BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE';
   EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;
Run Code Online (Sandbox Code Playgroud)

我的插件配置:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <version>1.5</version>

            <dependencies>
                <dependency>
                    <groupId>oracle</groupId>
                    <artifactId>jdbc</artifactId>
                    <version>11.2.0.2.0</version>
                </dependency>
            </dependencies>
            <executions>
                <execution>
                    <id>create-schema</id>
                    <phase>process-test-resources</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <driver>oracle.jdbc.driver.OracleDriver</driver>
                        <url>${jdbc.url}</url>
                        <username>${jdbc.username}</username>
                        <password>${jdbc.password}</password>
                        <autocommit>true</autocommit>
                        <srcFiles>
                            <srcFile>src/main/resources/sql/drop_all_tables.sql</srcFile>
                        </srcFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

这是Maven执行的输出:

[ERROR] Failed to execute:  BEGIN
EXECUTE IMMEDIATE 'DROP TABLE MY_TABLE';
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] ORA-06550: line 2, column 43:
PLS-00103: Encountered …
Run Code Online (Sandbox Code Playgroud)

sql maven-2 plsql jdbc sql-maven-plugin

10
推荐指数
1
解决办法
8204
查看次数

为什么同步方法允许多个线程同时运行?

我在同一个文件中有以下程序.我已经同步了run()方法.

class MyThread2 implements Runnable {
    Thread    t;

    MyThread2(String s) {
        t=new Thread(this,s);
        t.start();
    } 

    public synchronized  void  run() {
        for (int i=0;i<3;i++) {
            System.out.println("Thread name : "+ Thread.currentThread).getName());
            try {
                t.sleep(1000);
            }
            catch (InterruptedException e) {
                e.getMessage();
            }
        }
    }
}

class TestSync {
    public static void main(String[] args) {
        MyThread2 m1=new MyThread2("My Thread 1");
        c.fun();
    }
}

class c {
    static void fun() {
        MyThread2 m1=new MyThread2("My Thread 4");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是

Thread name : My Thread 1 …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronized

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