Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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 使用sectionPager在片段中加载RSS_Java_Android_Xml_Parsing_Rss - Fatal编程技术网

Java 使用sectionPager在片段中加载RSS

Java 使用sectionPager在片段中加载RSS,java,android,xml,parsing,rss,Java,Android,Xml,Parsing,Rss,我正在尝试为一个RSS阅读器编写标签页的分区寻呼机,但在解析器中加载RSS提要时遇到了问题。我将在这里发布这两个类 public class MainActivity extends AppCompatActivity { /** * The {@link android.support.v4.view.PagerAdapter} that will provide * fragments for each of the sections. We use a

我正在尝试为一个RSS阅读器编写标签页的分区寻呼机,但在解析器中加载RSS提要时遇到了问题。我将在这里发布这两个类

    public class MainActivity extends AppCompatActivity {

    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
 * {@link FragmentPagerAdapter} derivative, which will keep every
 * loaded fragment in memory. If this becomes too memory intensive, it
 * may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
private SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
private ViewPager mViewPager;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // 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);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    protected static final String ARG_SECTION_NUMBER = "section_number";
    private List<Entry> theFeed;

    public String adUrl = "http://www.blindbargains.com/mobileads.php?android";
    public String NewsUrl = "http://www.blindbargains.com/rss/newsnoads.xml";
    public String BargainsUrl = "";
    public String ClassifiedsUrl = "";
    public String AudioUrl = "";
    public ListView feedList;

    public WebView adView;
    public PlaceholderFragment() {
    }

    /**
     * Returns a new instance of this fragment for the given section
     * number.
     */


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        adView = (WebView) rootView.findViewById(R.id.adView);
        feedList = (ListView) getActivity().findViewById(R.id.feedList);
        adView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        adView.getSettings().setJavaScriptEnabled(true);
        Log.i("XML", "The section number is " + (getArguments().getInt(ARG_SECTION_NUMBER)));
        //textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
        if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) {
            adView.loadUrl(adUrl);
            Log.i("XML", NewsUrl);
            new DownloadXmlTask().execute("http://www.blindbargains.com/rss/newsnoads.xml");
            //feedList = (ListView) findViewById(R.id.feedList);
            //ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, theList);
            //feedList.setAdapter(arrayAdapter);
            //setContentView(theListView);]
        } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) {
            adView.loadUrl(adUrl);
            new DownloadXmlTask().execute("http://www.blindbargains.com/rss/classifiedsnoads.xml");
            //feedList = (ListView) findViewById(R.id.feedList);
            //ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, theList);
            //feedList.setAdapter(arrayAdapter);
            //setContentView(theListView);
        } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 3) {
            adView.loadUrl(adUrl);
            new DownloadXmlTask().execute(ClassifiedsUrl);
            //feedList = (ListView) findViewById(R.id.feedList);
            //ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, theList);
            //feedList.setAdapter(arrayAdapter);
            //setContentView(theListView);
        } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 4) {
            adView.loadUrl(adUrl);
            new DownloadXmlTask().execute(AudioUrl);
            //feedList = (ListView) findViewById(R.id.feedList);
            //ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, theList);
            //feedList.setAdapter(arrayAdapter);
            //setContentView(theListView);
        }
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();

    }
    // Implementation of AsyncTask used to download XML feed from stackoverflow.com.
    private class DownloadXmlTask extends AsyncTask<String, Void, List<Entry>> {

        @Override
        protected List<Entry> doInBackground(String... urls) {
            try {
                Log.i("XML", "The URL to load is " + urls[0]);
                return loadXmlFromNetwork(urls[0]);
            } catch (IOException e) {
                Log.i("Error","Connection Error!");
                Log.i("XML", "The URL that should have loaded is " + urls[0]);
                return null;
            } catch (XmlPullParserException e) {
                Log.i("Error", "XML Error");
                return null;
            }
        }

        @Override
        protected void onPostExecute(List<Entry> result) {
            // Displays the HTML string in the UI via a WebView
            //Log.i("XML", result.toString());
            if (result != null && result.size() > 0) {
                for (Entry entry : result) {
                    String title = entry.title;
                    String link = entry.link;
                    String date = entry.theDate;
                    Log.i("XML", "The title is " + entry.title);
                }
            }
        }
    }

    // Uploads XML from stackoverflow.com, parses it, and combines it with
    // HTML markup. Returns HTML string.
    private List<Entry> loadXmlFromNetwork(String urlString) throws XmlPullParserException, IOException {
        //Log.i("XML", "Load XML function called");
        InputStream stream = null;
        XMLParser xmlParser = new XMLParser();
        List<Entry> entries = null;
        String title = null;
        String url = null;
        String summary = null;
        //Calendar rightNow = Calendar.getInstance();
        //DateFormat formatter = new SimpleDateFormat("MMM dd h:mmaa");

            Log.i("XML", "The URL to load in the stream is "+ NewsUrl);
            stream = downloadUrl(urlString);
            entries = xmlParser.parse(stream);
            if (entries.size() > 0 ) {
                Log.i("XML", "There are entries loaded in the parser.");
            }
            // Makes sure that the InputStream is closed after the app is
            // finished using it.
            if (stream != null) {
                stream.close();
            }

        return entries;
    }

    // Given a string representation of a URL, sets up a connection and gets
    // an input stream.
    private InputStream downloadUrl(String urlString) throws IOException {
        URL url = new URL(urlString);
        Log.i("XML", "The input stream url is " + urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        InputStream stream = conn.getInputStream();
        Log.i("XML", "The input stream contains: " + stream);
        return stream;
    }
}

