MySQLデータベースを管理する Android アプリを作成し、バックグラウンドで AsyncTask の HttpRequest によって呼び出されるいくつかのPHPクラスを使用して行を接続/追加/削除します。私が欲しいのは、次のような単純なものが1つだけです。
ホーム画面→画面追加→追加ボタン押下→ホーム画面
しかし、データベースに行を追加すると、リストビューが更新されません。しかし、アプリを再起動すると、すべてが再作成され、リストビューに追加された行が表示されます。
データベースから情報を取得するには、次のコードを使用します。
class LoadAllBooks extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(LoadAllActivity.this);
pDialog.setMessage("Loading authors. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* Getting all books from a URL
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_books, "GET",
params);
// Check your log cat for JSON reponse
Log.d("All Authors: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// Products found
// Getting Array of Products
products = json.getJSONArray(TAG_BOOKS);
// Looping through all products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
// Storing each JSON item in variable
String author = c.getString(TAG_AUTHOR);
// Creating a new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// Adding each child node to HashMap key => value.
// map.put(TAG_ID, id);
map.put(TAG_AUTHOR, author);
// Adding HashList to ArrayList
booksList.add(map);
}
} else {
// No products found
}
}
catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing a background task, dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// Dismiss the dialog after getting all products
pDialog.dismiss();
// Updating UI from the background thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
SimpleAdapter adapter = new SimpleAdapter(
LoadAllActivity.this, booksList, R.layout.menu_row,
new String[] { TAG_ID, TAG_AUTHOR }, new int[] {
R.id.id, R.id.book });
// Updating listview
setListAdapter(adapter);
}
});
}
を更新するときに更新する方法があることは知っていますがbooksList
、さまざまな方法でそれを試しましたが、私が考える最も単純な方法ではありません。
私が解決したい方法は、メイン アクティビティを再起動して、この onCreate(Bundle ...) メソッドを呼び出すことです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Hashmap for ListView
booksList = new ArrayList<HashMap<String, String>>();
// Loading products in the background thread
new LoadAllBooks().execute();
// Get listview
ListView lv = getListView();
// On seleting single product
// Launching Edit Product Screen
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int pos,
long id) {
String author = ((TextView) view.findViewById(R.id.book))
.getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(),
AuthorTitlesActivity.class);
// Sending pid to next activity
in.putExtra(TAG_AUTHOR, author);
// Starting a new activity and expecting some response back.
startActivityForResult(in, 100);
}
});
}
この解決策を実現する方法はありますか?