Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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,因此,我有一个零碎的活动,它目前运行得很好 public class ChallongeEvent extends FragmentActivity { private TextView tab_text; private String EVENT_ID, URL; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance

因此,我有一个零碎的活动,它目前运行得很好

public class ChallongeEvent extends FragmentActivity {
    private TextView tab_text;
    private String EVENT_ID, URL;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.challonge_act_event);
        init();
    }

    private void init() {
        tab_text = (TextView) findViewById(R.id.tab_text);

        Intent intent = getIntent();
        EVENT_ID = intent.getStringExtra("event_id");
        URL = "https://api.challonge.com/v1/tournaments/" + EVENT_ID + ".json";

        String titles[] = new String[] { getString(R.string.details), getString(R.string.players) };
        int numTabs = titles.length;

        EventAdapter adapter = new EventAdapter(getSupportFragmentManager(), titles, numTabs);
        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);
        pager.setCurrentItem(numTabs - 1);

        SlidingTabLayout sliding_tabs = (SlidingTabLayout) findViewById(R.id.sliding_tabs);
        sliding_tabs.setDistributeEvenly(true);
        sliding_tabs.setViewPager(pager);
    }

    @Override
    public void onResume() {
        super.onResume();
        populate();
    }

    private void populate() {
        AsyncGet fetch = new AsyncGet(new AsyncResponse() {
            @Override
            public void processFinish(String output) {
                for (Fragment fragment : getSupportFragmentManager().getFragments())
                {
                    if (fragment instanceof ChallongePlayers) {
                        ((ChallongePlayers) fragment).parsePlayers(output);
                    } else if (fragment instanceof ChallongeMatches) {
                        ((ChallongeMatches) fragment).parseMatches(output);
                    }
                }
            }
        });

        HttpUrl.Builder urlBuilder = HttpUrl.parse(URL).newBuilder();
        urlBuilder.addQueryParameter("api_key", Challonge.API_KEY);
        urlBuilder.addQueryParameter("include_participants", "1");
        urlBuilder.addQueryParameter("include_matches", "1");
        fetch.execute(urlBuilder.build().toString());
    }
}
当FragmentActivity启动时,它从API获取JSON,然后将此API的数据发送到寻呼机中的多个片段。它使用以下代码执行此操作:

        AsyncGet fetch = new AsyncGet(new AsyncResponse() {
            @Override
            public void processFinish(String output) {
                for (Fragment fragment : getSupportFragmentManager().getFragments())
                {
                    if (fragment instanceof ChallongePlayers) {
                        ((ChallongePlayers) fragment).parsePlayers(output);
                    } else if (fragment instanceof ChallongeMatches) {
                        ((ChallongeMatches) fragment).parseMatches(output);
                    }
                }
            }
        });

        HttpUrl.Builder urlBuilder = HttpUrl.parse(URL).newBuilder();
        urlBuilder.addQueryParameter("api_key", Challonge.API_KEY);
        urlBuilder.addQueryParameter("include_participants", "1");
        urlBuilder.addQueryParameter("include_matches", "1");
        fetch.execute(urlBuilder.build().toString());
但是,这些片段中的每一个都有一个
SwipeRefreshLayout
,我想在AsyncTask请求之前激活它。因此,我将每个片段上的SwipeRefreshLayout设置为公共,并尝试在
AsyncGet fetch=…
行上方添加以下内容:

        for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment instanceof ChallongePlayers) {
                ((ChallongePlayers) fragment).swipe_container.setRefreshing(true);
            } else if (fragment instanceof ChallongeMatches) {
                ((ChallongeMatches) fragment).swipe_container.setRefreshing(true);
            }
        }
不幸的是,此代码的第一行产生错误:

java.lang.NullPointerException:尝试对空对象引用调用接口方法“java.util.Iterator java.util.List.Iterator()”


为什么不起作用?

调用
getFragments()
返回的集合尚未初始化,为空

如果检查以确保
getFragments()
在迭代之前不会返回
null
集合,则可以添加

if(getSupportFragmentManager().getFragments() != null) {
    for (Fragment fragment : getSupportFragmentManager().getFragments())
    {
        if (fragment instanceof ChallongePlayers) {
            ((ChallongePlayers) fragment).swipe_container.setRefreshing(true);
        } else if (fragment instanceof ChallongeMatches) {
            ((ChallongeMatches) fragment).swipe_container.setRefreshing(true);
        }
    }
}

是否可能在调用
getSupportFragmentManager().getFragments()
时您还没有添加任何片段?这些片段是在
init()
中添加的,这发生在
onCreate
之后,第一次运行填充可以发生在
onResume
中。
getSupportFragmentManager().executePendingTransactions()未更改任何内容。。。但是检查空值是一个足够好的解决方案。那么最好将其从答案中删除。我想,
FragmentPagerAdapter
一定在对片段做一些不同的处理。