/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public static class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_SECTION_NUMBER, position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        // Show 4 total pages.
        return 4;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Latest";
            case 1:
                return "Bargains";
            case 2:
                return "Classifieds";
            case 3:
                return "Audio";
        }
        return null;
    }


}

}
public类MainActivity扩展了AppCompatActivity{
/**
*将提供的{@link android.support.v4.view.PagerAdapter}
*每个部分的片段。我们使用
*{@link FragmentPagerAdapter}派生,它将保留
*已在内存中加载片段。如果这变得过于内存密集,则
*最好是换成一个
*{@link android.support.v4.app.FragmentStatePagerAdapter}。
*/
私人部门SPAGERAAdapter MSECTIONSPAGERAAdapter;
/**
*将承载节内容的{@link ViewPager}。
*/
私有视图寻呼机mViewPager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
//创建适配器,该适配器将为这三个函数中的每一个返回一个片段
//活动的主要部分。
mSectionsPagerAdapter=newsectionspageradapter(getSupportFragmentManager());
//使用分区适配器设置ViewPager。
mViewPager=(ViewPager)findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout TabLayout=(TabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mviewpage);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
/**
*包含简单视图的占位符片段。
*/
公共静态类占位符片段扩展了片段{
/**
*表示此文件节号的片段参数
*碎片。
*/
受保护的静态最终字符串ARG\u SECTION\u NUMBER=“SECTION\u NUMBER”;
私人名单;
公共字符串adUrl=”http://www.blindbargains.com/mobileads.php?android";
公共字符串NewsUrl=”http://www.blindbargains.com/rss/newsnoads.xml";
公共字符串BargainsUrl=“”;
公共字符串ClassifiedsUrl=“”;
公共字符串AudioUrl=“”;
公共列表视图提要列表;
公共网络视图咨询;
公共占位符片段(){
}
/**
*返回给定节的此片段的新实例
*号码。
*/
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
adView=(WebView)rootView.findviewbyd(R.id.adView);
feedList=(ListView)getActivity().findViewById(R.id.feedList);
adView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
adView.getSettings().setJavaScriptEnabled(true);
Log.i(“XML”,“节号为”+(getArguments().getInt(ARG_section_number)));
//setText(getString(R.string.section_格式,getArguments().getInt(ARG_section_编号)));
if(getArguments().getInt(ARG\u节号)==1){
adView.loadUrl(adUrl);
Log.i(“XML”,NewsUrl);
新建DownloadXmlTask()。执行(“http://www.blindbargains.com/rss/newsnoads.xml");
//feedList=(ListView)findViewById(R.id.feedList);
//ArrayAdapter ArrayAdapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u list\u item\u 1,列表);
//feedList.setAdapter(arrayAdapter);
//setContentView(列表视图);]
}else if(getArguments().getInt(ARG\u节号)==2){
adView.loadUrl(adUrl);
新建DownloadXmlTask()。执行(“http://www.blindbargains.com/rss/classifiedsnoads.xml");
//feedList=(ListView)findViewById(R.id.feedList);
//ArrayAdapter ArrayAdapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u list\u item\u 1,列表);
//feedList.setAdapter(arrayAdapter);
//设置内容视图(ListView);
}else if(getArguments().getInt(ARG\u节号)==3){
adView.loadUrl(adUrl);
新建DownloadXmlTask().execute(ClassifiedsUrl);
//feedList=(ListView)findViewById(R.id.feedList);
//ArrayAdapter ArrayAdapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u list\u item\u 1,列表);
//feedList.setAdapter(arrayAdapter);
//设置内容视图(ListView);
}else if(getArguments().getInt(ARG\u节号)==4){
adView.loadUrl(adUrl);
新建DownloadXmlTask().execute(AudioUrl);
//feedList=(ListView)findViewById(R.id.feedList);
//ArrayAdapter ArrayAdapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u list\u item\u 1,列表);
//feedList.setAdapter(arrayAdapter);
//设置内容视图(ListView);
}
返回rootView;
}
@凌驾
public void onStart(){
super.onStart();
}
//用于从stackoverflow.com下载XML提要的AsyncTask的实现。
私有类DownloadXmlTask扩展了AsyncTask{
@凌驾
受保护列表doInBackground(字符串…URL){
试一试{
Log.i(“XML”,“要加载的URL是”+URL[0]);
返回loadXmlFromNetwork(URL[0]);
}猫
     * This class parses XML feeds from stackoverflow.com.
* Given an InputStream representation of a feed, it returns a List of entries,
 * where each list element represents a single entry (post) in the XML feed.
 */
public class XMLParser {
private static final String ns = null;

// We don't use namespaces

public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException {
    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(in, null);
        parser.nextTag();
        return readFeed(parser);
    } finally {
        in.close();
    }
}

private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
    List<Entry> entries = new ArrayList<Entry>();

    parser.require(XmlPullParser.START_TAG, ns, "rss");
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        // Starts by looking for the entry tag
        if (name.equals("item")) {
            entries.add(readEntry(parser));
        } else {
            skip(parser);
        }
    }
    return entries;
}

// This class represents a single entry (post) in the XML feed.
// It includes the data members "title," "link," and "summary."
public static class Entry {
    public final String title;
    public final String link;
    public final String summary;
    public final String theDate;

    private Entry(String title, String summary, String link, String theDate) {
        this.title = title;
        this.summary = summary;
        this.link = link;
        this.theDate = theDate;
    }
}

// Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them
// off
// to their respective &quot;read&quot; methods for processing. Otherwise, skips the tag.
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
    parser.require(XmlPullParser.START_TAG, ns, "item");
    String title = null;
    String summary = null;
    String link = null;
    String theDate = null;
    while (parser.next() != XmlPullParser.END_TAG) {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            continue;
        }
        String name = parser.getName();
        if (name.equals("title")) {
            title = readTitle(parser);
        } else if (name.equals("summary")) {
            summary = readSummary(parser);
        } else if (name.equals("link")) {
            link = readLink(parser);
        } else if (name.equals("pubDate")) {
            theDate = readDate(parser);
        } else {
            skip(parser);
        }
    }
    return new Entry(title, summary, link, theDate);
}

// Processes title tags in the feed.
private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "title");
    String title = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "title");
    return title;
}

// Processes link tags in the feed.
private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "link");
    String link = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "link");
    return link;
}

// Processes summary tags in the feed.
private String readSummary(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "summary");
    String summary = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "summary");
    return summary;
}
private String readDate(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, ns, "pubDate");
    String theDate = readText(parser);
    parser.require(XmlPullParser.END_TAG, ns, "pubDate");
    return theDate;
}

// For the tags title and summary, extracts their text values.
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
    String result = "";
    if (parser.next() == XmlPullParser.TEXT) {
        result = parser.getText();
        parser.nextTag();
    }
    Log.i("XML", result);
    return result;
}

// Skips tags the parser isn't interested in. Uses depth to handle nested tags. i.e.,
// if the next tag after a START_TAG isn't a matching END_TAG, it keeps going until it
// finds the matching END_TAG (as indicated by the value of "depth" being 0).
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
    if (parser.getEventType() != XmlPullParser.START_TAG) {
        throw new IllegalStateException();
    }
    int depth = 1;
    while (depth != 0) {
        switch (parser.next()) {
            case XmlPullParser.END_TAG:
                depth--;
                break;
            case XmlPullParser.START_TAG:
                depth++;
                break;
        }
    }
}
}