Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复Android中片段中未找到的视图_Java_Android_Android Fragments - Fatal编程技术网

Java 如何修复Android中片段中未找到的视图

Java 如何修复Android中片段中未找到的视图,java,android,android-fragments,Java,Android,Android Fragments,在我的应用程序中,我想从服务器获取一些数据,并将其显示到RecyclerView中,为此,我应该使用Fragment 我希望当用户看到片段时调用我的API调用方法。但当使用下面的代码时,显示强制关闭错误 代码: @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser){

在我的应用程序中,我想从服务器获取一些数据,并将其显示到
RecyclerView
中,为此,我应该使用
Fragment

我希望当用户看到
片段时
调用我的API调用方法。但当使用下面的代码时,显示强制关闭错误

代码:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        getData(getActivity());
    }
}
public class NotificationAllFrag extends Fragment {

    @BindView(R.id.mainNotification_recyclerView)
    RecyclerView mainNotification_recyclerView;
    @BindView(R.id.mainNotification_noNotificationTxt)
    TextView mainNotification_noNotificationTxt;
    @BindView(R.id.mainNotification_progressBar)
    ProgressBar mainNotification_progressBar;
    @BindView(R.id.newsPageLoadLay)
    RelativeLayout newsPageLoadLay;
    private Context context;
    private List<Datum> model = new ArrayList<>();
    public static NotificationListAdapter notificationListAdapter;
    private SharedPrefrencesHandler prefrencesHandler;
    private String token = "";
    private LinearLayoutManager layoutManager;

