【问题标题】:Get XML from Asset NullPointerException从资产 NullPointerException 获取 XML
【发布时间】:2012-09-19 17:43:22
【问题描述】:

我正在处理this 示例,其中作者通过 HTTP 请求提取+解析 xml 文件。我试图操纵这个项目,而不是从资产文件夹中加载相同的 xml。但是,当我加载它时,我得到了一个空指针。我正在传递上下文,因为我认为除了从资产文件夹加载“url”之外,我还应该传递上下文。我在这段代码中的错误在哪里?

MainActivity sn-p-初始化url字符串并调用getXML

static final String URL = "file:///android_asset/sample.xml";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL, context); // getting XML
    ...
}

XMLParser 类的方法:

public String getXmlFromUrl(String URL, Context context){
    String xml = null;
    AssetManager am = context.getAssets();
    try {
        InputStream is = am.open(URL); //This is line 40
        int length = is.available();
        byte[] data = new byte[length];
        is.read(data);
        xml = new String(data);
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    return xml;
}

编辑:添加 Logcat

09-19 13:41:43.442: W/dalvikvm(4841): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-19 13:41:43.442: E/AndroidRuntime(4841): FATAL EXCEPTION: main
09-19 13:41:43.442: E/AndroidRuntime(4841): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.xmlparsing/com.androidhive.xmlparsing.AndroidXMLParsingActivity}: java.lang.NullPointerException
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.os.Looper.loop(Looper.java:130)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at java.lang.reflect.Method.invokeNative(Native Method)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at java.lang.reflect.Method.invoke(Method.java:507)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at dalvik.system.NativeStart.main(Native Method)
09-19 13:41:43.442: E/AndroidRuntime(4841): Caused by: java.lang.NullPointerException
09-19 13:41:43.442: E/AndroidRuntime(4841):     at com.androidhive.xmlparsing.XMLParser.getXmlFromUrl(XMLParser.java:40)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at com.androidhive.xmlparsing.AndroidXMLParsingActivity.onCreate(AndroidXMLParsingActivity.java:42)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-19 13:41:43.442: E/AndroidRuntime(4841):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09-19 13:41:43.442: E/AndroidRuntime(4841):     ... 11 more

【问题讨论】:

  • 请发布显示 NullpointerException 和 Stacktrace 的 LogCat
  • @Ridcully 是的,我忘记了。已更新。
  • 您能否单步执行代码并找出 NullPointerException 发生的位置?
  • @CaseyB 我的想法是,当我将变量 URL 切换为实际的 HTTP 请求(并在我链接到的示例中打开 HTTP 请求方法)时,字符串 URL 出于某种原因返回 null一切运行良好。错误出在方法或字符串中。我不确定为什么 URL 会为空,因为它作为“sample.xml”加载到资产文件夹中
  • 您认为该 URL 为空,或者您知道该 URL 为空?设置断点并调试应用程序以确保。

标签: android xml


【解决方案1】:

您在哪里为context 变量在String xml = parser.getXmlFromUrl(URL, context); // getting XML 行定义了一个值?

我看到你的参数是 null。在getXmlFromUrl() 方法中,您不需要提供Context 作为参数,因为您在Activity 中。只需在没有 context 变量之前调用 getAssets() 方法即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多