检索 JSON 对象时出现空指针异常

2024-01-01

我是 JSON 新手。我在用http://pnrapi.appspot.com/ http://pnrapi.appspot.com/使用 JSON 获取特定列车的状态。但是,在尝试解析接收到的对象时,我总是遇到空指针异常。请帮忙。

这是我的代码。

public class PNRStatusActivity extends Activity {
    private static final String TAG_CONTACTS = "contacts";
    static InputStream is = null;
    JSONObject jObj = null;
    static String json = "";
    JSONArray contacts = null;
    private static String url = "http://pnrapi.appspot.com/4051234567";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Creating JSON Parser instance
        JSONObject jon=getJSONFromUrl(url);

        try {
            // Storing each json item in variable
            String id = jon.getString("status");
            Toast.makeText(getApplicationContext(), id, Toast.LENGTH_LONG).show();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //function to get JSON Object
    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;
    }
}

您的代码中存在很多问题,尽管不一定所有问题都与您的代码直接相关NullPointerException...

  1. In your getJSONFromUrl你正在使用的方法HttpPost当你看起来并没有真正发布任何内容时。使用HttpGet反而。

  2. 从响应中读取 JSON 字符串时,请使用getContentLength()的方法HttpEntity创建一个字节数组,例如(示例)...

    byte[] buffer = new byte[contentLength]并简单地阅读InputStream as...

    inStream.read(buffer)。当然,您需要一路进行错误检查。在您的情况下,您尝试逐行读取字符串并将“n”附加到每行。首先,您不需要以这种方式读取 JSON 字符串,如果您实际上打算附加换行符(在任何 Java 代码中的任何时间),它应该是“\n”。

  3. 要将字节数组转换为可用于 JSON 解析的字符串,只需执行以下操作...

    String jsonString = new String(buffer, "UTF-8")

  4. 从不指定iso-8859-1如果你真的可以避免的话,可以对任何东西进行编码。

  5. 当您创建您的Toast在你的Activity onCreate(...)方法,你使用getApplicationContext()。除非您确实确定应该在何时何地使用应用程序上下文,否则不要使用它。在主体中Activity's您可以简单地使用代码this为了Context当创建一个Toast.

  6. 正如其他人提到的,请确保检查null返回任何可能发生的地方。如果方法中发生异常并且返回的是null确保调用该方法的任何代码都会检查null.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索 JSON 对象时出现空指针异常 的相关文章

