我正在使用Butter Knife绑定我的应用片段中的视图,但是当应用没有互联网连接但在线时工作正常时,我得到零点异常。不知道为什么会这样发生..任何人都有任何想法让我知道。提前谢谢..
这就是我在代码中使用它的方式..
public class MyFragment extends Fragment {
@BindView(R.id.myTextView)
TextView myTextView;
public MyFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Home");
getInfo();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_about_us, container, false);
ButterKnife.bind(this, view);
return view;
}
private void getInfo () {
if(isOnline(getActivity())) {
// Do some thing
myTextView.setText("Hi");
} else {
// do some thing
myTextView.setText("Hello");
}
}
}
日志:
FATAL EXCEPTION: main
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at butterknife.internal.Utils.findRequiredView(Utils.java:87)
at butterknife.internal.Utils.findRequiredViewAsType(Utils.java:104)
答案 0 :(得分:3)
非活动绑定
您还可以通过提供自己的视图根来对任意对象执行绑定。
public class FancyFragment extends Fragment {
@BindView(R.id.button1) Button button1;
@BindView(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
}
您正在调用getInfo();
中的onCreate()
,而onCreateView()
myTextView.setText("Hello");
片段生命周期
所以你的if(isOnline(getActivity()))
会返回空视图
关于在onLine模式下工作:
fragment
此方法会消耗一些时间,同时视图会在ButterKnife.bind(this, view);
中创建,setOffscreenPageLimit()
也会被执行。
修改强>
在viewpager中使用mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);
,以避免每次都重新创建片段。
JSONParser parser = new JSONParser();
JSONObject infoJSON = (JSONObject) parser.parse(new FileReader(new File("resources/abc.json")));
for(int j=0; infoJSON.size(); j++){
for(int i=0 ;i< infoJSON.get(j).size(); i++){
JSONObject innerJSON = (JSONObject) infoJSON.get(j);
System.out.println(innerJSON.keySet());
}
}
答案 1 :(得分:1)
您正在从getInfo()
拨打onCreate()
,但是butterknife正在onCreateView()
执行绑定,系统在{/ strong> onCreate()
之后调用。因此,当您在myTextView
中访问getInfo()
时,getInfo()
未初始化。
在Butterknife.bind()
之后将<input id="contractor-submit" type="submit" value="Send" onmouseup="formSubmit12(14)" style="display:none;">
移动到onCreateView()上,它应该可以正常工作。