現在、Android アプリケーションを実装しています。アプリにデータベースを作り、DDMSとSQLite Database Browser 2.0 b1で確認してみました。
作成したテーブルにはいくつかの行があります (私のプログラムでは System.out.println で確認できました) が、SQLite データベース ブラウザーには最初の行しか表示されません。
DDMSに表示されるデータベースファイルの最終更新時刻は正しいです。
この問題を解決する方法を教えてください。
public void onCreate(Bundle savedInstanceState) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.permitAll().build());
super.onCreate(savedInstanceState);
setContentView(R.layout.twitterdata);
helper = new CreateTableHelper(TwitterData.this);
db = helper.getWritableDatabase();
mSharedPreferences = getSharedPreferences(Const.PREFERENCE_NAME,
MODE_PRIVATE);
/**
* Handle OAuth Callback
*/
Uri uri = getIntent().getData();
if (uri != null && uri.toString().startsWith(Const.CALLBACK_URL)) {
String verifier = uri
.getQueryParameter(Const.IEXTRA_OAUTH_VERIFIER);
try {
AccessToken accessToken = twitter.getOAuthAccessToken(
requestToken, verifier);
User user = twitter.verifyCredentials();
List<Status> statuses = twitter.getUserTimeline(user
.getScreenName());
for (Status status : statuses) {
String tweet = status.getText();
String[] words = tweet.split(" ");
for (int i = 0; i < words.length; i++) {
if (words[i].length() > 1) {
String requestURL = "http://en.wikipedia.org/w/api.php?action=query&prop=categories&format=json&clshow=!hidden&cllimit=10&titles="
+ words[i];
URL wikiRequest = new URL(requestURL);
URLConnection connection = wikiRequest
.openConnection();
connection.setDoOutput(true);
Scanner scanner = new Scanner(
wikiRequest.openStream());
String response = scanner.useDelimiter("\\Z")
.next();
JSONObject json = Util.parseJson(response);
JSONObject query = json.getJSONObject("query");
JSONObject pages_jsn = query.getJSONObject("pages");
String pages = query.getString("pages");
int dqm_cnt = 0;
int dqm_while = 0;
String page_id_str = "";
Character dq = pages.charAt(0);
while (dqm_cnt < 2) {
Character tmp = pages.charAt(dqm_while);
if (tmp.equals(dq)) {
dqm_cnt++;
}
try {
Integer.parseInt(tmp.toString());
page_id_str += tmp;
} catch (NumberFormatException e) {
}
dqm_while++;
}
int page_id = Integer.parseInt(page_id_str);
// The article is available.
if (page_id != 1) {
JSONObject pageidjson = pages_jsn
.getJSONObject(page_id_str);
db.beginTransaction();
try {
// category is available
String tmp_interest = pageidjson
.getString("title");
JSONArray categories_array = pageidjson
.getJSONArray("categories");
// interests
db = helper.getReadableDatabase();
String[] i_columns = { "id", "name",
"count" };
SQLiteCursor ic = (SQLiteCursor) db.query(
"interests", i_columns, "name = '"
+ tmp_interest + "'", null,
null, null, null);
db.setTransactionSuccessful();
db.endTransaction();
if (ic.getCount() == 0) {
db = helper.getWritableDatabase();
db.beginTransaction();
ContentValues val_interest = new ContentValues();
val_interest.put("name", tmp_interest);
val_interest.put("count", 1);
db.insert("interests", null,
val_interest);
System.out.println("successfully inserted " + tmp_interest);
db.setTransactionSuccessful();
db.endTransaction();
} else {
ic.moveToFirst();
int i_id = ic.getInt(0);
db.beginTransaction();
ContentValues db_i_val = new ContentValues();
db_i_val.put("count", ic.getInt(2) + 1);
db.update("interests", db_i_val, "id = "
+ i_id, null);
db.setTransactionSuccessful();
db.endTransaction();
}
} catch (Exception e) {
Log.e("ERROR", e.toString());
}
}
scanner.close();
}
}
System.out.println("@" + status.getUser().getScreenName()
+ " - " + status.getText());
}
db = helper.getReadableDatabase();
String[] i_columns = { "id", "name",
"count" };
SQLiteCursor test = (SQLiteCursor) db.query(
"interests", i_columns, null, null,
null, null, null);
System.out.println("Table Interests has " + test.getColumnCount() + "rows");
db.setTransactionSuccessful();
db.endTransaction();
db.close();
Editor e = mSharedPreferences.edit();
e.putString(Const.PREF_KEY_TOKEN, accessToken.getToken());
e.putString(Const.PREF_KEY_SECRET, accessToken.getTokenSecret());
e.commit();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
}
解決する
System.out.println("Table Interests has " + test.getCount() + "rows");
の代わりに 使用System.out.println("Table Interests has " + test.getColumnCount() + "rows");
その後、正しい行数を取得できます。
- の位置に注意する必要があり
db.beginTransaction()
ます。私のコードでは、 とtry
の間db.beginTransaction()
にありdb.endTransaction()
ます。それは正しく機能しませんでした。