[英]How strart method execution after one method finished executing
我正在做簡單的筆記應用程序寬度 Sqlite Mysql 同步。 問題是,當我將數據保存在 edit_note_fragment 中,然后 go 回到片段寬度時,我的 recyclerView 我的列表不會加載新數據。 這是因為在我的 recyclerView 中刷新了我的列表后,String 請求需要一段時間才能執行並保存數據。 我已經嘗試過延遲刷新,但是來自服務器的響應有時需要更長的時間並且會發生同樣的事情。 知道數據保存后如何執行刷新嗎? 這是我的代碼
編輯筆記片段
buttonBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (StringId != null) {
UpdateNote();
}else { CreateNote(); }
Fragment fragment = new NotesFragment();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayoutHome, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
private void CreateNote() {
final String name = EtTitle.getText().toString().trim();
final String des = EtDes.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, Api.URL_CREATE_IVDATA,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject obj = new JSONObject(response);
if (!obj.getBoolean("error")) {
//if there is a success
Log.d(TAG, "Created");
//storing the name to sqlite with status synced
JSONArray ivdata = (obj.getJSONArray("ivdata"));
for (int i = 0; i < ivdata.length(); i++) {
JSONObject json = ivdata.getJSONObject(i);
int serverId = json.getInt("sid");
String StringSid = String.valueOf(serverId);
saveNameToLocalStorage(name, des, NAME_SYNCED_WITH_SERVER, StringSid);
}
} else {
//if there is some error
//saving the name to sqlite with status unsynced
saveNameToLocalStorage(name, des, NAME_NOT_SYNCED_WITH_SERVER, null);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
saveNameToLocalStorage(name, des, NAME_NOT_SYNCED_WITH_SERVER, null);
Log.d(TAG, "saving to local storage");
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("t1", myToken);
params.put("t2", "notes");
params.put("c1", name);
params.put("c2", des);
return params;
}
};
VolleySingleton.getInstance(context).addToRequestQueue(stringRequest);
}
private void saveNameToLocalStorage(String name,String des, int status, String sid) {
mDatabase.addNote(name, des, status, sid);
Note n = new Note(name,des, status, sid);
noteList.add(n);
}
我的 recyclerview 的片段寬度(刷新在 onViewCreated 中執行)
private void refresh()
{
noteList.clear();
mDatabase = new SqliteDatabase(context);
noteList = mDatabase.listContacts();
Log.d(TAG, "refreshing");
if(!(noteList.size()<1))
{
notesAdapter = new NotesAdapter(noteList, context, this);
recyclerView.setAdapter(notesAdapter);
} else {
recyclerView.setVisibility(View.GONE);
Toast.makeText(context, "There is no Notes in the database. Start adding now", Toast.LENGTH_LONG).show();
}
}
SqliteDatabaseHelper
public ArrayList<Note> listContacts() {
String sql = "select * from " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<Note> noteList= new ArrayList<>();
Cursor cursor = db.rawQuery(sql, null);
if (cursor.moveToFirst()) {
do {
int id = Integer.parseInt(cursor.getString(0));
String c1 = cursor.getString(1);
String c2 = cursor.getString(2);
int status = Integer.parseInt(cursor.getString(3));
String sid = cursor.getString(4);
noteList.add(new Note(id, c1, c2, status, sid));
}
while (cursor.moveToNext());
}
cursor.close();
return noteList;
}
public boolean addNote(String name,String des, int status, String sid) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_NAME, name);
contentValues.put(COLUMN_DESC, des);
contentValues.put(COLUMN_STATUS, status);
contentValues.put(COLUMN_SID, sid);
db.insert(TABLE_NAME, null, contentValues);
db.close();
return true;
}
您可以在數據庫更新時設置監聽器。 當回調被調用時,您會刷新列表。 (如果我正確理解了這個問題,哈哈)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.