首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NullPointerException ArrayAdapter适配器

NullPointerException ArrayAdapter适配器
EN

Stack Overflow用户
提问于 2015-05-12 08:32:09
回答 3查看 125关注 0票数 0

你好吗?带着安卓的问题,这是一个NullPointerException ArrayAdapter adapter.Im初级开发,对不起。

我有这个密码

代码语言:javascript
复制
private String[] titulares;
private ListView listadoTitulos;

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

    //Permisos
    StrictMode.ThreadPolicy permiso = new  StrictMode.ThreadPolicy.Builder().permitAll().build();
    //Damos los permisos
    StrictMode.setThreadPolicy(permiso);
    listadoTitulos = (ListView) findViewById(R.id.lvtitulos);
    try {
        url = new URL("http://www.videotutoriales.es/android-xml/cursos.xml");
        leerXml();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,titulares);
    listadoTitulos.setAdapter(adapter);
}

NullPointerException ArrayAdapter in logCat

代码语言:javascript
复制
05-12 03:25:18.807  32599-32599/com.cig.trlxml E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cig.trlxml/com.cig.trlxml.MainActivity}: java.lang.NullPointerException

在这一行

代码语言:javascript
复制
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,titulares);
    listadoTitulos.setAdapter(adapter);

XML文件是

代码语言:javascript
复制
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:src="@mipmap/logon" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/lvtitulos"
    android:layout_below="@+id/imageView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

怎么啦?

谢谢

编辑

代码语言:javascript
复制
private void leerXml() {
    //Es necesario para utilizar la clase XMLPullParser
    XmlPullParserFactory factory;
    XmlPullParser xml;
    //Variable para los eventos
    int evento;
    boolean titulo;
    ArrayList<String> titulos;
    //Puedo leer el titulo?
    titulo = false;
    titulos = new ArrayList<String>();
    try {
        factory = XmlPullParserFactory.newInstance();
        xml=factory.newPullParser();
        //obtenemos la URL
        xml.setInput(url.openStream(),"UTF-8");

        evento = xml.getEventType();
        //Leer cada uno de los eventos hasta el final
        while (evento != XmlPullParser.END_DOCUMENT){
            switch(evento){
                case XmlPullParser.START_TAG:
                    if(xml.getName().equals("titulo")){
                        titulo = true;
                    }
                    break;
                case  XmlPullParser.TEXT:
                    if(titulo = true){
                        titulos.add(xml.getText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if(xml.getName().equals("titulo")) {
                        titulo = false;
                    }
                    break;
            }
            evento = xml.next();
        }

        titulares = new String[titulos.size()];
        for (int i = 0; i< titulos.size(); i++){
            titulares[i] = titulos.get(i);
        }

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

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-12 08:36:28

异常的原因是您重新初始化了titulares数组,但在创建适配器时尝试将其用作数据:

代码语言:javascript
复制
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,titulares);
    listadoTitulos.setAdapter(adapter);

就像这样编码:

代码语言:javascript
复制
titulares = new String[your_lenght];

在适配器创建或填充它之前,如果您有它的话。

票数 0
EN

Stack Overflow用户

发布于 2015-05-12 08:38:26

抛出NullPointerException是因为它试图将值titularis传递给ArrayAdapter的构造函数,但是您从未定义过titularis,所以它仍然是空的。

尝试在onCreate()中初始化标题,如下所示

代码语言:javascript
复制
titularis = new String[2];

在初始化ArrayAdapter之前

票数 0
EN

Stack Overflow用户

发布于 2018-01-21 21:16:49

您的leerxml()方法不能正常工作,请检查internet权限或internet访问。因此,不正确运行的方法--您试图传递给ArrayAdapter的字符串数组--没有被初始化,最终将null传递给ArrayAdapter构造函数。

此外,在您的行中的leerxml()内部有一个问题。

if(titulo = true){

修改它

如果(Titulo){

正如您在API中看到的那样,ArrayAdapter构造函数接收三个参数

ArrayAdapter(上下文、int资源、T[]对象)

  • 当前背景
  • 包含要在实例化视图时使用的TextView的布局文件的资源ID。
  • 要在ListView中表示的对象。此值绝不能为空。

尝试将一些日志消息放入Try - catch块中,您将看到该方法没有正确运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30185625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档