Android上的JACKSON Json真的很慢吗?

Android上的JACKSON Json真的很慢吗?,android,json,parsing,jackson,Android,Json,Parsing,Jackson,虽然在我的平板电脑上没有问题,但在模拟器上运行一个大文件的json解析速度非常慢 我读到JACKSON JSON是一种非常快速的处理方法,所以我安装了它,结果更糟 如果我做错了什么,我只是在使用核心库,所以基本上没有开销 我将数据放在sqllite数据库中。它的运行速度同样慢,而且没有转储到sqlite中,因此db调用不是问题所在 有没有关于这是否尽可能优化的想法 以下是完整的代码: public boolean dowloadfilejson(double olng,double olat,

虽然在我的平板电脑上没有问题,但在模拟器上运行一个大文件的json解析速度非常慢

我读到JACKSON JSON是一种非常快速的处理方法,所以我安装了它,结果更糟

如果我做错了什么,我只是在使用核心库,所以基本上没有开销

我将数据放在sqllite数据库中。它的运行速度同样慢,而且没有转储到sqlite中,因此db调用不是问题所在

有没有关于这是否尽可能优化的想法

以下是完整的代码:

public boolean dowloadfilejson(double olng,double olat, double odistance,DatabaseHelper dbc)
{   URL url;

    SQLiteDatabase db =  dbc.getWritableDatabase();
    db.setLockingEnabled(true);
    db.execSQL("delete from deals_categories;delete from deals;");      

    db.beginTransaction();

    //JsonFactory fac = Util.getJsonFactory(); // recycle JsonFactory
    JsonFactory fac = new JsonFactory(); // or just use once.
    JsonParser jp = null;

            try {
                url = new URL(URL + "lat=" + "41.778049" +"&lon="+ "-88.086898" + "&distance=10");
                jp = fac.createJsonParser(url);
                jp.nextValue();

                while (jp.nextValue() != null)
                {
                    //jp.getCurrentName();
                    if(jp.getCurrentName() =="lat")
                    {
                        Log.i("1",jp.getText());    
                    }
                    if(jp.getCurrentName() =="lon")
                    {
                        Log.i("1",jp.getText());    
                    }
                    if(jp.getCurrentName() =="distance")
                    {
                        Log.i("1",jp.getText());    
                    }
                    if(jp.getCurrentName() =="totalSize")
                    {
                        Log.i("1",jp.getText());    
                    }
                    if(jp.getCurrentName() =="items")
                    {
                        while(jp.nextValue() != JsonToken.END_ARRAY) //items array
                        {String id = "";
                        ContentValues cv = new ContentValues();
                        //Log.i("ITEM",jp.getText());   
                            while(jp.nextValue() != JsonToken.END_OBJECT) //each item
                            {   //Log.i("ITEMin",jp.getText()); 
                            /*   cv.put("deal_id",c.getString("_id"));
                               cv.put("mtype",c.getString("type"));
                               cv.put("dealUrl",c.getString("dealUrl"));
                               cv.put("options_option_buyUrl",c.getString("buyUrl"));
                               cv.put("options_option_redemptionLocations_redemptionLocation_city", c.getString("city"));
                               cv.put("startAt" ,c.getString("startAt"));
                            cv.put("endAt" ,c.getString("endAt"));
                            cv.put("lat" ,c.getString("lat"));
                            cv.put("lng" ,c.getString("lng"));
                            cv.put("mediumImageUrl" ,c.getString("mediumImageUrl"));
                            cv.put("announcementTitle" ,c.getString("title"));
                              */


                              if(jp.getCurrentName() == "_id" )
                              {
                                 id = jp.getText();
                                  cv.put("deal_id",id);  
                              }
                              if(jp.getCurrentName() == "type" )
                              {
                                  cv.put("mtype",jp.getText());  
                              }
                              if(jp.getCurrentName() == "dealUrl" )
                              {
                                  cv.put("dealUrl",jp.getText());  
                              }
                              if(jp.getCurrentName() == "buyUrl" )
                              {
                                  cv.put("options_option_buyUrl",jp.getText());  
                              } 
                              if(jp.getCurrentName() == "city" )
                              {
                                  cv.put("options_option_redemptionLocations_redemptionLocation_city",jp.getText());  
                              } 

                              if(jp.getCurrentName() == "startAt" )
                              {
                                  cv.put("startAt",jp.getText());  
                              } 
                              if(jp.getCurrentName() == "endAt" )
                              {
                                  cv.put("endAt",jp.getText());  
                              } 
                              if(jp.getCurrentName() == "lat" )
                              {
                                  cv.put("lat",jp.getText());  
                              } 

                              if(jp.getCurrentName() == "lng" )
                              {
                                  cv.put("lng",jp.getText());  
                              }                                
                              if(jp.getCurrentName() == "mediumImageUrl" )
                              {
                                  cv.put("mediumImageUrl" ,jp.getText());  
                              }
                              if(jp.getCurrentName() == "title" )
                              {
                                  cv.put("announcementTitle" ,jp.getText());  
                              }



                            if(jp.getCurrentName() == "catname" )
                            {
                            String[] s = jp.getText().split("\\|");

                            for (String val : s) {

                               ContentValues cvcat = new ContentValues();
                              cvcat.put( "active" ,1);
                              cvcat.put("catname" ,val);
                            db.insertWithOnConflict ("categories", null, cvcat,  SQLiteDatabase.CONFLICT_IGNORE);
                            cvcat = null;
                            ContentValues cvcatd = new ContentValues();
                            cvcatd.put("catname" ,val);
                            cvcatd.put("deal_id",id);
                            db.insertWithOnConflict ("deals_categories", null, cvcatd,  SQLiteDatabase.CONFLICT_IGNORE);
                            cvcatd = null;
                                }

                            }
                            }
                            id = "";
                            db.insertWithOnConflict ("deals", null, cv, SQLiteDatabase.CONFLICT_IGNORE);
                            cv = null;
                        }
                    }
                }
                return true;


            } catch (JsonParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            return false;
}
finally{
    db.setTransactionSuccessful();
    db.endTransaction();            
    /*  if(ih!=null)
        ihdc.close();
        ihc.close();
        ih.close();
        */
        db.setLockingEnabled(false);
        db.close();
        dbc.close();

        }

}
编辑
我发现处理速度非常慢的问题是CONTENTVALUES。我想我将放弃使用claass,并将其写得很长,看看这是否有帮助。

您确定要在那里使用流式API方法吗?虽然它可以更快,但它扩展了很多代码,因此使用100行代码代替5行代码。当您使用字符串比较时,它甚至可能不会更快。 因此,也许可以尝试使用
ObjectMapper
并直接将数据绑定到POJO