Java 通过if语句NullPointerException初始化值
我正试图在片段之间传递一个值,就像我在上一篇文章中所说的(同样的问题): 我对传递值没有问题。但是如果我添加if语句来赋值,我得到的是NPE 此代码没有问题:Java 通过if语句NullPointerException初始化值,java,android,android-fragments,android-spinner,Java,Android,Android Fragments,Android Spinner,我正试图在片段之间传递一个值,就像我在上一篇文章中所说的(同样的问题): 我对传递值没有问题。但是如果我添加if语句来赋值,我得到的是NPE 此代码没有问题: public int getInt() { int a = 5; return a; } public int getInt() { int a; String s1 = spinner1.getSelectedItem().toString();
public int getInt() {
int a = 5;
return a;
}
public int getInt() {
int a;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public int getInt() {
int a = 0;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public class FragA extends Fragment {
String s1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga, container, false);
Spinner spinner1 = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
spinner1.setAdapter(adapter_a);
return view;
}
public int getInt() {
int a = 0;
s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="30sp"
android:textSize="20sp"
android:gravity="center"
android:text="@string/text_a" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
我在说“局部变量a可能尚未初始化”时出错,代码如下:
public int getInt() {
int a = 5;
return a;
}
public int getInt() {
int a;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public int getInt() {
int a = 0;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public class FragA extends Fragment {
String s1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga, container, false);
Spinner spinner1 = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
spinner1.setAdapter(adapter_a);
return view;
}
public int getInt() {
int a = 0;
s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="30sp"
android:textSize="20sp"
android:gravity="center"
android:text="@string/text_a" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
但是当我尝试初始化它时,我在“String s1=spinner1.getSelectedItem().toString();”处得到了NPE:
public int getInt() {
int a = 5;
return a;
}
public int getInt() {
int a;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public int getInt() {
int a = 0;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public class FragA extends Fragment {
String s1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga, container, false);
Spinner spinner1 = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
spinner1.setAdapter(adapter_a);
return view;
}
public int getInt() {
int a = 0;
s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="30sp"
android:textSize="20sp"
android:gravity="center"
android:text="@string/text_a" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
这就是我得到错误的地方。在我的FragA片段中:
public int getInt() {
int a = 5;
return a;
}
public int getInt() {
int a;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public int getInt() {
int a = 0;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public class FragA extends Fragment {
String s1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga, container, false);
Spinner spinner1 = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
spinner1.setAdapter(adapter_a);
return view;
}
public int getInt() {
int a = 0;
s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="30sp"
android:textSize="20sp"
android:gravity="center"
android:text="@string/text_a" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
公共类FragA扩展片段{
字符串s1;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fraga,容器,假);
Spinner spinner1=(Spinner)view.findViewById(R.id.spinner1);
ArrayAdapter_a=ArrayAdapter.createFromResource(getActivity(),R.array.spinner1,android.R.layout.simple_微调器_项);
喷丝头1.固定接头(接头a);
返回视图;
}
公共int getInt(){
int a=0;
s1=喷丝头1.getSelectedItem().toString();
如果(s1等于(“你好”)){
a=5;
}
返回a;
}
}
fraga-xml:
public int getInt() {
int a = 5;
return a;
}
public int getInt() {
int a;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public int getInt() {
int a = 0;
String s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
public class FragA extends Fragment {
String s1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraga, container, false);
Spinner spinner1 = (Spinner) view.findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
spinner1.setAdapter(adapter_a);
return view;
}
public int getInt() {
int a = 0;
s1 = spinner1.getSelectedItem().toString();
if(s1.equals("Hello")) {
a = 5;
}
return a;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="30sp"
android:textSize="20sp"
android:gravity="center"
android:text="@string/text_a" />
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
解决这个问题的方法是什么?空指针异常与
int a
变量及其初始化无关int
不是引用类型,不能为null
它要么是
spinner1
为null(确保其初始化正确),要么是spinner1.getSelectedItem()
返回null(未选择任何内容)。您不能在方法中保留未初始化的局部变量。因此,您需要始终初始化它们NPE被抛出是因为spinner1
或spinner1。getSelectedItem()
为null请检查您的spinner1;
它初始化了吗
否则你的代码就没问题了 Spinner spinner1=(Spinner)视图.findViewById(R.id.spinner1)代码>在onCreateView
中声明和初始化。成为onCreateView的本地对象
spinner.setOnItemSelectedListener(this);
使用
也不确定在哪里调用getInt
。可能是您试图在微调器初始化之前调用getInt
编辑:
查看评论中的链接
零碎
public interface OnSpinnerSelectedListener {
public void onValueSelected(String position);
}
然后
然后覆盖onAttach并初始化mCallback
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnSpinnerSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnSpinnerSelectedListener");
}
}
然后在onCreateView中
spinner.setOnItemSelectedListener(this);
然后
现在,当您在微调器中选择“值”时
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
String s1= spinner1.getSelectedItem().toString();
mCallback.onValueSelected(s1);
}
然后
一旦在“活动”中选择了值,请将该值传递给另一个片段
参考:
检查您是如何初始化spinneer1的。在这里发布代码和堆栈跟踪,希望您能通过微调器获得NPE。上一个代码中的变量a没有问题。spinner1
或spinner1.getSelectedItem()
为空。请核实。你什么时候调用getInt()
方法?你在哪里初始化了你的微调器?是的,我的微调器得到了一个NPE。我已经在我的微调器中选择了“Hello”,但我总是得到NPE。是的,我的微调器得到NPE。我已经在微调器中选择了“Hello”,但我总是得到NPE。请确保它已正确初始化。您选择“Hello”的微调器引用可能不是由“spinner1”引用的。我现在已更新并发布了微调器的代码。我是否正确初始化了它?请将此行“Spinner spinner1=(Spinner)view.findViewById(R.id.spinner1);”在使用“spinner1”参考之前的所有方法中。您在getInt()方法中错过了这一点。我现在已经更新并发布了微调器的代码。我是否正确初始化了它?您必须在类上声明spinner1
变量,以便它在所有方法中都可用。我现在已经更新并发布了我的spinner的代码。全局声明spinner1。我仍然在spinner上获得NPE。我们可以去我以前的职位吗?我也把它贴在那里,我叫它getInt@user2942600,你叫它getInt
。我在MainActivity中没有看到调用getInt
。@user2942600所有片段到片段的通信都应该通过托管活动进行。请仔细阅读文件是的,我做了。你能查一下我以前的代码,我发布的链接,我在哪里得到NPE