我试图让我的片段正常工作,但我无法完成任何我想做的事情。
我得到的错误是:
java.lang.NullPointerException:尝试调用虚方法' void android.widget.TextView.setText(java.lang.CharSequence)'在空对象引用上
以下是代码:
function registerUser() {
var username = $("#userName").val();
$("#userName").val("");
var password = $("#password1").val();
$("#password1").val("");
$("#password2").val("");
var firstname = $("#firstName").val();
$("#firstName").val("");
var secondname = $("#secondName").val();
$("#secondName").val("");
var email = $("#email").val();
$("#email").val("");
var result = false;
$.post('../php/register.php', {'username':username, 'password':password, 'email':email, 'firstname':firstname, 'lastname':secondname}, function(data) {
if(data == 1) {
result = true;
}
else {
result = false;
}
});
return result;
}
不知道它为什么不起作用。我正在测试这个类只是为了查看文本是否会在textview上更改。我正在使用正确的id,因为我检查了10次,但我认为问题是因为textview one是一个null对象。但为什么它没有找到id?
答案 0 :(得分:12)
onCreate()
之前调用 onCreateView()
,因此您无法在onCreate()
中访问它。
<强>解决方案:强> 移动
one = (TextView) getActivity().findViewById(R.id.one);
改为onViewCreated()
。
请参阅下面的图片,了解fragment lifecycle。
的概述新代码段如下所示:
public class FragmentOne extends Fragment {
private TextView one;
public FragmentOne() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment1, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
one = (TextView) getActivity().findViewById(R.id.one);
// Displaying the user details on the screen
one.setText("kjhbguhjg");
}
}
答案 1 :(得分:2)
或者。而不是重写
public void onViewCreated(View view, Bundle savedInstanceState)
您可以稍微更改onCreateView,使其看起来像
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment1, container, false)
one = (TextView) rootView.findViewById(R.id.one)
return rootView;
}