随机推荐

  • Java中的命令行查询

    我正在访问 MongoDB 并且希望在 Java 中重用典型的命令行查询 我知道可以使用 BasicDBObject 但我想使用如下命令行查询 db MyCollection find 我现在尝试使用数据库的 command 方法 Mong
  • 如何在新闻通讯中创建悬停效果?

    我正在创建一份时事通讯 并且我希望面板可以在鼠标悬停时更改背景颜色 鉴于时事通讯不会有标题 我正在内联定义所有样式 我很确定大多数流行的邮件客户端都会阻止 JS 所以我想知道是否可以在 style 属性中定义悬停效果 或者有没有其他方案可以
  • sed - 删除破折号之前的所有字符

    我有一个文件名列表 我想删除第一个实例之前的所有字符 因此 之前 列表中的以下名称将显示为 之后 列表中的名称 Before Adam James Welcome Home txt Mike Harry One Upon A Time tx
  • 将彩虹颜色映射到 RGB

    假设我有一个带构造函数的 RainbowColorsMapper 类RainbowColorsMapper int n 其中 n gt 2 现在我想要使用该方法获得从红色到紫色的彩虹颜色的连续映射mapper getColor int nu
  • C# 泛型及其具体实现

    是否可以在 C 中创建泛型方法并为给定类型添加具体实现 例如 void Foo
  • Ruby gem 是否存在像木马一样的风险?

    我正要安装一个我没听说过的人的 Ruby gem 但有些事情让我想到 这个人是谁 由于 gem 系统可以访问互联网 因此 Ruby gem 是否存在访问您计算机上的私有数据并将其传输到其他地方的风险 或者有针对这种情况的保护措施吗 当然有
  • 使用 cout 语句执行 while 循环

    所以我有一个关于do while环形 我正在学习 C 我知道你可以写这样的东西 do while a lt 10 cout lt lt message 关键是 我知道这在 C 中是可能的 但我们真的这样做了吗 我的意思是 cout thin
  • 如何解决 SQL0418N 错误

    我正在使用下面的语句来更新 插入一些数据到表中 如果我不带参数运行它 那就没问题 但是 一旦我尝试使用它抛出的参数执行它 SQL0418N 语句包含使用非类型化参数标记 DEFAULT 关键字或无效的空值 我已阅读错误信息here http
  • WebDeploy API (IIS 7) - “公共 API”:资源?

    有人知道 WebDeploy API 的任何资源吗 有人用过吗 我尝试在官方论坛上询问 并浏览了该网站 该网站说有 公共 API 但没有链接 文章 资源 博客文章或示例 http forums iis net t 1180561 aspx
  • 单击事件不适用于动态添加的 Li->span->id

    单击事件不适用于动态添加的 Li gt span gt id case 101 strLink li a span Form 101 span a li sidebar nav append strLink break sidebar na
  • 如何将文件夹标记为包?

    我曾经认为文件夹需要有扩展名 以便 Finder 将它们识别为包 该扩展将在所属应用程序的 Info plist 中声明 显然还有另一种更优雅的方式 但我不知道它是如何完成的 例如 iPhoto 图库被 Finder 视为一个包 但它没有扩
  • 为什么更喜欢属性而不是公共变量? [复制]

    这个问题在这里已经有答案了 其他能够对 setter 中的值进行健全性检查是否有更根本的原因来选择属性而不是公共变量 我们以前有过这个主题 但现在找不到任何内容 简而言之 您的需求可能会发生变化 如果现在没有健全性检查 将来可能需要进行健全
  • byte[] 数组的长度

    String str 123456789 byte bytes str getBytes 我想进行以下循环 for int j 0 j lt bytes length j b bytes j b将存储数组的每个字节 但我似乎无法正确获取数组
  • GCE 上没有名为“google.cloud._helpers”的模块

    我在导入时遇到错误google cloud bigquery在普通教育考试上 它不会发生在非 GCE 的环境中 我执行了更新pip 你知道为什么吗 user1 sv1 python Python 3 6 0 Continuum Analyt
  • 如何获取 Ruby on Rails 生成的表单元素 id 以供 JavaScript 中参考?

    当使用form for助手和一个text field调用时 Ruby on Rails 会生成一个唯一的 id
  • eslint 解析错误:意外的标记 =

    为什么 eslint 会抛出这个错误 Javascript 在 React Native 中运行没有问题 该代码取自react navigation 示例 https reactnavigation org docs intro https
  • Qt foreach 中的第二项是否只计算一次?

    如果我有这个代码 foreach QListWidgetItem ii selectedItems urls push back ii gt data Qt ToolTip toString Would selectedItems 只被调用
  • Javascript“eval”是同步还是异步?

    考虑以下代码 eval a 5 b 10 eval a b 如果这里第一个 eval 运行很长时间 我的下一个 eval 是否会返回一个错误 指出 a 和 b 未定义 因为 a 和 b 值在第一个 eval 结束时初始化 eval方法是同步
  • 将 ShowCaseView 与 ActionBarCompat / ActionBarSherlock Android 结合使用

    我在用ShowcaseView图书馆来自here https github com Espiandev ShowcaseView在我的安卓应用程序中 我想用ShowcaseView with Actionbar Compat 但我不知道如何
  • 检索 JSON 对象时出现空指针异常

    我是 JSON 新手 我在用http pnrapi appspot com http pnrapi appspot com 使用 JSON 获取特定列车的状态 但是 在尝试解析接收到的对象时 我总是遇到空指针异常 请帮忙 这是我的代码 pu