使用 findViewById 在片段中的 Textview 上的 Bundle 中设置文本时出现 NullPointerException class
NullPointerException when using findViewById to set text from a Bundle on Textview in a Fragment class
我在各种站点和堆栈溢出问题上研究了这个问题,但找不到解决我问题的解决方案。我已经为这个问题苦苦挣扎了一段时间,但就是无法解决..
我有两个活动和一个片段。
第一个 Activity(概述)应该在 t 的 onCreate 中添加片段,其文本与默认文本不同。第二个 Activity (AddCity) 使用 Intent 和 Bundle 将此文本数据发送到 Overview。在概述中,数据可用,我使用 myfragment.setArguments(bundle)
将其发送到片段,但是当我尝试使用 Bundle bundle = getArguments()
访问 onCreateView 中的 Textview 时,出现以下错误:
FATAL EXCEPTION: main
Process: com.myapp.www, PID: 19690
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
异常发生在 StatusFragment 中的以下行:
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
我已经尝试过使用自己的构造函数的方法,但据我所知,除了片段中的空默认构造函数之外,你应该避免使用自定义构造函数,但它也没有用。
我的 class 是:
概览:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.myicon);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
if(getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
StatusFragment newFragment = new StatusFragment();
newFragment.setArguments(extras);
mSectionsPagerAdapter.addFragment(newFragment, extras.getString("city"));
}else{
Log.w("Overview-Bundle", "No Bundle Data");
}
mViewPager.setAdapter(mSectionsPagerAdapter);
}
添加城市:
这个 class 使用一种方法来接收 JSON 字符串并解析它以获取我需要发送到片段的数据。这很好用,所以我只给出了我放在 Intent 中的相关代码。 obj 是 JSON 对象。 (如果您需要更多代码,请告诉我)
Intent i = new Intent(AddCity.this, Overview.class);
Bundle bundle = new Bundle();
bundle.putString("city", obj.getString("user_city"));
bundle.putString("country", obj.getString("user_ country"));
i.putExtras(bundle);
startActivity(i);
状态片段:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_for_overview, null);
setUI(view);
return view;
}
public void setUI(View view){
if(getArguments() != null) {
Bundle bundle = getArguments();
String city = bundle.getString("city");
String country = bundle.getString("country");
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
TextView countryText = (TextView) getView().findViewById(R.id.country_name);
cityText.setText(city);
countryText.setText(country);
}else{
Log.w("Arguments", "no arguments");
}
}
我将不胜感激每一个答案。让我知道我是否应该 post 更多代码。
您在 onCreateView()
返回之前调用 getView()
,因此是空指针。在你的情况下,你可以简单地调用:
public void setUI(View view){
...
TextView cityText = (TextView) view.findViewById(R.id.city_name);
...
}
我在各种站点和堆栈溢出问题上研究了这个问题,但找不到解决我问题的解决方案。我已经为这个问题苦苦挣扎了一段时间,但就是无法解决..
我有两个活动和一个片段。
第一个 Activity(概述)应该在 t 的 onCreate 中添加片段,其文本与默认文本不同。第二个 Activity (AddCity) 使用 Intent 和 Bundle 将此文本数据发送到 Overview。在概述中,数据可用,我使用 myfragment.setArguments(bundle)
将其发送到片段,但是当我尝试使用 Bundle bundle = getArguments()
访问 onCreateView 中的 Textview 时,出现以下错误:
FATAL EXCEPTION: main
Process: com.myapp.www, PID: 19690
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
异常发生在 StatusFragment 中的以下行:
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
我已经尝试过使用自己的构造函数的方法,但据我所知,除了片段中的空默认构造函数之外,你应该避免使用自定义构造函数,但它也没有用。
我的 class 是:
概览:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.myicon);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
if(getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
StatusFragment newFragment = new StatusFragment();
newFragment.setArguments(extras);
mSectionsPagerAdapter.addFragment(newFragment, extras.getString("city"));
}else{
Log.w("Overview-Bundle", "No Bundle Data");
}
mViewPager.setAdapter(mSectionsPagerAdapter);
}
添加城市:
这个 class 使用一种方法来接收 JSON 字符串并解析它以获取我需要发送到片段的数据。这很好用,所以我只给出了我放在 Intent 中的相关代码。 obj 是 JSON 对象。 (如果您需要更多代码,请告诉我)
Intent i = new Intent(AddCity.this, Overview.class);
Bundle bundle = new Bundle();
bundle.putString("city", obj.getString("user_city"));
bundle.putString("country", obj.getString("user_ country"));
i.putExtras(bundle);
startActivity(i);
状态片段:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_for_overview, null);
setUI(view);
return view;
}
public void setUI(View view){
if(getArguments() != null) {
Bundle bundle = getArguments();
String city = bundle.getString("city");
String country = bundle.getString("country");
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
TextView countryText = (TextView) getView().findViewById(R.id.country_name);
cityText.setText(city);
countryText.setText(country);
}else{
Log.w("Arguments", "no arguments");
}
}
我将不胜感激每一个答案。让我知道我是否应该 post 更多代码。
您在 onCreateView()
返回之前调用 getView()
,因此是空指针。在你的情况下,你可以简单地调用:
public void setUI(View view){
...
TextView cityText = (TextView) view.findViewById(R.id.city_name);
...
}