簡體   English   中英

一種方法完成執行后如何啟動方法執行

[英]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;
    }

您可以在數據庫更新時設置監聽器。 當回調被調用時,您會刷新列表。 (如果我正確理解了這個問題,哈哈)

SQLITE 數據庫更新回調

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM