Как хранить в JSON в SQLite
у меня возникли проблемы с хранением данных JSON в sqlite. Это код, который я пытаюсь сейчас реализовать. Данные JSON не особенно велики, в них всего 40 строк.
основной вид деятельности:
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 += "nt" + jArray.getJSONObject(i);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return returnString;
}
}
адаптер:
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;
}
}
Я не уверен, куда идти отсюда, так как есть еще вопросы. В журнале cat отображается следующее:
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.access00(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
наконец, мне было интересно, может ли кто-нибудь помочь мне с отладкой в некотором смысле что и где разместить соответствующий код журнала, чтобы определить, где код идет не так? Спасибо
1 ответов
чтобы решить эту проблему, вы должны следовать этому шаги
1) создайте класс, который содержит свойства в соответствии с вашими данными json.
2) Десериализуйте данные json в свой класс. ( отображение json с классом)
3) сохранить значения всех свойств этого класса в базе(sqllite) (отображение класса с базой данных )
4) * * * * сохраните свою работу***!
готово ! Наслаждайтесь Jsoning !!