layoutinflater上的空指针异常

时间:2014-07-02 18:57:40

标签: java android android-listview nullpointerexception

我正在尝试从扩展片段的类中将listview添加到我的布局中。问题是,当数据到来时,布局显示空指针异常。这是代码:

TopStoriesFragment.java

public class TopStoriesFragment extends Fragment {

    public String thehindu = "http://www.thehindu.com/news/?service=rss";
    public String toi = "http://timesofindia.feedsportal.com/c/33039/f/533965/index.rss";
    public String reuters = "http://feeds.reuters.com/reuters/topNews";
    public String deccanherald = "http://www.deccanherald.com/rss-internal/top-stories.rss";
    public String currenturl = thehindu;
    AlertDialog levelDialog;
    public String fakingnews = "http://thepuntended.wordpress.com/";
    public LayoutInflater inflater;
    ListView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);

        feedTitle = (TextView) rootView.findViewById(R.id.feedtitle);
        feedDescribtion = (TextView) rootView.findViewById(R.id.feeddescribtion);

        listView = (ListView) rootView.findViewById(android.R.id.list);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                Intent intent = new Intent(getActivity(), ShowDetails.class);
                Bundle bundle = new Bundle();
                bundle.putString("keyTitle", myRssFeed.getItem(position).getTitle());
                bundle.putString("keyDescription", myRssFeed.getItem(position)
                        .getDescription());
                bundle.putString("keyLink", myRssFeed.getItem(position).getLink());
                bundle.putString("keyPubdate", myRssFeed.getItem(position).getPubdate());
                intent.putExtras(bundle);
                startActivity(intent);

            }
        });
        startReadRss();

        return rootView;
    }

    public class RssLoadingTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            displayRss();
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            preReadRss();
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            // TODO Auto-generated method stub
            // super.onProgressUpdate(values);
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub
            readRss();
            return null;
        }

    }

    private RSSFeed myRssFeed = null;

    TextView feedTitle;
    TextView feedDescribtion;

    // TextView feedPubdate;
    // TextView feedLink;

    public class MyCustomAdapter extends ArrayAdapter<RSSItem> {

        public MyCustomAdapter(Context context, int textViewResourceId,
                List<RSSItem> list) {
            super(context, textViewResourceId, list);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            // return super.getView(position, convertView, parent);

            View row = convertView;

            if (row == null) {
   ---------------------- Logcat error takes me here----------------------------
                row = inflater.inflate(R.layout.row, parent, false);
   ---------------------------------------------------------------------------------
            }

            TextView listTitle = (TextView) row.findViewById(R.id.listtitle);
            listTitle.setText(myRssFeed.getList().get(position).getTitle());
            TextView listPubdate = (TextView) row
                    .findViewById(R.id.listpubdate);
            listPubdate.setText(myRssFeed.getList().get(position).getPubdate());

            if (position % 2 == 0) {
                listTitle.setBackgroundColor(0xff101010);
                listPubdate.setBackgroundColor(0xff101010);
            } else {
                listTitle.setBackgroundColor(0xff080808);
                listPubdate.setBackgroundColor(0xff080808);
            }

            return row;
        }
    }

    private void startReadRss() {
        new RssLoadingTask().execute();
    }

    private void preReadRss() {
        feedTitle.setText("--- wait ---");
        feedDescribtion.setText("");
        // feedPubdate.setText("");
        // feedLink.setText("");
        listView.setAdapter(null);

        Toast.makeText(getActivity(), "Reading RSS, Please wait.", Toast.LENGTH_LONG)
                .show();
    }

    private void readRss() {

        try {
            URL rssUrl = new URL(currenturl);
            SAXParserFactory mySAXParserFactory = SAXParserFactory
                    .newInstance();
            SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
            XMLReader myXMLReader = mySAXParser.getXMLReader();
            RSSHandler myRSSHandler = new RSSHandler();
            myXMLReader.setContentHandler(myRSSHandler);
            InputSource myInputSource = new InputSource(rssUrl.openStream());
            myXMLReader.parse(myInputSource);

            myRssFeed = myRSSHandler.getFeed();

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void displayRss() {
        if (myRssFeed != null) {
            Calendar c = Calendar.getInstance();
            // String strCurrentTiime = "\n(Time of Reading - "
            // + c.get(Calendar.HOUR_OF_DAY)
            // + " Hrs. : "
            // + c.get(Calendar.MINUTE) + " Mins.)\n" +c.get(Calendar.AM_PM);

            SimpleDateFormat sdf = new SimpleDateFormat(
                    "MMMM-dd-yyyy HH:mm:ss a");
            String strCurrentTiime = sdf.format(c.getTime());

            feedTitle.setText(myRssFeed.getTitle());
            feedDescribtion.setText(strCurrentTiime);
            // feedPubdate.setText(myRssFeed.getPubdate());
            // feedLink.setText(myRssFeed.getLink());

            MyCustomAdapter adapter = new MyCustomAdapter(getActivity(), R.layout.row,
                    myRssFeed.getList());
             listView.setAdapter(adapter);

        }
    }

}

logcat的:

07-03 00:21:38.253: E/AndroidRuntime(27831): FATAL EXCEPTION: main
07-03 00:21:38.253: E/AndroidRuntime(27831): java.lang.NullPointerException
07-03 00:21:38.253: E/AndroidRuntime(27831):    at akshat.jaiswal.newshelf.TopStoriesFragment$MyCustomAdapter.getView(TopStoriesFragment.java:129)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.AbsListView.obtainView(AbsListView.java:2207)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.ListView.onMeasure(ListView.java:1162)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1411)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:698)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1451)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:850)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4916)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2191)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.View.measure(View.java:15609)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2165)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1249)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1443)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.Choreographer.doCallbacks(Choreographer.java:579)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.Choreographer.doFrame(Choreographer.java:548)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.os.Handler.handleCallback(Handler.java:725)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.os.Looper.loop(Looper.java:153)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at android.app.ActivityThread.main(ActivityThread.java:5297)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at java.lang.reflect.Method.invokeNative(Native Method)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at java.lang.reflect.Method.invoke(Method.java:511)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-03 00:21:38.253: E/AndroidRuntime(27831):    at dalvik.system.NativeStart.main(Native Method)

Row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:background="@android:color/darker_gray"
    android:orientation="vertical">
<TextView
    android:id="@+id/listtitle"
    android:layout_marginTop="1dp"
    android:layout_width="fill_parent"
    android:textAppearance="@android:style/TextAppearance.Medium"
    android:layout_height="wrap_content"/>
<TextView
    android:id="@+id/listpubdate"
    android:layout_marginBottom="1dp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="@android:style/TextAppearance.Small"/>
</LinearLayout>

1 个答案:

答案 0 :(得分:2)

您尚未初始化inflater中使用的getView()成员变量。

使用例如inflater = LayoutInflater.from(context)初始化它。