我正在使用一个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 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) 我正在学习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大师可以帮助我理解错误信息的含义,那将是很棒的.
以下代码将提供的字符串/行拆分为字符.为什么循环重复最后一次字符串两次?怎么解决?
#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
你好 …
对于我正在处理的日志记录功能,我需要有一个处理线程,当计数达到或超过一定数量时,它将等待作业并批量执行.由于这是生产者消费者问题的标准情况,我打算使用BlockingQueues.我有许多生产者使用add()方法向队列添加条目,而只有一个使用take()在队列中等待的消费者线程.
LinkedBlockingQueue似乎是一个不错的选择,因为它没有任何大小限制,但是我很困惑从文档中读取这个.
链接队列通常具有比基于阵列的队列更高的吞吐量,但在大多数并发应用程序中具有较低的可预测性能.
没有清楚地解释这个陈述的含义.有人可以点亮吗?这是否意味着LinkedBlockingQueue不是线程安全的?你们有没有遇到任何使用LinkedBlockingQueue的问题.
由于生产者的数量要多得多,因此总会有一种情况我可以遇到队列被大量条目淹没的情况.如果我改为使用ArrayBlockingQueue,它将队列的大小作为构造函数中的参数,我总是会遇到容量完全相关的异常.为了避免这种情况,我不知道如何确定我应该用实例化ArrayBlockingQueue的大小.您是否必须使用ArrayBlockingQueue解决类似的问题?
我写了一个函数,它应该删除一个目录及其中的所有文件和文件夹,但它有一些麻烦.对于我的目标,我为实验制作了特殊目录.此目录存储一些文件和一个文件夹.此文件夹(子目录)还包含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) 我想出了下面的脚本来列出超过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)