【问题标题】:App force closes when I try to implement an EditText search in a Listview当我尝试在 Listview 中实现 EditText 搜索时,应用程序强制关闭
【发布时间】:2014-04-12 20:52:47
【问题描述】:

我是安卓新手。我创建了一个应用程序,它是一个拉式解析器,以便从 Rss 提要中提取项目到 ListView。不幸的是,当我尝试放置代码以便在我的 ListView 中实现某种过滤机制时,我的应用程序似乎强制关闭。这是我到目前为止的代码,我不知道它为什么会崩溃。任何帮助将不胜感激。

         public class RssFeed extends ListActivity {


// Listview Adapter

ArrayAdapter<string> adapter;
 EditText SearchBox;

List titles;
public static List description;

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

    // Initialising instance variables
    titles = new ArrayList();
    description = new ArrayList();


    try {
        URL url = new URL("http://my.url");

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(false);
        XmlPullParser xpp = factory.newPullParser();
        xpp.setInput(getInputStream(url), "UTF_8");
        boolean insideItem = false;

        /** While the rss feed has not displayed end_document, pull the title and description information */
        int eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {

                if (xpp.getName().equalsIgnoreCase("item")) {
                    insideItem = true;
                } else if (xpp.getName().equalsIgnoreCase("title")) {
                    if (insideItem)
                        titles.add(xpp.nextText()); 
                } else if (xpp.getName().equalsIgnoreCase("description")) {
                    if (insideItem)
                        description.add(xpp.nextText()); 
                }
            }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){
                insideItem=false;
            }

            eventType = xpp.next(); 
        }


    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


    ArrayAdapter adapter = new ArrayAdapter(this,
            android.R.layout.simple_list_item_1, titles);
    setListAdapter(adapter);

    /**
     * Enabling Search Filter
     * */
    SearchBox.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            RssFeed.this.adapter.getFilter().filter(cs);   
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub                          
        }
    });

}

public InputStream getInputStream(URL url) {
           try {
               return url.openConnection().getInputStream();
           } catch (IOException e) {
               return null;
             }
        }

}

还有 LogCat:

04-12 20:43:00.792: D/dalvikvm(324): GC freed 7597 objects / 316440 bytes in 88ms
04-12 20:43:00.852: D/AndroidRuntime(324): Shutting down VM
04-12 20:43:00.852: W/dalvikvm(324): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-12 20:43:00.852: E/AndroidRuntime(324): Uncaught handler: thread main exiting due to uncaught exception
04-12 20:43:00.862: E/AndroidRuntime(324): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.me.myandroidstuff.simpleRssReader/org.me.myandroidstuff.TrafficScotlandPrototype.RssFeed}: java.lang.NullPointerException
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.os.Looper.loop(Looper.java:123)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread.main(ActivityThread.java:4363)
04-12 20:43:00.862: E/AndroidRuntime(324):  at java.lang.reflect.Method.invokeNative(Native Method)
04-12 20:43:00.862: E/AndroidRuntime(324):  at java.lang.reflect.Method.invoke(Method.java:521)
04-12 20:43:00.862: E/AndroidRuntime(324):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-12 20:43:00.862: E/AndroidRuntime(324):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-12 20:43:00.862: E/AndroidRuntime(324):  at dalvik.system.NativeStart.main(Native Method)
04-12 20:43:00.862: E/AndroidRuntime(324): Caused by: java.lang.NullPointerException
04-12 20:43:00.862: E/AndroidRuntime(324):  at org.me.myandroidstuff.TrafficScotlandPrototype.RssFeed.onCreate(RssFeed.java:142)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-12 20:43:00.862: E/AndroidRuntime(324):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
04-12 20:43:00.862: E/AndroidRuntime(324):  ... 11 more
04-12 20:43:00.892: I/dalvikvm(324): threadid=7: reacting to signal 3
04-12 20:43:00.892: E/dalvikvm(324): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

【问题讨论】:

  • 这是您日志中最重要的语句,检查行号并发布该行: Caused by: java.lang.NullPointerException 04-12 20:43:00.862: E/AndroidRuntime(324) :在 org.me.myandroidstuff.TrafficScotlandPrototype.RssFeed.onCreate(RssFeed.java:142)
  • 第 142 行是 SearchBox.addTextChangedListener(new TextWatcher() {
  • 确实如此,我只是取出了一些与我的问题无关的东西,比如菜单等!我应该把它都放进去吗?
  • SearchBoxnull 因为你还没有初始化它。

标签: java android eclipse listview rss


【解决方案1】:

首先:你发的课没有142行,一定要发全课。 第二:SearchBox 在这里为空。

那是因为你用

声明了它
EditText SearchBox;

但从未像您通常从布局中那样分配它

SearchBox = (EditText) findViewById(R.id.searchBox);  

(只是一个例子)

SeachBox 此时没有赋值,因此您不能对其使用任何方法。

第三:使用像searchBox这样的小写名称,它会让你的代码更容易被别人和你自己阅读。

【讨论】:

  • 感谢您的帮助,我已将其声明方式更改为 EditText searchBox = (EditText)findViewById(R.id.SearchBox);不幸的是它仍然崩溃:(
  • 那是因为那行只是一个例子。您应该阅读如何在代码中初始化 UI 组件。
  • 我搜索了如何初始化一个EditText,然后编辑了它给我的行?
  • 所以你的 R.layout.rss 确实包含一个 ID 为 SearchBox 的 EditText?
  • 是的&lt;!-- Editext for Search --&gt; &lt;EditText android:id="@+id/SearchBox" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/search" /&gt;
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 2018-03-17
  • 1970-01-01
  • 2012-10-20
  • 2012-10-16
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多