    public NotificationAllFrag() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_notification_all, container, false);

        //Initialize
        ButterKnife.bind(this, view);
        context = getActivity();
        notificationListAdapter = new NotificationListAdapter(context, model);
        prefrencesHandler = new SharedPrefrencesHandler(context);
        layoutManager = new LinearLayoutManager(context);
        //RecyclerView
        mainNotification_recyclerView.setLayoutManager(layoutManager);
        mainNotification_recyclerView.setHasFixedSize(true);

        //Get token
        token = prefrencesHandler.getFromShared(SharedPrefrencesKeys.TOKEN.name());
        // Lazy loader
        newsPageLoadLay.setVisibility(View.GONE);
        mainNotification_recyclerView.setOnScrollListener(new EndlessRecyclerLinearPage1(layoutManager) {
            @Override
            public void onLoadMore(int current_page) {
                ExploreSendData sendData = new ExploreSendData();
                sendData.setPageIndex(current_page);
                sendData.setPageSize(10);
                sendData.setShowFollows(true);
                sendData.setShowMovies(false);
                sendData.setShowNews(false);
                sendData.setShowReplies(true);
                sendData.setShowSeries(false);
                sendData.setShowSuggestions(true);

                newsPageLoadLay.setVisibility(View.VISIBLE);

                InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
                Call<ExploreResponse> call = api.getExplore(token, sendData);

                call.enqueue(new Callback<ExploreResponse>() {
                    @Override
                    public void onResponse(Call<ExploreResponse> call, Response<ExploreResponse> response) {
                        if (response.body().getData() != null && response.body().getStatusCode() != 401
                                && response.body().getStatusCode() != 402) {
                            if (response.body().getData().size() > 0) {
                                notificationListAdapter.addNewItem(response.body().getData());
                                //Gone no explore
                                newsPageLoadLay.setVisibility(View.GONE);
                            }
                        } else {
                            prefrencesHandler.remove(SharedPrefrencesKeys.TOKEN.name());
                            startActivity(new Intent(context, LoginActivity.class));
                        }

                        newsPageLoadLay.setVisibility(View.GONE);
                    }

                    @Override
                    public void onFailure(Call<ExploreResponse> call, Throwable t) {
                        newsPageLoadLay.setVisibility(View.GONE);
                    }
                });
            }
        });

        getData(getActivity());

        return view;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser){
            getData(getActivity());
        }
    }

    public void getData(final Context context) {
        ExploreSendData sendData = new ExploreSendData();
        sendData.setPageIndex(1);
        sendData.setPageSize(10);
        sendData.setShowFollows(true);
        sendData.setShowMovies(false);
        sendData.setShowNews(false);
        sendData.setShowReplies(true);
        sendData.setShowSeries(false);
        sendData.setShowSuggestions(true);

        mainNotification_progressBar.setVisibility(View.VISIBLE);

        InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
        Call<ExploreResponse> call = api.getExplore(
                new SharedPrefrencesHandler(context).getFromShared(SharedPrefrencesKeys.TOKEN.name()), sendData);

        call.enqueue(new Callback<ExploreResponse>() {
            @Override
            public void onResponse(Call<ExploreResponse> call, Response<ExploreResponse> response) {
                if (response.body().getData() != null && response.body().getStatusCode() != 401
                        && response.body().getStatusCode() != 402) {
                    if (response.body().getData().size() > 0) {
                        model.clear();
                        model.addAll(response.body().getData());
                        notificationListAdapter.notifyDataSetChanged();
                        mainNotification_recyclerView.setAdapter(notificationListAdapter);
                        //Gone no explore
                        mainNotification_noNotificationTxt.setVisibility(View.GONE);

                    } else {
                        mainNotification_noNotificationTxt.setVisibility(View.VISIBLE);
                        mainNotification_recyclerView.setVisibility(View.GONE);
                    }
                } else {
                    prefrencesHandler.remove(SharedPrefrencesKeys.TOKEN.name());
                    startActivity(new Intent(context, LoginActivity.class));
                }

                mainNotification_progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onFailure(Call<ExploreResponse> call, Throwable t) {
                mainNotification_progressBar.setVisibility(View.GONE);
            }
        });
    }
错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference
    at com.app.test.Fragments.MainNotificationFrags.NotificationAllFrag.getData(NotificationAllFrag.java:157)
    at com.app.test.Fragments.MainNotificationFrags.NotificationAllFrag.setUserVisibleHint(NotificationAllFrag.java:142)
    at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(FragmentStatePagerAdapter.java:157)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1266)
    at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
    at android.view.View.measure(View.java:17496)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
    at android.view.View.measure(View.java:17496)
    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1658)
    at android.view.View.measure(View.java:17496)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464)
    at android.view.View.measure(View.java:17496)
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1081)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5466)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5466)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5466)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5466)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1438)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:724)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:615)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5466)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2636)
    at android.view.View.measure(View.java:17496)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2031)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1193)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1400)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1078)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5875)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
    at android.view.Choreographer.doCallbacks(Choreographer.java:580)
    at android.view.Choreographer.doFrame(Choreographer.java:550)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
    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:5349)
    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:908)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
片段完整代码:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        getData(getActivity());
    }
}
public class NotificationAllFrag extends Fragment {

    @BindView(R.id.mainNotification_recyclerView)
    RecyclerView mainNotification_recyclerView;
    @BindView(R.id.mainNotification_noNotificationTxt)
    TextView mainNotification_noNotificationTxt;
    @BindView(R.id.mainNotification_progressBar)
    ProgressBar mainNotification_progressBar;
    @BindView(R.id.newsPageLoadLay)
    RelativeLayout newsPageLoadLay;
    private Context context;
    private List<Datum> model = new ArrayList<>();
    public static NotificationListAdapter notificationListAdapter;
    private SharedPrefrencesHandler prefrencesHandler;
    private String token = "";
    private LinearLayoutManager layoutManager;

