simon peter
simon peter

Reputation: 39

How to refresh the static value when activity executed again

Here there is an activity called groupchat. Here I am having the static object activeEventMO.

In this groupchat activity the chatting function is going on. If user1 send a message to user2 that message received by gcmIntent class. in this gcmIntent class I have added the code for notification. Here if user1 send a message for a particular event notification received for user2. If user2 clicks that notification it will take to the user to that chat window that means groupchat activity.

for that in gcmIntent class I used parcelable to send the eventMO to groupchat activity. if user1 send a message to user2 for event2 user2 receives a notification. if user2 clciks the notification it show the chatwindow of event1. because when first time I send the eventid1 by sing eventMO. So it holds the eventid1 forever. it cannot refreshed.

This is my groupchat activity code

public class GroupChatActivity extends Activity {  
    private static ListView listViewMessages;
    private static List<ChatMO> listChatMessageObjectses = new ArrayList<ChatMO>();
    private static MessagesListAdapter adapter;
    private static Handler UIHandler;
    private static int RESULT_LOAD_IMAGE = 1;
    private EditText inputMsg;
    private String formatDate;
    private Context context;
    private String dateResult;
    private static EventMO activeEventMO = null;
    private UserDelegate userDelegate = new UserDelegate();
    private MediaDelegates mediaDelegates = new MediaDelegates();
    private MessageDelegates messageDelegates = new MessageDelegates();
    private SharedPreferences sharedpreferences;
    private List<UserMO> eventUserMOs = new ArrayList<>();
    private Gson gson = new Gson();
    private UserMO userMO = new UserMO();
    private MessageMO messageMO = new MessageMO();
    private File imgFile;
    private MediaMO mediaMO = new MediaMO();

    // this method is for store the current event id to eventMO coz eventMO globally declared as static
   public  void getevent()
    {
        activeEventMO = (EventMO) getIntent().getParcelableExtra("eventMo");
    }

