Androidx 空指针异常错误,Invoke 方法
Androidx Null Pointer Exception Error, Invoke method
我收到这个错误。这是我的logcat
。我不知道到底出了什么问题。我收到撤销错误,或者我们可以说 NullExceptionError
。我尝试了一切,但没有锻炼。
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
at com.nazeefawann.truemate.Profile.AccountSettingActivity.setViewPager(AccountSettingActivity.java:52)
at com.nazeefawann.truemate.Profile.AccountSettingActivity.onItemClick(AccountSettingActivity.java:71)
at android.widget.AdapterView.performItemClick(AdapterView.java:303)
at android.widget.AbsListView.performItemClick(AbsListView.java:1151)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3065)
at android.widget.AbsListView.run(AbsListView.java:3878)
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:5538)
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:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我正在制作一个应用程序,我想在设置 activity 中制作片段而不是单独的片段,这样我可以轻松添加更多功能。我已经创建了 2 片段,但是当我点击它时 return 返回到之前的 activity。不知道为什么
public void setViewPager(int fragmentNumbers){
mRelativeLayout.setVisibility(View.GONE);
Log.d(TAG,"setViewPager: navigating to fragment #:" + fragmentNumbers);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(fragmentNumbers);
这是我的 AccountSettingActivity
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
public class AccountSettingActivity extends AppCompatActivity {
private Context mContext;
private SectionStatePagerAdapter pagerAdapter;
private ViewPager viewPager;
private RelativeLayout mRelativeLayout;
private String TAG;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewPager = (ViewPager) findViewById(R.id.container);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
mContext = AccountSettingActivity.this;
setContentView(R.layout.activity_accountsettings);
setupSettingList();
setupFragment();
ImageView backArrow = (ImageView) findViewById(R.id.backArrow);
backArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
private void setupFragment(){
pagerAdapter = new SectionStatePagerAdapter(getSupportFragmentManager());
pagerAdapter.addFragment(new EditProfileFragment(), getString(R.string.edit_profile_fragment)); //fragment 0
pagerAdapter.addFragment(new SignOutFragment(), getString(R.string.sign_out_fragment)); //fragment 1
}
public void setViewPager(int fragmentNumbers){
mRelativeLayout.setVisibility(View.GONE);
Log.d(TAG,"setViewPager: navigating to fragment #:" + fragmentNumbers);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(fragmentNumbers);
}
private void setupSettingList(){
ListView listView = (ListView) findViewById(R.id.lvAccountSettings);
ArrayList<String> options = new ArrayList<>();
options.add(getString(R.string.edit_profile_fragment)); //fragment 0
options.add(getString(R.string.sign_out_fragment)); //fragement 1
ArrayAdapter adapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, options);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setViewPager(position);
}
});
}
}
这是我的 xml 文件
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_center_viewpager"></include>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relaytiveLayout11">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relLayout2">
<include layout="@layout/snippet_top_settingtoolbar"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relLayout3"
android:layout_below="@id/relLayout2"
android:layout_marginBottom="50dp">
<include layout="@layout/layout_center_accountsettiings"/>
</RelativeLayout>
</RelativeLayout>
我正在使用 android x 库,我可能因为这个库
而出错
我无法在这段代码中找到错误我做了很多实验但没有成功我相信你们中的一些人会帮助我
提前致谢
不要在调用 setContentView
之前调用任何 findViewById
,即 mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
。确保在访问任何视图之前调用它。
像这样重新定位您的代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = AccountSettingActivity.this;
setContentView(R.layout.activity_accountsettings);
viewPager = (ViewPager) findViewById(R.id.container);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
setupSettingList();
setupFragment();
ImageView backArrow = (ImageView) findViewById(R.id.backArrow);
backArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
我收到这个错误。这是我的logcat
。我不知道到底出了什么问题。我收到撤销错误,或者我们可以说 NullExceptionError
。我尝试了一切,但没有锻炼。
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference
at com.nazeefawann.truemate.Profile.AccountSettingActivity.setViewPager(AccountSettingActivity.java:52)
at com.nazeefawann.truemate.Profile.AccountSettingActivity.onItemClick(AccountSettingActivity.java:71)
at android.widget.AdapterView.performItemClick(AdapterView.java:303)
at android.widget.AbsListView.performItemClick(AbsListView.java:1151)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3065)
at android.widget.AbsListView.run(AbsListView.java:3878)
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:5538)
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:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我正在制作一个应用程序,我想在设置 activity 中制作片段而不是单独的片段,这样我可以轻松添加更多功能。我已经创建了 2 片段,但是当我点击它时 return 返回到之前的 activity。不知道为什么
public void setViewPager(int fragmentNumbers){
mRelativeLayout.setVisibility(View.GONE);
Log.d(TAG,"setViewPager: navigating to fragment #:" + fragmentNumbers);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(fragmentNumbers);
这是我的 AccountSettingActivity
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
public class AccountSettingActivity extends AppCompatActivity {
private Context mContext;
private SectionStatePagerAdapter pagerAdapter;
private ViewPager viewPager;
private RelativeLayout mRelativeLayout;
private String TAG;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewPager = (ViewPager) findViewById(R.id.container);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
mContext = AccountSettingActivity.this;
setContentView(R.layout.activity_accountsettings);
setupSettingList();
setupFragment();
ImageView backArrow = (ImageView) findViewById(R.id.backArrow);
backArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
private void setupFragment(){
pagerAdapter = new SectionStatePagerAdapter(getSupportFragmentManager());
pagerAdapter.addFragment(new EditProfileFragment(), getString(R.string.edit_profile_fragment)); //fragment 0
pagerAdapter.addFragment(new SignOutFragment(), getString(R.string.sign_out_fragment)); //fragment 1
}
public void setViewPager(int fragmentNumbers){
mRelativeLayout.setVisibility(View.GONE);
Log.d(TAG,"setViewPager: navigating to fragment #:" + fragmentNumbers);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(fragmentNumbers);
}
private void setupSettingList(){
ListView listView = (ListView) findViewById(R.id.lvAccountSettings);
ArrayList<String> options = new ArrayList<>();
options.add(getString(R.string.edit_profile_fragment)); //fragment 0
options.add(getString(R.string.sign_out_fragment)); //fragement 1
ArrayAdapter adapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_1, options);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setViewPager(position);
}
});
}
}
这是我的 xml 文件
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_center_viewpager"></include>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relaytiveLayout11">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relLayout2">
<include layout="@layout/snippet_top_settingtoolbar"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relLayout3"
android:layout_below="@id/relLayout2"
android:layout_marginBottom="50dp">
<include layout="@layout/layout_center_accountsettiings"/>
</RelativeLayout>
</RelativeLayout>
我正在使用 android x 库,我可能因为这个库
而出错我无法在这段代码中找到错误我做了很多实验但没有成功我相信你们中的一些人会帮助我 提前致谢
不要在调用 setContentView
之前调用任何 findViewById
,即 mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
。确保在访问任何视图之前调用它。
像这样重新定位您的代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = AccountSettingActivity.this;
setContentView(R.layout.activity_accountsettings);
viewPager = (ViewPager) findViewById(R.id.container);
mRelativeLayout = (RelativeLayout) findViewById(R.id.relaytiveLayout11);
setupSettingList();
setupFragment();
ImageView backArrow = (ImageView) findViewById(R.id.backArrow);
backArrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}