【问题标题】:Error converting result java.lang.NullPointerException错误转换结果 java.lang.NullPointerException
【发布时间】:2014-06-23 23:00:18
【问题描述】:

我是使用 JSON 的新手,我正在尝试从我的服务器上的数据库中获取数据,该数据库仅具有纬度和经度位置,以及用户名和时间戳。目前我不需要使用时间戳,而且我似乎遇到了一个我似乎无法弄清楚的问题。

    String result = "";
    double Lat = 0;
    double Lng = 0;
    String title = "";
    try{

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("removed");
                    HttpGet("Removed");

        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();
        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");
                System.out.println("Test while");
            }
            is.close();

            result=sb.toString();
            try{
                System.out.println("Test 7, last pass");
                JSONArray jArray = new JSONArray(result);
                System.out.println("Test 8");
                for(int i=0;i<jArray.length();i++){
                    System.out.println("Test for");
                    JSONObject json_data = jArray.getJSONObject(i);
                    System.out.println("Test 9");
                    Lat= json_data.getDouble("Latitude");
                    System.out.println("Test 10 "+ Lat);
                    Lng = json_data.getDouble("Longitude");
                    System.out.println("Test 11 "+ Lng);
                    title= json_data.getString("User");
                    System.out.println("Test 12 "+ title );
                    mMap.addMarker(new MarkerOptions().position(new LatLng(Lat,Lng)).title(title).icon(BitmapDescriptorFactory.fromResource(R.drawable.zombie_marker)));
                    System.out.println("Test for end");
                }
            }catch(JSONException e){
                System.out.println("Test inner catch");
                Log.e("log_tag", "Error parsing data "+e.toString());
                  Log.e("log_tag", "Failed data was:\n" + result);
            }
        }catch(Exception e){
            System.out.println("Test middle catch");
            Log.e("log_tag", "Error converting result "+e.toString());
              Log.e("log_tag", "Failed data was:\n" + result);
        }
    }catch(Exception e){
        System.out.println("Test outer catch");
        Log.e("log_tag", "Error in http connection "+e.toString());
            Log.e("log_tag", "Failed data was:\n" + result);
    }
    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    marker = mMap.addMarker(new MarkerOptions().position(home).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(home));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}

这是我正在使用的代码,这是我正在打印的日志猫我有一些打印出来看看我在哪里。

    05-07 14:09:40.911: I/System.out(13775): Test while
    05-07 14:09:40.921: I/System.out(13775): Test 7, last pass
    05-07 14:09:40.921: I/System.out(13775): Test 8
    05-07 14:09:40.921: I/System.out(13775): Test for
    05-07 14:09:40.921: I/System.out(13775): Test 9
    05-07 14:09:40.921: I/System.out(13775): Test 10 31.767669
    05-07 14:09:40.921: I/System.out(13775): Test 11 -106.502012
    05-07 14:09:40.921: I/System.out(13775): Test 12 Zombie_1
    05-07 14:09:40.921: I/System.out(13775): Test middle catch
    05-07 14:09:40.921: E/log_tag(13775): Error converting result java.lang.NullPointerException
    05-07 14:09:40.921: E/log_tag(13775): Failed data was:
    05-07 14:09:40.921: E/log_tag(13775): [{"Longitude":"-106.502012","Latitude":"31.767669","User":"Zombie_1","Time":"2014-04-24 21:48:15"},{"Longitude":"0","Latitude":"0","User":"Zombie_0","Time":"2014-04-24 21:48:15"},{"Longitude":"-106.502012","Latitude":"31.767669","User":"Zombie_2","Time":"2014-04-24 21:49:52"},{"Longitude":"-106.507849","Latitude":"31.78073","User":"Zombie_3","Time":"2014-04-24 21:49:52"}]

所以我的 PHP 正在工作并向我发送我需要的数据,但我什至看不到问题。这是我第一次使用 JSON,因此将不胜感激。或者有关从服务器上的数据库读取数据以进行 Android 开发的任何提示。

【问题讨论】:

    标签: android json database google-maps google-maps-markers


    【解决方案1】:

    我不知道究竟是什么在抛出NullPointerException,但它发生在这条线上:

    mMap.addMarker(new MarkerOptions()
    .position(new LatLng(json_data.getDouble("Latitude"),json_data.getDouble("Longitude")))
    .title(json_data.getString("User"))
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.zombie_marker))); 
    

    将该行拆分为多个语句,更新您的异常日志记录以包含堆栈跟踪,然后再次运行代码。大多数日志框架如果被告知要记录 Exception 对象,将打印堆栈跟踪。如果没有,e.printStackTrace() 可以直接用于将堆栈跟踪打印到 STDERR。这应该告诉你复杂语句的哪一部分抛出了NullPointerException

    一般来说,复杂的语句(就像你有的几个)使调试和快速识别错误比单独的语句在不同的行上更困难。将它们分开需要更多代码,但可以增强可读性和调试工作。

    【讨论】:

    • 嗯,这就是你在谷歌地图中使用地图标记的方式,我已经用过几次了,没有问题,唯一的一个是我使用的是 json 值而不是硬编码的值。
    • 我不怀疑这是使用它的正确方法。将所有内容放在一个语句中会使跟踪 NullPointerExceptions 变得困难。我只是主张单独提取 JSON 值,然后构建 LatLng,构建图标,然后构建 MarkerOptions。在单独的语句中做这些,我怀疑你会很容易找到 NPE。
    • 我试过了,但没有帮助。我相信问题出在其他地方,但由于某种原因,使用地图标记的线条之间存在问题。我转换了代码,问题在同一行,但中间 try 语句的第二个异常被抛出。更不用说我的新日志猫打印输出显示所有变量都是正确的。
    【解决方案2】:

    这是一个新手错误,我尝试向尚未存在的地图添加标记。不敢相信我看过了。

    刚把这条线移到顶部就可以了。

    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2013-11-07
      • 2015-04-12
      • 1970-01-01
      • 2018-03-18
      • 2016-07-10
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多