Cómo almacenar JSON en SQLite

Tengo problemas con el almacenamiento de datos JSON a sqlite. Este es el código que estoy tratando de implementar ahora mismo. Los datos de JSON no son particularmente grandes con sólo 40 líneas en él.

La actividad principal es:

public class DatabaseActivity extends Activity { /** Called when the activity is first created. */ public DBAdapter DBAdapter =new DBAdapter(this); TextView txt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create a crude view - this should really be set via the layout resources // but since its an example saves declaring them in the XML. LinearLayout rootLayout = new LinearLayout(getApplicationContext()); txt = new TextView(getApplicationContext()); rootLayout.addView(txt); setContentView(rootLayout); // Set the text and call the connect function. txt.setText("Connecting..."); //call the method to run the data retreival txt.setText(getServerData(KEY_13)); } public static final String KEY_13 = "http://xxx.xxx.xxx/api/train.php"; private String getServerData(String returnString) { InputStream is = null; String result = ""; //the train line to send ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("code","A")); //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(KEY_13); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string 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(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //parse json data try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); DBAdapter.insertTrain(json_data.getString("id"), json_data.getString("code"), json_data.getString("station"), json_data.getString("platform"), json_data.getString("timetillstation"), json_data.getString("traindestination"), //Get an output to the screen returnString += "\n\t" + jArray.getJSONObject(i); } }catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); } return returnString; } } 

El adaptador es:

 public class DBAdapter{ public static final String KEY_ID = "id"; public static final String KEY_Code = "code"; public static final String KEY_Station = "station"; public static final String KEY_Platform = "platform"; public static final String KEY_TimeTillStation = "timetillstation"; public static final String KEY_TrainDestination = "traindestination"; private static final String TAG = "DBAdapter"; private static final String DATABASE_NAME = "trains"; private static final String DATABASE_TABLE = "Mekerel"; private static final int DATABASE_VERSION = 1; private static final String DATABASE_CREATE = "create table titles (id integer primary key, " + "code text not null," + "station text not null," + "platform text not null," + "timetillstation text not null," + "traindestination text not null);"; private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); this.db=DBHelper.getWritableDatabase(); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS titles"); onCreate(db); } } //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } //---closes the database--- public void close() { DBHelper.close(); } //---insert a train into the database--- public long insertTrain(String id, String code, String station, String platform, String timetillstation, String traindestination) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_ID, id); initialValues.put(KEY_Code, code); initialValues.put(KEY_Station, station); initialValues.put(KEY_Platform, platform); initialValues.put(KEY_TimeTillStation, timetillstation); initialValues.put(KEY_TrainDestination, traindestination); return db.insert(DATABASE_TABLE, null, initialValues); } //---retrieves all the ttrain--- public Cursor getAllTrains() { return db.query(DATABASE_TABLE, new String[] { KEY_ID, KEY_Code, KEY_Station, KEY_Platform, KEY_TimeTillStation, KEY_TrainDestination}, null, null, null, null, null, null); } //---retrieves a particular train--- public Cursor getTrain(long id) throws SQLException { Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { KEY_ID, KEY_Code, KEY_Station, KEY_Platform, KEY_TimeTillStation, KEY_TrainDestination}, KEY_ID + "=" + id, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } //---updates a train--- public boolean updateTrain(long id, String code, String station, String platform, String timetillstation, String traindestination) { ContentValues args = new ContentValues(); args.put(KEY_Code, code); args.put(KEY_Station, station); args.put(KEY_Platform, platform); args.put(KEY_TimeTillStation, timetillstation); args.put(KEY_TrainDestination, traindestination); return db.update(DATABASE_TABLE, args, KEY_ID + "=" + id, null) > 0; } } 

No estoy seguro de dónde ir desde aquí, ya que todavía hay problemas. El logcat muestra lo siguiente:

 12-04 12:43:09.691: E/AndroidRuntime(21334): FATAL EXCEPTION: main 12-04 12:43:09.691: E/AndroidRuntime(21334): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{ta.dabase/ta.dabase.DatabaseActivity}: java.lang.NullPointerException 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1680) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread.access$1500(ActivityThread.java:123) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.os.Handler.dispatchMessage(Handler.java:99) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.os.Looper.loop(Looper.java:130) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread.main(ActivityThread.java:3835) 12-04 12:43:09.691: E/AndroidRuntime(21334): at java.lang.reflect.Method.invokeNative(Native Method) 12-04 12:43:09.691: E/AndroidRuntime(21334): at java.lang.reflect.Method.invoke(Method.java:507) 12-04 12:43:09.691: E/AndroidRuntime(21334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 12-04 12:43:09.691: E/AndroidRuntime(21334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 12-04 12:43:09.691: E/AndroidRuntime(21334): at dalvik.system.NativeStart.main(Native Method) 12-04 12:43:09.691: E/AndroidRuntime(21334): Caused by: java.lang.NullPointerException 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 12-04 12:43:09.691: E/AndroidRuntime(21334): at ta.dabase.DBAdapter.<init>(DBAdapter.java:43) 12-04 12:43:09.691: E/AndroidRuntime(21334): at ta.dabase.DatabaseActivity.<init>(DatabaseActivity.java:32) 12-04 12:43:09.691: E/AndroidRuntime(21334): at java.lang.Class.newInstanceImpl(Native Method) 12-04 12:43:09.691: E/AndroidRuntime(21334): at java.lang.Class.newInstance(Class.java:1409) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 12-04 12:43:09.691: E/AndroidRuntime(21334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672) 12-04 12:43:09.691: E/AndroidRuntime(21334): ... 11 more 

Por último, me preguntaba si alguien podría ayudarme con la depuración en un sentido de qué y dónde colocar el código de registro adecuado para detectar dónde el código va mal exactamente? Gracias

Para resolver este problema debe seguir estos pasos

1) Cree la clase que contiene propiedades según sus datos de json.

2) Deserialice sus datos de json en su clase. ( Mapeo de json con clase )

3) Almacene los valores de todas las propiedades de esa clase en la base de datos ( sqllite ) ( Mapeo de la clase con la base de datos )

4) **** ¡Salva tu trabajo ***!

Hecho ! ¡Disfrute Jsoning !!

  • ¿Cómo agregar sub consulta en SQLITE Android junto con 'IN'?
  • Acceso a los datos principales de iOS desde Android
  • Android - cuándo llamar a db.setTransactionSuccessful ()?
  • Android: actualizar la versión de la base de datos y agregar nueva tabla
  • La forma más rápida y rápida de obtener nuevos mensajes sms al iniciar la aplicación - Android
  • Recuperar el último registro en la tabla SQLite (de nuevo)
  • Android cifrar / descifrar sqlite base de datos 100% seguro
  • SQLite es sin tipo?
  • ¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?
  • Intento de reabrir un objeto sqlitedatabase ya cerrado
  • Android NullPointerException al ejecutar la consulta en la base de datos SQLite
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.