小编vk2*_*239的帖子

第二次显示ViewPager时出现NullPointerException

我正在使用一个ViewPager片段,其中有两个片段作为孩子.这很好用,但是当我用ViewPager另一个片段替换片段并用片段替换这个片段时,ViewPager我的应用程序崩溃了以下内容NullPointerException:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
    at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:667)
    at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
    at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1319)
    at android.view.View.dispatchRestoreInstanceState(View.java:13756)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2888)
    at android.view.View.restoreHierarchyState(View.java:13734)
    at android.support.v4.app.Fragment.restoreViewState(Fragment.java:468)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1094)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5294)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Run Code Online (Sandbox Code Playgroud)

我的ViewPager片段由以下源代码组成,这些源代码在它们为空时实例化两个子片段.此外,ViewPagerAdapter实施是实例化并分配给ViewPager.

public class ConnectionPasswordViewPagerFragment extends Fragment
{
    private ViewPager vpConnectionPassword;
    private …
Run Code Online (Sandbox Code Playgroud)

java android nullpointerexception android-viewpager

16
推荐指数
1
解决办法
3440
查看次数

可以封装中间流操作而不会破坏管道吗?

使用Java 8 Streams,是否可以以某种方式封装和重用中间流操作,而不会破坏流管道?

考虑来自Java Tutorial on streams的这个例子:

double average = roster
    .stream()
    .filter(p -> p.getGender() == Person.Sex.MALE)
    .mapToInt(Person::getAge)
    .average()
    .getAsDouble();
Run Code Online (Sandbox Code Playgroud)

假设我需要在整个代码中的不同位置使用filter和mapToInt操作.我可能想尝试并封装该逻辑,以便可以重复使用,例如:

IntStream maleAges(Stream<Person> stream) {
    return stream
        .filter(p -> p.getGender() == Person.Sex.MALE)
        .mapToInt(Person::getAge)
}
Run Code Online (Sandbox Code Playgroud)

这很好,但要使用它我可能不得不弄乱流管道.例如,如果我想要名叫Bob的男性的平均年龄:

double averageBob =
    maleAges(roster
        .stream()
        .filter(p -> "Bob".equals(p.getName()))
    )
    .average()
    .getAsDouble();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?我正在考虑这些方面的事情:

double averageBob = roster
    .stream()
    .filter(p -> "Bob".equals(p.getName()))
    .apply(this::maleAges) // Doesn't compile
    .average()
    .getAsDouble();
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

7
推荐指数
2
解决办法
213
查看次数

AWK错误:尝试在标量上下文中使用数组

我正在学习AWK.这是一个简单的代码片段,我试图将一个字符串拆分成一个数组并迭代它.

BEGIN {
  split("a,b,c", a, ",");

  for(i = 1; i <= length(a); i++) {
    print a[i];
  }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时,我收到以下错误:

awk:awk.txt:4:致命:尝试在标量上下文中使用数组"a"

但是,如果我将for语句更改为for (i in a)它就可以了.在进一步试图通过谷歌搜索来理解这意味着什么,我看到许多论坛(例如:[1])谈论awk错误.如果这里的AWK大师可以帮助我理解错误信息的含义,那将是很棒的.

awk

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

do ... while()重复最后一个字符串两次

以下代码将提供的字符串/行拆分为字符.为什么循环重复最后一次字符串两次?怎么解决?

#include <iostream>
#include <vector>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string main, sub;
    cout << "Enter string: ";
    getline(cin, main);
    istringstream iss(main);
    do
    {
        iss >> sub;
        cout << sub << endl;
        vector<char> v(sub.begin(), sub.end());
        for(int i = 0; i < v.size(); i++)
         {
             cout << v[i] << endl;
         }
    } while (iss);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输入:

你好,世界

期望的输出

你好
^ h
è


Ø
世界
w ^
ō
[R

d

实际产量:

你好 …

c++ do-while istringstream

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

"并发应用程序中LinkedBlockingQueue的可预测性能不太可能"是什么意思?

对于我正在处理的日志记录功能,我需要有一个处理线程,当计数达到或超过一定数量时,它将等待作业并批量执行.由于这是生产者消费者问题的标准情况,我打算使用BlockingQueues.我有许多生产者使用add()方法向队列添加条目,而只有一个使用take()在队列中等待的消费者线程.

LinkedBlockingQueue似乎是一个不错的选择,因为它没有任何大小限制,但是我很困惑从文档中读取这个.

链接队列通常具有比基于阵列的队列更高的吞吐量,但在大多数并发应用程序中具有较低的可预测性能.

没有清楚地解释这个陈述的含义.有人可以点亮吗?这是否意味着LinkedBlockingQueue不是线程安全的?你们有没有遇到任何使用LinkedBlockingQueue的问题.

由于生产者的数量要多得多,因此总会有一种情况我可以遇到队列被大量条目淹没的情况.如果我改为使用ArrayBlockingQueue,它将队列的大小作为构造函数中的参数,我总是会遇到容量完全相关的异常.为了避免这种情况,我不知道如何确定我应该用实例化ArrayBlockingQueue的大小.您是否必须使用ArrayBlockingQueue解决类似的问题?

java concurrency producer-consumer blockingqueue

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

删除目录及其中的所有子目录

我写了一个函数,它应该删除一个目录及其中的所有文件和文件夹,但它有一些麻烦.对于我的目标,我为实验制作了特殊目录.此目录存储一些文件和一个文件夹.此文件夹(子目录)还包含1或2个文件.我的函数成功删除了子目录及其中的所有文件.并且主目录中的所有文件也会成功删除.但是当函数开始删除主目录时 - 它失败了.似乎rmdir返回不是0,我不知道为什么,导致子目录删除很好.

作为一个参数,它需要像"D:\new \"这样的字符串.

其中new是主目录,应该删除其中的所有内容. 这是这个函数的代码:

 void OperationsWithDirectories::RemovingCycle(string _path)
    {
        string wayToFile;           // string to hold the path to the directory without mask 
        string deletedFile;         // string which would hold the way to deleting file
        wayToFile = _path;

        _path += "*.*";             // add a mask to the _path string


        _finddata_t* fileinfo = new _finddata_t;

        long done = _findfirst(_path.c_str(), fileinfo);

        int IsContinue = done;

while (IsContinue != -1)
{
    deletedFile = wayToFile + fileinfo->name;

    if (fileinfo->attrib == _A_SUBDIR)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c++ windows file-io

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

AWK意外的令牌错误

我想出了下面的脚本来列出超过10000000微秒的呼叫(我们的日志中的ServiceDuration以微秒记录的值),从服务器日志文件中存储所有来到服务的呼叫.

servicedurationlimit.awk

#!/bin/sh
dir1=$1/*.log

# for each log file in the input dir
for file1 in $dir1
do
        echo $file1":"
        awk  '/#BeginLogEntry|ServiceDuration/ {
                #get slow running service's information
                if ($1 == "#BeginLogEntry")
                {
                        split($0, a, "\t");
                        servinfo=a[3]" ServiceAt:"a[2];
                } else {
                        getline;
                        if ($0 > 10000000)
                        {
                                print servinfo", ServDur:"$0
                        }
                }
        }' $file1
done
Run Code Online (Sandbox Code Playgroud)

在运行脚本时,我得到以下错误:

./servicedurationlimit.awk /path/to/server/logs/
./servicedurationlimit.awk: line 12: syntax error near unexpected token `$0,'
./servicedurationlimit.awk: line 12: `                  split($0, a, "\t"); '
Run Code Online (Sandbox Code Playgroud)

你能帮我理解可能导致这种情况的原因吗?

下面是示例日志文件(有2个日志条目):

#BeginLogEntry  04.13 20:11:11.671 …
Run Code Online (Sandbox Code Playgroud)

bash awk gawk

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