Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
Android,用xml文件解析问题_Android_Xml Parsing_Nullpointerexception_Saxparser - Fatal编程技术网

Android,用xml文件解析问题

Android,用xml文件解析问题,android,xml-parsing,nullpointerexception,saxparser,Android,Xml Parsing,Nullpointerexception,Saxparser,我正在尝试解析此: 通过遵循本教程,我试图修改源代码,但出现了下一个错误: 11-17 20:04:38.072: I/System.out(13247): Error: null 11-17 20:04:38.072: D/AndroidRuntime(13247): Shutting down VM 11-17 20:04:38.082: W/dalvikvm(13247): threadid=1: thread exiting with uncaught exception (group=

我正在尝试解析此:
通过遵循本教程,我试图修改源代码,但出现了下一个错误:

11-17 20:04:38.072: I/System.out(13247): Error: null
11-17 20:04:38.072: D/AndroidRuntime(13247): Shutting down VM
11-17 20:04:38.082: W/dalvikvm(13247): threadid=1: thread exiting with uncaught exception (group=0x409951f8)
11-17 20:04:38.122: E/AndroidRuntime(13247): FATAL EXCEPTION: main
11-17 20:04:38.122: E/AndroidRuntime(13247): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.net46.sourcecode.android.lectorxml2/net.net46.sourcecode.android.lectorxml2.LectorXML2Activity}: java.lang.NullPointerException
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread.access$600(ActivityThread.java:122)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.os.Looper.loop(Looper.java:137)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread.main(ActivityThread.java:4340)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at java.lang.reflect.Method.invokeNative(Native Method)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at java.lang.reflect.Method.invoke(Method.java:511)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at dalvik.system.NativeStart.main(Native Method)
11-17 20:04:38.122: E/AndroidRuntime(13247): Caused by: java.lang.NullPointerException
11-17 20:04:38.122: E/AndroidRuntime(13247):    at net.net46.sourcecode.android.lectorxml2.LectorXML2Activity.onCreate(LectorXML2Activity.java:36)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.Activity.performCreate(Activity.java:4465)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-17 20:04:38.122: E/AndroidRuntime(13247):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
11-17 20:04:38.122: E/AndroidRuntime(13247):    ... 11 more
当模拟器运行时,这就是我的日志。原始tut中的三个修改后的源代码类现在是:LectorXML2Activity.java、Lista.java、讲师axml.java,代码如下:

//Lista.java
package net.net46.sourcecode.android.lectorxml2;
import java.util.ArrayList;
public class Lista {
private ArrayList<String> nombre = new ArrayList<String>();
private ArrayList<String> pagina = new ArrayList<String>();
private ArrayList<String> categoria = new ArrayList<String>();
public void setNombre(String nombre){
    this.nombre.add(nombre);
}
public ArrayList<String> getNombre(){
    return this.nombre;
}

public void setPagina(String pagina){
    this.pagina.add(pagina);
}   
public ArrayList<String> getPagina(){
    return this.pagina;
}

public void setCategoria(String categoria){
    this.categoria.add(categoria);
}
public ArrayList<String> getCategoria(){
    return this.categoria;
}
}


//LecturaXML.java
package net.net46.sourcecode.android.lectorxml2;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
public class LecturaXML extends DefaultHandler{
public static Lista lista = null;
private Boolean elementoActual;
private String valorActual = null;
@Override
public void startElement(String uri, String nombreLocal,
                         String qNombre, Attributes atributos)
throws SAXException{
    elementoActual = true;
    if(nombreLocal.equals("tecnologias")){
        lista = new Lista();
    }else if(nombreLocal.equals("pagina")){
        String attr = atributos.getValue("categoria");
        lista.setCategoria(attr);
    }
}   
@Override
public void endElement(String uri, String nombreLocal, String qNombre)
throws SAXException{
    elementoActual = false;
    if(nombreLocal.equalsIgnoreCase("nombre")){
        lista.setNombre(valorActual);
    }else if(nombreLocal.equalsIgnoreCase("pagina")){
        lista.setPagina(valorActual);
    }
}
@Override
public void characters(char[]ch, int inicio, int longitud)
throws SAXException{
    if(elementoActual){
        valorActual = new String(ch,inicio,longitud);
        elementoActual = false;
    }
}

public static Lista getLista(){
    return lista;
}
public static void setLista(Lista lista){
    LecturaXML.lista = lista;
}
}



//LectorXML2Activity.java
package net.net46.sourcecode.android.lectorxml2;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import net.net46.sourcecode.android.lectorxml2.R;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import java.net.URL;
public class LectorXML2Activity extends Activity{
Lista lista = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LinearLayout vista = new LinearLayout(this);
    vista.setOrientation(1);
    TextView[] nombre;
    TextView[] pagina;
    TextView[] categoria;
    try{
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        URL url = new URL("http://sourcecode.net46.net/android/xml/tecnologies.xml");
        LecturaXML lectura = new LecturaXML();
        xr.setContentHandler(lectura);
        xr.parse(new InputSource(url.openStream()));
    }catch(Exception e){
        System.out.println("Error: " + e.getMessage());
    }
    lista = LecturaXML.lista;
    nombre = new TextView[lista.getNombre().size()];
    pagina = new TextView[lista.getNombre().size()];
    categoria = new TextView[lista.getNombre().size()];
    for(int i=0;i<lista.getNombre().size();i++){
        nombre[i] = new TextView(this);
        nombre[i].setText("Nombre: "+lista.getNombre().get(i));
        pagina[i] = new TextView(this);
        pagina[i].setText("Pagina: "+lista.getPagina().get(i));
        categoria[i] = new TextView(this);
        categoria[i].setText("Categoría: "+lista.getCategoria().get(i));
        vista.addView(nombre[i]);
        vista.addView(pagina[i]);
        vista.addView(categoria[i]);
    }
    setContentView(vista);
}
}

//AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.net46.sourcecode.android.lectorxml2"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="14" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".LectorXML2Activity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
//Lista.java
包net.net46.sourcecode.android.lectorxml2;
导入java.util.ArrayList;
公共类列表{
private ArrayList nombre=new ArrayList();
private ArrayList pagina=new ArrayList();
private ArrayList categoria=新的ArrayList();
public void setNombre(字符串nombre){
此.nombre.add(nombre);
}
公共数组列表getNombre(){
返回这个.nombre;
}
公共void setPagina(字符串pagina){
本.pagina.add(pagina);
}   
公共阵列列表getPagina(){
把这个还给帕吉娜;
}
公共void setCategoria(字符串categoria){
本.categoria.add(categoria);
}
公共数组列表getCategoria(){
返回此目录a;
}
}
//java.axml.java
包net.net46.sourcecode.android.lectorxml2;
导入org.xml.sax.helpers.DefaultHandler;
导入org.xml.sax.Attributes;
导入org.xml.sax.SAXException;
公共类AXML扩展了DefaultHandler{
公共静态Lista Lista=null;
私有布尔元素实际值;
私有字符串valorActual=null;
@凌驾
public void startElement(字符串uri、字符串nombreLocal、,
字符串qNombre,属性(不适用)
抛出SAX异常{
元素实际值=真;
if(nombreLocal.equals(“tecnologias”)){
lista=新lista();
}else if(nombreLocal.equals(“pagina”)){
字符串attr=atributos.getValue(“categoria”);
lista.setCategoria(attr);
}
}   
@凌驾
public void endElement(字符串uri、字符串nombreLocal、字符串qNombre)
抛出SAX异常{
元素实际值=假;
if(nombreLocal.equalsIgnoreCase(“nombre”)){
lista.setNombre(valorActual);
}else if(nombrelial.equalsIgnoreCase(“pagina”)){
木犀(valorActual);
}
}
@凌驾
公共无效字符(字符[]ch,int-inicio,int-longitud)
抛出SAX异常{
如果(元素实际){
valorActual=新字符串(ch、inicio、longitud);
元素实际值=假;
}
}
公共静态Lista getLista(){
返回列表a;
}
公共静态无效setLista(Lista Lista){
讲师axml.lista=lista;
}
}
//LectorXML2Activity.java
包net.net46.sourcecode.android.lectorxml2;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入javax.xml.parsers.SAXParserFactory;
导入javax.xml.parsers.SAXParser;
导入net.net46.sourcecode.android.lectorxml2.R;
导入org.xml.sax.XMLReader;
导入org.xml.sax.InputSource;
导入java.net.URL;
公共类选择器XML2Activity扩展活动{
Lista Lista=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout vista=新的LinearLayout(此);
vista.setOrientation(1);
TextView[]名称;
TextView[]pagina;
TextView[]分类;
试一试{
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
URL=新URL(“http://sourcecode.net46.net/android/xml/tecnologies.xml");
讲师AXML讲师A=新讲师AXML();
xr.setContentHandler(a);
parse(新输入源(url.openStream());
}捕获(例外e){
System.out.println(“错误:+e.getMessage());
}
lista=axml.lista;
nombre=newtextview[lista.getNombre().size()];
pagina=newtextview[lista.getNombre().size()];
categoria=新文本视图[lista.getNombre().size()];

对于(int i=0;i您不初始化以下任一项:

public static Lista lista = null;
private String valorActual = null;
它们保持为null,并导致null指针异常。在使用它们之前,您需要对它们进行初始化。例如,以下操作可能有效:

public static Lista lista = new Lista();
private String valorActual = "";

问候伊利诺伊州Urbana..是的,解决了空指针问题,仍然是一个没有结果的空白屏幕使用断点逐步查看代码的实际情况。这应该可以解释您的空数据。@Merlin我在LectorXML2Activity.java文件的这一行使用了断点:nombre=new TextView[lista.getNombre().size()];因为我认为存在引发NullPointerException的地方,但替换了以下几行:public static Lista Lista=null;private String valorActual=null;正如Kurtis提到的那样,我不会解决解析问题,因为我得到的只是一个空列表。顺便说一句,如果您想尝试,我将应用程序保留在以下链接:希望有人能共享解决方案..欢迎使用Stackoverflow!如果您发现某个回复有帮助,请向上投票。如果该回复成功回答了您的问题,请单击旁边的绿色复选标记接受答案。另外,请查看以获取有关如何编写好问题的建议