android sqlite json,android - How to store JSON in SQLite - Stack Overflow

I am having issues with storing JSON data to sqlite. This is the code which I am trying to implement right now. The JSON data is not particularly big with only 40 lines in it.

The main activity is:

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 nameValuePairs = new ArrayList();

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

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;

}

}

The adapter is:

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;

}

}

I am not sure where to go from here as there are still issues. The log cat displays the following:

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.(DBAdapter.java:43)

12-04 12:43:09.691: E/AndroidRuntime(21334): at ta.dabase.DatabaseActivity.(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

Finally, I was wondering if anyone could help me with debugging in a sense what and where to place appropriate logging code so to detect where code is going wrong exactly?

Thanks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值