    public static void messageHandler(final MessageMO messageMo) {
        UIHandler = new Handler(Looper.getMainLooper());
        UIHandler.post(new Runnable() {
            public void run() {

                Log.e("messageHandler", messageMo.getEventTitle());
                ChatMO chatMO = new ChatMO();
                chatMO.setMessage(messageMo.getMessage());
                chatMO.setSelf(0);
                chatMO.setFromName(messageMo.getfromUserName());
                chatMO.setDate(messageMo.getDate());
                Log.e("handler", "eventMO" + activeEventMO);
                Log.e("handler", "messageMO" + messageMo);

                if (activeEventMO.getEventId() == messageMo.getEventId()) {
                    listChatMessageObjectses.add(chatMO);
                    listViewMessages.setAdapter(adapter);

                    adapter.notifyDataSetChanged();
               }
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putInt("APPSTATUS", 1);
        editor.putLong("eventId", activeEventMO.getEventId());
        editor.commit();
        Log.i("App", "start");
        AppActivityStatus.setActivityStarted();
        AppActivityStatus.setActivityContext(context);
    }

    @Override
    protected void onPause() {
        super.onPause();
        AppActivityStatus.setActivityStoped();
    }

    @Override
    protected void onResume() {
        super.onPause();
        AppActivityStatus.setActivityStarted();
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("App", "stop");
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putInt("APPSTATUS", 2);
        editor.commit();
        AppActivityStatus.setActivityStoped();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.image_upload, menu);
        return true;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            ChatMO chatMO = new ChatMO();
            chatMO.setMessage_type(Constants.IS_TYPE_CHAT_IMAGE);
            chatMO.setMessage(picturePath);
            chatMO.setSelf(1);
            chatMO.setIs_delete(0);
            chatMO.setFromName("");
            chatMO.setEvent_id(activeEventMO.getEventId());
            messageMO.setMessage("");
            messageMO.setRingeeUserId(userMO.getRingeeUserId());
            // messageMO.setDate(messageMO.getDate());
            messageMO.setMobileNumber(userMO.getMobileNumber());
            messageMO.setEventId(activeEventMO.getEventId());
            messageMO.setEventTitle(activeEventMO.getText());
            Log.e("sendbutton", "eventtitle" + messageMO.getEventTitle());
            messageMO.setfromUserName(userMO.getUserName());
            messageMO.setMessageType(Constants.MESSAGE_TYPE_MSG);
            mediaMO.setRingeeUserId(userMO.getRingeeUserId());
            mediaMO.setIsType(Constants.IS_TYPE_CHAT_IMAGE);
            imgFile = new File(picturePath);
            listChatMessageObjectses.add(chatMO);
            listViewMessages.setAdapter(adapter);
            adapter.notifyDataSetChanged();
            new AsyncTask<Void, Void, String>() {
                @Override
                protected String doInBackground(Void... arg0) {
                    return mediaDelegates.insertChatFile(context, imgFile, messageMO, eventUserMOs, mediaMO);
                }

                @Override
                protected void onPostExecute(String mediaBo) {
                    Toast.makeText(getApplicationContext(), "uploaded Status" + mediaBo, Toast.LENGTH_LONG).show();
                    if (!mediaBo.equals("null")) {
                        MediaMO mediaMO1 = gson.fromJson(mediaBo, new TypeToken<MediaMO>() {
                        }.getType());

                    }
                }
            }.execute(null, null, null);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        // noinspection SimplifiableIfStatement

        if (id == R.id.ic_menu_gallery) {

            Intent i = new Intent(
                    Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, RESULT_LOAD_IMAGE);
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final List<ChatMO> chatMOs1 = new ArrayList<>();
        activeEventMO = new EventMO();
        setContentView(R.layout.chat_main);
        context = getApplicationContext();
        String message = "";
        DatabaseHelper dbHelper = new DatabaseHelper(context);
        listChatMessageObjectses = chatMOs1;
        inputMsg = (EditText) findViewById(R.id.inputMsg);
        listViewMessages = (ListView) findViewById(R.id.list_view_messages);
        activeEventMO = (EventMO) getIntent().getParcelableExtra("eventMo");
        Log.e("oncreate", "eventMO" +activeEventMO);
        List<ChatMO> chatMOs = dbHelper.getGroupChatMessageForEvent(activeEventMO.getEventId());
        Log.e("oncreate", "chatMOs" + chatMOs);
        for (ChatMO chatMO1 : chatMOs) {
            message = chatMO1.getMessage();
            chatMO1.getEvent_id();
            chatMO1.getFromName();
            int messageType = chatMO1.getMessage_type();
            chatMO1.getDate();
            chatMO1.isSelf();
            if (messageType == 0) {
                chatMOs1.add(chatMO1);
            }


        }

        adapter = new MessagesListAdapter(context, chatMOs1);
        //adapter functionality added for show the previous chat list of event/invite
        listViewMessages.setAdapter(adapter);
        sharedpreferences = getSharedPreferences(Constants.SHARED_PREFERENCE_NAME, context.MODE_PRIVATE);
        // by default first primary user is current user in sql lite
        // user table
        userMO = dbHelper.getUserData(1);

here i am passing the eventMO in gcmIntent

Intent groupChatActFrag = new Intent(getApplicationContext(), GroupChatActivity.class);
            EventMO eventMO = new EventMO();
            eventMO.setEventId(messageMO.getEventId());
            Log.e("gcm","evetid"+eventMO.getEventId());
            groupChatActFrag.putExtra("eventMo", eventMO);
            groupChatActFrag.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            SharedPreferences.Editor editor = sharedpreferences.edit();
            editor.putString("MessageMO", gson.toJson(messageMO));
            editor.commit();
            PendingIntent contentIntent = PendingIntent.getActivity(this, 0, groupChatActFrag, 0);

            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_dialog_info).setContentTitle(messageMO.getEventTitle())
                    .setStyle(new NotificationCompat.BigTextStyle().bigText(messageMO.getfromUserName())).setContentText(messageMO.getMessage()).setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

            mBuilder.setContentIntent(contentIntent);

            mBuilder.setAutoCancel(true);
            Log.e("gcm","eventid"+messageMO.getEventId());

            mNotificationManager.notify((int) (long) eventMO.getEventId(), mBuilder.build());

        }

can you please tell me how to fix this issue thanks in advance

Upvotes: 0

Views: 118

Answers (1)

fergdev
fergdev

Reputation: 993

To refresh a variable after you activity or fragment has been destroyed you need to store in the saved bundled provided you in the method

public void onSavedInstanceState(final Bundle bundle)

And reset values with the bundle provided in the method

public void onCreate(final Bundle savedInstance)

Here is some good documentation

enter code here[Recreating an Activity - Android][1]

Upvotes: 1

Related Questions