小编Mar*_*ark的帖子

Android CountDownTimer显示1秒2秒

可能重复:
为什么millisUntilFinished无法检测到精确的CountDownTimer间隔?

为什么使用CountDownTimer两次显示"1"?我只是想让它顺利倒计时,而不是看起来它在最后一秒被挂断了.有人对如何解决这个问题有任何想法?

以下是Android Developers页面中的代码:

  new CountdownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }

     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();
Run Code Online (Sandbox Code Playgroud)

我创建了一个新项目并复制并粘贴了这段代码,以确保我不会在程序中意外搞乱.我一直在使用Tab 10.1进行测试.当我运行它时它会这样做:"5","4","3","2","1","1","完成!".

android

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

Android - 仅在发布版本变体上执行Gradle任务

我正在尝试将build.gradle文件配置为仅在选择发布版本变量时执行gradle任务.到目前为止,我的任务总是被执行,无论是在我的调试版本还是发布版本类型或签名配置中.我已经尝试在applicationsVariants块中添加我的任务,并检查它是否是发布版本,但它只是循环遍历所有变体.

applicationVariants.all { variant ->
            variant.outputs.each { output ->
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道调试和发布任务总是针对您选择的任何构建变体运行.是否可以仅在创建发布版本时执行某些代码?如果是这样,该代码在哪里?谢谢!

我已经阅读了关于此问题的每个Stackoverflow问题,但没有一个答案确实是我想要的.我的最终目标是当我为Play商店版本选择"发布"版本变体时,会向我们的服务器发布一条消息.我不想在调试时发生这种情况.

android build.gradle android-gradle-plugin

12
推荐指数
1
解决办法
6443
查看次数

Android - 从网上更新app中的数据库

我有一个带有充满信息的数据库的应用程序.用户永远不会更改或添加任何内容到此数据库.我想自己更新数据库并将其存储在网络上.然后每次加载应用程序时,它都会检查Web是否有新版本.如果有,它只需下载并替换它.这样做的最佳方式是什么?

database android

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

GSON:反序列化时删除不必要的父对象

我试图使用GSON反序列化JSON数组.我的所有嵌套对象都嵌入在"嵌入"对象中.

{
    "Book": {
        "name": "Book 1",
        "published": 1999,
        "links": {
          "url": "www.book1.com"
        },
        "embedded": {
            "Author": {
                "name": "John Doe",
                "links": {
                    "url": "www.johndoe.com"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也可能有这样的情况:

{
    "Book": {
        "name": "Book 1",
        "published": 1999,
        "links": {
          "url": "www.book1.com"
        },
        "embedded": {
            "Publisher": {
                "name": "Publishing Company",
                "links": {
                    "url": "www.publishingcompany.com"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的例子.我的一些对象可以嵌套2或3级深度,并且所有对象都在"嵌入"对象中.此外,每个对象在"链接"对象中都有一个嵌套的"url".我有大约20个不同的模型对象,每个对象都有几个字段,每个对象都有"嵌入"对象.我开始为每个模型编写自定义反序列化器,但这似乎忽略了使用gson的全部意义,我可能并不总是知道嵌入对象是什么.

我找到了这个答案,但它是用于序列化对象.我一直试图弄清楚这一段时间,并没有找到任何有用的东西.

My Book模型如下所示:

public class Book {
    String name;
    int published;
    String url;
    Author author;
    Publisher publisher; …
Run Code Online (Sandbox Code Playgroud)

java gson json-deserialization

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

Android - 如何在WebView中访问本地存储值?

是否可以从WebView访问本地存储数据?以下是我需要从应用的WebView中读取的Chrome值的屏幕截图.我需要从我的应用程序中的"值"列中获取数据.

我想要做的是,例如,在我的WebView中访问google.com,然后从"nullctx"键中读取值"1".

Chrome本地存储空间

任何有关如何阅读这些值的帮助将不胜感激.

android android-webview

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

Firebase数据库 - 按ID列表查询

我最近开始将我的应用从Parse切换到Firebase.到目前为止,一切都很顺利,但是我无法找到与Parse的whereContainedIn(String键,Collection值)相同的Firebase方法.

这是一个非常有用的方法,它允许我传入一个id数组,它将返回匹配该id的所有行.到目前为止,使用Firebase,我让它返回数据库中的所有行,然后循环遍历它们以查看该行的id是否包含在我的id数组中.另一种方法是单独查询每个id,这对Firebase的异步行为不起作用.这就是我现在为第一种方法所做的事情:

List<String> userIds = new ArrayList<>();
userIds.add("2");
userIds.add("32");
userIds.add("12545");
userIds.add("187");

DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
Query queryRef = firebaseRef.child("videos");

queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        List<Video> usersVideos = new ArrayList<Video>();

        for (DataSnapshot videoSnapshot : dataSnapshot.getChildren()) {
            Video video = videoSnapshot.getValue(Video.class);

            if (userIds.contains(video.userId)) {
                usersVideos.add(video);
            }
        }

        // usersVideos is now populated with the videos for the users

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "CANCELLED");
    }
});
Run Code Online (Sandbox Code Playgroud)

这些方法都不合理,因为我的表将包含数十万条记录.

任何帮助将不胜感激!

android firebase-realtime-database

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

在不使用 MaterialApp 的情况下为 Widget 添加本地化?

我了解如何通过将 localizationsDelegates 和 supportedLocales 添加到 MaterialApp 小部件来为应用程序添加本地化。本地化我的应用程序工作正常。

我正在创建一个可以在其他 Flutter 应用程序中使用的 Flutter 包。包中的某些小部件需要具有本地化文本,例如某些错误消息和按钮标签。该包包含所有自己的本地化字符串。如何在没有 MaterialApp 的情况下本地化包中的字符串?

flutter

5
推荐指数
1
解决办法
107
查看次数

grep文件并将整行保存到变量中

我试图简单地在文件中grep行.如果该行中包含单词"status",我需要解析它并在for循环中使用它.问题是该行内有空格,所以我一次只能得到一个单词.这个循环实际上嵌套在另一个for循环中,它只读取我目录中的某些文件.我需要知道如何阅读整行,空格和一切.

    for STATUS in `grep status $FILE`
        do 
           #do stuff
        done
Run Code Online (Sandbox Code Playgroud)

unix grep

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

Android - 使用Builder Pattern创建片段?

我总是使用newInstance()模式创建片段并将我的参数传递给片段.这适用于一个或两个参数.我现在正在创建一个包含大约10个参数的片段,并且所有这些参数都是可选的.

我正在考虑使用Builder模式,类似于AlertDialog的工作方式.但是,我不确定实现它的最佳方法是什么,或者它是否是一个好主意.

这是我在思考的一个例子,但有更多的变量.

public class MyFragment extends Fragment {
    private String name;

    private static class Builder {
        private String name;

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public MyFragment build() {
            return new MyFragment(this);
        }
    }

    // NOT ALLOWED
    public MyFragment(Builder builder) {
        name = builder.name;
    }
    // Rest of the fragment...
}
Run Code Online (Sandbox Code Playgroud)

这个问题是片段必须有一个默认的构造函数,所以这不起作用.

有没有"正确"的方法来实现这一目标?

android builder-pattern android-fragments

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