    public NotificationAllFrag() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_notification_all, container, false);

        //Initialize
        ButterKnife.bind(this, view);
        context = getActivity();
        notificationListAdapter = new NotificationListAdapter(context, model);
        prefrencesHandler = new SharedPrefrencesHandler(context);
        layoutManager = new LinearLayoutManager(context);
        //RecyclerView
        mainNotification_recyclerView.setLayoutManager(layoutManager);
        mainNotification_recyclerView.setHasFixedSize(true);

        //Get token
        token = prefrencesHandler.getFromShared(SharedPrefrencesKeys.TOKEN.name());
        // Lazy loader
        newsPageLoadLay.setVisibility(View.GONE);
        mainNotification_recyclerView.setOnScrollListener(new EndlessRecyclerLinearPage1(layoutManager) {
            @Override
            public void onLoadMore(int current_page) {
                ExploreSendData sendData = new ExploreSendData();
                sendData.setPageIndex(current_page);
                sendData.setPageSize(10);
                sendData.setShowFollows(true);
                sendData.setShowMovies(false);
                sendData.setShowNews(false);
                sendData.setShowReplies(true);
                sendData.setShowSeries(false);
                sendData.setShowSuggestions(true);

                newsPageLoadLay.setVisibility(View.VISIBLE);

                InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
                Call<ExploreResponse> call = api.getExplore(token, sendData);

                call.enqueue(new Callback<ExploreResponse>() {
                    @Override
                    public void onResponse(Call<ExploreResponse> call, Response<ExploreResponse> response) {
                        if (response.body().getData() != null && response.body().getStatusCode() != 401
                                && response.body().getStatusCode() != 402) {
                            if (response.body().getData().size() > 0) {
                                notificationListAdapter.addNewItem(response.body().getData());
                                //Gone no explore
                                newsPageLoadLay.setVisibility(View.GONE);
                            }
                        } else {
                            prefrencesHandler.remove(SharedPrefrencesKeys.TOKEN.name());
                            startActivity(new Intent(context, LoginActivity.class));
                        }

                        newsPageLoadLay.setVisibility(View.GONE);
                    }

                    @Override
                    public void onFailure(Call<ExploreResponse> call, Throwable t) {
                        newsPageLoadLay.setVisibility(View.GONE);
                    }
                });
            }
        });

        getData(getActivity());

        return view;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser){
            getData(getActivity());
        }
    }

    public void getData(final Context context) {
        ExploreSendData sendData = new ExploreSendData();
        sendData.setPageIndex(1);
        sendData.setPageSize(10);
        sendData.setShowFollows(true);
        sendData.setShowMovies(false);
        sendData.setShowNews(false);
        sendData.setShowReplies(true);
        sendData.setShowSeries(false);
        sendData.setShowSuggestions(true);

        mainNotification_progressBar.setVisibility(View.VISIBLE);

        InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
        Call<ExploreResponse> call = api.getExplore(
                new SharedPrefrencesHandler(context).getFromShared(SharedPrefrencesKeys.TOKEN.name()), sendData);

        call.enqueue(new Callback<ExploreResponse>() {
            @Override
            public void onResponse(Call<ExploreResponse> call, Response<ExploreResponse> response) {
                if (response.body().getData() != null && response.body().getStatusCode() != 401
                        && response.body().getStatusCode() != 402) {
                    if (response.body().getData().size() > 0) {
                        model.clear();
                        model.addAll(response.body().getData());
                        notificationListAdapter.notifyDataSetChanged();
                        mainNotification_recyclerView.setAdapter(notificationListAdapter);
                        //Gone no explore
                        mainNotification_noNotificationTxt.setVisibility(View.GONE);

                    } else {
                        mainNotification_noNotificationTxt.setVisibility(View.VISIBLE);
                        mainNotification_recyclerView.setVisibility(View.GONE);
                    }
                } else {
                    prefrencesHandler.remove(SharedPrefrencesKeys.TOKEN.name());
                    startActivity(new Intent(context, LoginActivity.class));
                }

                mainNotification_progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onFailure(Call<ExploreResponse> call, Throwable t) {
                mainNotification_progressBar.setVisibility(View.GONE);
            }
        });
    }
公共类NotificationAllFrag扩展片段{
@BindView(R.id.mainNotification\U recyclerView)
RecyclerView主通知\u RecyclerView;
@BindView(R.id.mainNotification\u noNotificationTxt)
TextView main notification_notificationtxt;
@BindView(R.id.main通知\u进度条)
ProgressBar主通知_ProgressBar;
@BindView(R.id.newsPageLoadLay)
相对Yout newsPageLoadLay;
私人语境;
私有列表模型=新的ArrayList();
公共静态NotificationListAdapter NotificationListAdapter;
私人股优先股;
私有字符串令牌=”;
私人专线经理;布局经理;
公共通知ALLFRAG(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u notification\u all,container,false);
//初始化
ButterKnife.bind(这个,视图);
context=getActivity();
notificationListAdapter=新notificationListAdapter(上下文、模型);
prefrencesHandler=新共享的prefrencesHandler(上下文);
layoutManager=新的LinearLayoutManager(上下文);
//回收视图
main通知\u recyclerView.setLayoutManager(layoutManager);
main通知_recyclerView.setHasFixedSize(true);
//领取代币
token=PrefrenceHandler.getFromShared(SharedReferencesKeys.token.name());
//惰性装载机
newsPageLoadLay.setVisibility(View.GONE);
mainNotification_recyclerView.setOnScrollListener(新的EndlesRecyclerLineArpage1(layoutManager){
@凌驾
public void onLoadMore(int当前页面){
ExploreSendData sendData=新建ExploreSendData();
sendData.setPageIndex(当前页面);
sendData.setPageSize(10);
sendData.setShowFollows(真);
sendData.setShowMovies(假);
sendData.setShowNews(假);
sendData.setShowReplies(true);
sendData.setShowSeries(假);
sendData.setShowSuggestions(true);
newsPageLoadLay.setVisibility(View.VISIBLE);
InterfaceApi api=ApiClient.getClient().create(InterfaceApi.class);
Call Call=api.getExplore(令牌,sendData);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body().getData()!=null&&response.body().getStatusCode()!=401
&&response.body().getStatusCode()!=402){
if(response.body().getData().size()>0){
notificationListAdapter.addNewItem(response.body().getData());
//不去探索
newsPageLoadLay.setVisibility(View.GONE);
}
}否则{
删除(sharedpreferenceskeys.TOKEN.name());
startActivity(新意图(上下文、LoginActivity.class));
}
newsPageLoadLay.setVisibility(View.GONE);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
newsPageLoadLay.setVisibility(View.GONE);
}
});
}
});
getData(getActivity());
返回视图;
}
@凌驾
public void setUserVisibleHint(布尔值isVisibleToUser){
super.setUserVisibleHint(isVisibleToUser);
如果(isVisibleToUser){
getData(getActivity());
}
}
公共void getData(最终上下文){
ExploreSendData sendData=新建ExploreSendData();
sendData.setPageIndex(1);
sendData.setPageSize(10);
sendData.setShowFollows(真);
sendData.setShowMovies(假);
sendData.setShowNews(假);
sendData.setShowReplies(true);
sendData.setShowSeries(假);
sendData.setShowSuggestions(true);
main通知_progressBar.setVisibility(View.VISIBLE);
InterfaceApi api=ApiClient.getClient().create(InterfaceApi.class);
Call=api.getExplore(
新的SharedReferencesHandler(context.getFromShared(SharedReferenceskeys.TOKEN.name()),sendData);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body().getData()!=null&&response.body().getStatusCode()!=401
&&response.body().getStatusCode()!=402){
if(response.body().getData().size()>0){
model.clear();
model.addAll(response.body().getData());
notificationListAdapter.notifyDataSetChanged();
mainNotification_recyclerView.setAdapter(notificationListAdapter);
//不去探索
main notification_nonnotificationtxt.setVisibility(View.GONE);
}否则{
mainNotification_noNotificationTxt.setVisibility
private boolean isVisible = false;
private View view;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        isVisible = true;
        onVisible();
    }
}

// onVisible method
private void onVisible() {
    // edited here 
    if (isVisible && view != null && mainNotification_progressBar != null) {
        getData(getActivity());
    }
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_notification_all, container, false);
    // add ButterKnife here
    ButterKnife.bind(this, view);
    onVisible();
    return view;
}