Related
I am using quickblox for my android application. I am able to register, login user, even add custom objects and retrieve them from the quick-blox server, but in chatting listing screen my count is coming wrong.
I am getting issue with unread count
Here is my code flow:-
public class ConversationFragment extends Fragment implements Observer, DialogsManager.ManagingDialogsCallbacks {
ConversationViewModel conversationViewModel;
FragmentConversationBinding binding;
QBChatDialogMessageListener allDialogsMessagesListener;
SystemMessagesListener systemMessagesListener;
QBSystemMessagesManager systemMessagesManager;
QBIncomingMessagesManager incomingMessagesManager;
private DialogsManager dialogsManager;
public ConversationFragment() {
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_conversation, container, false);
getActivity().getWindow().setBackgroundDrawableResource(R.drawable.bg_img);
View view = binding.getRoot();
systemMessagesListener = new SystemMessagesListener();
dialogsManager = new DialogsManager();
return view;
}
private void setUpModel() {
Bundle mBundle = getArguments();
if (mBundle != null) {
conversationViewModel = new ConversationViewModel(getActivity(), binding, getArguments().getString("DialogIdData"));
} else {
conversationViewModel = new ConversationViewModel(getActivity(), binding, "");
}
binding.setConversationViewModel(conversationViewModel);
setUpObserver(conversationViewModel);
}
private void setUpObserver(ConversationViewModel observer) {
observer.addObserver(this);
}
#Override
public void update(Observable o, Object arg) {
}
#Override
public void onDestroy() {
super.onDestroy();
}
#Override
public void onResume() {
super.onResume();
setUpModel();
}
#Override
public void onPause() {
super.onPause();
unregisterQbChatListeners();
}
public void unregisterQbChatListeners() {
if (incomingMessagesManager != null) {
incomingMessagesManager.removeDialogMessageListrener(allDialogsMessagesListener);
}
if (systemMessagesManager != null) {
systemMessagesManager.removeSystemMessageListener(systemMessagesListener);
}
dialogsManager.removeManagingDialogsCallbackListener(this);
}
#Override
public void onDialogCreated(QBChatDialog chatDialog) {
}
#Override
public void onDialogUpdated(String chatDialog) {
}
#Override
public void onNewDialogLoaded(QBChatDialog chatDialog) {
}
private class SystemMessagesListener implements QBSystemMessageListener {
#Override
public void processMessage(final QBChatMessage qbChatMessage) {
dialogsManager.onSystemMessageReceived(qbChatMessage);
}
#Override
public void processError(QBChatException e, QBChatMessage qbChatMessage) {
}
}
private BroadcastReceiver mNotificationReceiver = new BroadcastReceiver() {
#Override
public void onReceive(Context context, Intent intent) {
}
};
}
Here is my Fragment viewModel code :-
public class ConversationViewModel extends Observable implements DialogsManager.ManagingDialogsCallbacks {
private static final int REQUEST_DIALOG_ID_FOR_UPDATE = 165;
public Context mContext;
FragmentConversationBinding binding;
private ActionMode currentActionMode;
public QBRequestGetBuilder requestBuilder;
private int skipRecords = 0;
private DialogsAdapter dialogsAdapter;
private QBChatDialogMessageListener allDialogsMessagesListener;
private SystemMessagesListener systemMessagesListener;
private QBSystemMessagesManager systemMessagesManager;
private QBIncomingMessagesManager incomingMessagesManager;
private DialogsManager dialogsManager;
private QBUser currentUser;
private String id;
public ConversationViewModel(Context mContext, FragmentConversationBinding binding, String Dialogid) {
this.mContext = mContext;
this.binding = binding;
this.id = Dialogid;
initUI();
}
public void initUI() {
allDialogsMessagesListener = new AllDialogsMessageListener();
systemMessagesListener = new SystemMessagesListener();
dialogsManager = new DialogsManager();
currentUser = ChatHelper.getCurrentUser();
initList();
registerQbChatListeners();
if (QbDialogHolder.getInstance().getDialogs().size() > 0) {
loadDialogsFromQb(true, true);
} else {
loadDialogsFromQb(false, true);
}
if (!id.isEmpty()) {
loadUpdatedDialog(id);
id = "";
} else {
updateDialogsList();
}
}
public void initList() {
dialogsAdapter = new DialogsAdapter(mContext, new ArrayList<>(QbDialogHolder.getInstance().getDialogs().values()));
binding.listDialogsChats.setAdapter(dialogsAdapter);
binding.listDialogsChats.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position);
if (currentActionMode == null) {
ChatActivity.startForResult(((Activity) mContext), REQUEST_DIALOG_ID_FOR_UPDATE, selectedDialog);
} else {
dialogsAdapter.toggleSelection(selectedDialog);
}
}
});
binding.listDialogsChats.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
#Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position);
dialogsAdapter.selectItem(selectedDialog);
return true;
}
});
requestBuilder = new QBRequestGetBuilder();
binding.swipyRefreshLayout.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
#Override
public void onRefresh(SwipyRefreshLayoutDirection direction) {
requestBuilder.setSkip(skipRecords += ChatHelper.DIALOG_ITEMS_PER_PAGE);
loadDialogsFromQb(true, false);
}
});
}
private void loadUpdatedDialog(String dialogId) {
ChatHelper.getInstance().getDialogById(dialogId, new QbEntityCallbackImpl<QBChatDialog>() {
#Override
public void onSuccess(QBChatDialog result, Bundle bundle) {
QbDialogHolder.getInstance().addDialog(result);
updateDialogsAdapter();
}
#Override
public void onError(QBResponseException e) {
}
});
}
public void updateDialogsList() {
requestBuilder.setSkip(skipRecords = 0);
loadDialogsFromQb(true, true);
}
#Override
public void onDialogCreated(QBChatDialog chatDialog) {
updateDialogsAdapter();
}
#Override
public void onDialogUpdated(String chatDialog) {
updateDialogsAdapter();
}
#Override
public void onNewDialogLoaded(QBChatDialog chatDialog) {
updateDialogsAdapter();
}
private void registerQbChatListeners() {
incomingMessagesManager = QBChatService.getInstance().getIncomingMessagesManager();
systemMessagesManager = QBChatService.getInstance().getSystemMessagesManager();
if (incomingMessagesManager != null) {
incomingMessagesManager.addDialogMessageListener(allDialogsMessagesListener != null
? allDialogsMessagesListener : new AllDialogsMessageListener());
}
if (systemMessagesManager != null) {
systemMessagesManager.addSystemMessageListener(systemMessagesListener != null
? systemMessagesListener : new SystemMessagesListener());
}
dialogsManager.addManagingDialogsCallbackListener(this);
}
private class SystemMessagesListener implements QBSystemMessageListener {
#Override
public void processMessage(final QBChatMessage qbChatMessage) {
dialogsManager.onSystemMessageReceived(qbChatMessage);
}
#Override
public void processError(QBChatException e, QBChatMessage qbChatMessage) {
}
}
private class AllDialogsMessageListener extends QbChatDialogMessageListenerImp {
#Override
public void processMessage(final String dialogId, final QBChatMessage qbChatMessage, Integer senderId) {
if (!senderId.equals(ChatHelper.getCurrentUser().getId())) {
dialogsManager.onGlobalMessageReceived(dialogId, qbChatMessage);
}
}
}
public void updateDialogsAdapter() {
dialogsAdapter.updateList(new ArrayList<>(QbDialogHolder.getInstance().getDialogs().values()));
}
public void loadDialogsFromQb(final boolean silentUpdate, final boolean clearDialogHolder) {
if (!silentUpdate) {
binding.progressDialogs.setVisibility(View.VISIBLE);
}
ChatHelper.getInstance().getDialogs(requestBuilder, new QBEntityCallback<ArrayList<QBChatDialog>>() {
#Override
public void onSuccess(ArrayList<QBChatDialog> dialogs, Bundle bundle) {
binding.progressDialogs.setVisibility(View.GONE);
binding.swipyRefreshLayout.setRefreshing(false);
if (clearDialogHolder) {
QbDialogHolder.getInstance().clear();
}
QbDialogHolder.getInstance().addDialogs(dialogs);
updateDialogsAdapter();
}
#Override
public void onError(QBResponseException e) {
binding.progressDialogs.setVisibility(View.GONE);
binding.swipyRefreshLayout.setRefreshing(false);
Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
Here is my Chat Activity:-
public class ChatActivity extends BindingActivity<ActivityChatBinding> implements OnImagePickedListener {
ChatViewModel chatViewModel;
public static final int REQUEST_CODE_ATTACHMENT = 721;
public static final String EXTRA_DIALOG_ID = "dialogId";
#Override
protected int getLayoutId() {
return R.layout.activity_chat;
}
public static void startForResult(Activity activity, int code, QBChatDialog dialogId) {
Intent intent = new Intent(activity, ChatActivity.class);
intent.putExtra(ChatActivity.EXTRA_DIALOG_ID, dialogId);
activity.startActivityForResult(intent, code);
}
#Override
public void setInitBinding() {
getWindow().setBackgroundDrawableResource(R.drawable.bg_img);
chatViewModel = new ChatViewModel(this, binding);
binding.setChatViewModel(chatViewModel);
}
#Override
protected void setUpObserver() {
chatViewModel.addObserver(this);
}
#Override
public void update(Observable o, Object arg) {
}
#Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
#Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
#Override
public void onBackPressed() {
binding.getChatViewModel().releaseChat();
binding.getChatViewModel().sendDialogId();
super.onBackPressed();
}
#Override
public void onImagePicked(int requestCode, File file) {
switch (requestCode) {
case REQUEST_CODE_ATTACHMENT:
binding.getChatViewModel().attachmentPreviewAdapter.add(file);
break;
}
}
#Override
public void onImagePickError(int requestCode, Exception e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
}
#Override
public void onImagePickClosed(int requestCode) {
}
}
Chat Activity View Model :-
public class ChatViewModel extends Observable {
public Context mContext;
ActivityChatBinding binding;
public static final String TAG = ChatActivity.class.getSimpleName();
public static final int REQUEST_CODE_ATTACHMENT = 721;
public static final String PROPERTY_SAVE_TO_HISTORY = "save_to_history";
public static final String EXTRA_DIALOG_ID = "dialogId";
public ChatAdapter chatAdapter;
public AttachmentPreviewAdapter attachmentPreviewAdapter;
public QBChatDialog qbChatDialog;
public ArrayList<QBChatMessage> unShownMessages;
public int skipPagination = 0;
public ChatMessageListener chatMessageListener;
QBPrivacyList qbPrivacyList;
public static boolean mBlock;
public static int userId, recipientId;
public QBPrivacyListsManager privacyListsManager;
public ObservableField<String> chatMessage = new ObservableField<>("");
public ChatViewModel(Context mContext, ActivityChatBinding binding) {
this.mContext = mContext;
this.binding = binding;
Log.v(TAG, "onCreate ChaActivity on Thread ID = " + Thread.currentThread().getId());
qbChatDialog = (QBChatDialog) ((Activity) mContext).getIntent().getSerializableExtra(EXTRA_DIALOG_ID);
Log.v(TAG, "deserialized dialog = " + qbChatDialog);
qbChatDialog.initForChat(QBChatService.getInstance());
chatMessageListener = new ChatMessageListener();
qbPrivacyList = new QBPrivacyList();
privacyListsManager = QBChatService.getInstance().getPrivacyListsManager();
qbChatDialog.addMessageListener(chatMessageListener);
initViews();
initChat();
}
public void initViews() {
try {
recipientId = qbChatDialog.getRecipientId();
userId = qbChatDialog.getUserId();
getPrivacyList();
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
} catch (SmackException.NoResponseException e) {
e.printStackTrace();
}
attachmentPreviewAdapter = new AttachmentPreviewAdapter(mContext,
new AttachmentPreviewAdapter.OnAttachmentCountChangedListener() {
#Override
public void onAttachmentCountChanged(int count) {
binding.attachmentContainer.setVisibility(count == 0 ? View.GONE : View.VISIBLE);
}
},
new AttachmentPreviewAdapter.OnAttachmentUploadErrorListener() {
#Override
public void onAttachmentUploadError(QBResponseException e) {
Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();
}
});
binding.attachmentAdapter.setAdapter(attachmentPreviewAdapter);
}
public void onAttachmentsClick(View view) {
new ImagePickHelper().pickAnImage(((FragmentActivity) mContext), REQUEST_CODE_ATTACHMENT);
}
private void initChat() {
switch (qbChatDialog.getType()) {
case PRIVATE:
loadDialogUsers();
break;
default:
Toaster.shortToast(String.format("%s %s", getString(R.string.chat_unsupported_type), qbChatDialog.getType().name()));
((Activity) mContext).finish();
break;
}
}
public void loadDialogUsers() {
ChatHelper.getInstance().getUsersFromDialog(qbChatDialog, new QBEntityCallback<ArrayList<QBUser>>() {
#Override
public void onSuccess(ArrayList<QBUser> users, Bundle bundle) {
String chatName = QbDialogUtils.getDialogName(qbChatDialog);
binding.dialogName.setText(chatName);
loadChatHistory();
}
#Override
public void onError(QBResponseException e) {
Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();
}
});
}
public void loadChatHistory() {
ChatHelper.getInstance().loadChatHistory(qbChatDialog, skipPagination, new QBEntityCallback<ArrayList<QBChatMessage>>() {
#Override
public void onSuccess(ArrayList<QBChatMessage> messages, Bundle args) {
Collections.reverse(messages);
if (chatAdapter == null) {
chatAdapter = new ChatAdapter(mContext, qbChatDialog, messages);
chatAdapter.setPaginationHistoryListener(new PaginationHistoryListener() {
#Override
public void downloadMore() {
loadChatHistory();
}
});
chatAdapter.setOnItemInfoExpandedListener(new ChatAdapter.OnItemInfoExpandedListener() {
#Override
public void onItemInfoExpanded(final int position) {
if (isLastItem(position)) {
((Activity) mContext).runOnUiThread(new Runnable() {
#Override
public void run() {
binding.listChat.setSelection(position);
}
});
} else {
binding.listChat.smoothScrollToPosition(position);
}
}
private boolean isLastItem(int position) {
return position == chatAdapter.getCount() - 1;
}
});
if (unShownMessages != null && !unShownMessages.isEmpty()) {
List<QBChatMessage> chatList = chatAdapter.getList();
for (QBChatMessage message : unShownMessages) {
if (!chatList.contains(message)) {
chatAdapter.add(message);
}
}
}
binding.listChat.setAdapter(chatAdapter);
binding.listChat.setAreHeadersSticky(false);
binding.listChat.setDivider(null);
} else {
chatAdapter.addList(messages);
binding.listChat.setSelection(messages.size());
}
binding.progressBar.setVisibility(View.GONE);
}
#Override
public void onError(QBResponseException e) {
binding.progressBar.setVisibility(View.GONE);
skipPagination -= ChatHelper.CHAT_HISTORY_ITEMS_PER_PAGE;
Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();
}
});
skipPagination += ChatHelper.CHAT_HISTORY_ITEMS_PER_PAGE;
QBRestChatService.markMessagesAsRead(qbChatDialog.getDialogId(), null);
}
public class ChatMessageListener extends QbChatDialogMessageListenerImp {
#Override
public void processMessage(String s, QBChatMessage qbChatMessage, Integer integer) {
showMessage(qbChatMessage);
}
}
public void showMessage(QBChatMessage message) {
if (chatAdapter != null) {
chatAdapter.add(message);
scrollMessageListDown();
} else {
if (unShownMessages == null) {
unShownMessages = new ArrayList<>();
}
unShownMessages.add(message);
}
}
public void scrollMessageListDown() {
binding.listChat.setSelection(binding.listChat.getCount() - 1);
}
public void onSendChatClick(View view) {
int totalAttachmentsCount = attachmentPreviewAdapter.getCount();
Collection<QBAttachment> uploadedAttachments = attachmentPreviewAdapter.getUploadedAttachments();
if (!uploadedAttachments.isEmpty()) {
if (uploadedAttachments.size() == totalAttachmentsCount) {
for (QBAttachment attachment : uploadedAttachments) {
sendChatMessage(null, attachment);
}
} else {
Toaster.shortToast(R.string.chat_wait_for_attachments_to_upload);
}
}
String text = binding.getChatViewModel().chatMessage.get().trim();
if (!TextUtils.isEmpty(text)) {
sendChatMessage(text, null);
}
}
public void sendChatMessage(String text, QBAttachment attachment) {
QBChatMessage chatMessage = new QBChatMessage();
if (attachment != null) {
chatMessage.addAttachment(attachment);
} else {
chatMessage.setBody(text);
}
chatMessage.setProperty(PROPERTY_SAVE_TO_HISTORY, "1");
chatMessage.setDateSent(System.currentTimeMillis() / 1000);
chatMessage.setMarkable(true);
if (!QBDialogType.PRIVATE.equals(qbChatDialog.getType()) && !qbChatDialog.isJoined()) {
Toaster.shortToast("You're still joining a group chat, please wait a bit");
return;
}
try {
qbChatDialog.sendMessage(chatMessage);
if (QBDialogType.PRIVATE.equals(qbChatDialog.getType())) {
showMessage(chatMessage);
}
if (attachment != null) {
attachmentPreviewAdapter.remove(attachment);
} else {
binding.getChatViewModel().chatMessage.set("");
}
} catch (SmackException.NotConnectedException e) {
Log.w(TAG, e);
Toaster.shortToast("Can't send a message, You are not connected to chat");
}
}
public void leaveGroupDialog() {
try {
ChatHelper.getInstance().leaveChatDialog(qbChatDialog);
} catch (XMPPException | SmackException.NotConnectedException e) {
Log.w(TAG, e);
}
}
public void releaseChat() {
qbChatDialog.removeMessageListrener(chatMessageListener);
if (!QBDialogType.PRIVATE.equals(qbChatDialog.getType())) {
leaveGroupDialog();
}
}
public void sendDialogId() {
Intent result = new Intent();
result.putExtra(EXTRA_DIALOG_ID, qbChatDialog.getDialogId());
((Activity) mContext).setResult(RESULT_OK, result);
}
public void finishActivity(View view) {
((Activity) mContext).finish();
}
public void clickButtonBlock(View view) {
AppUtils.dialog(mContext);
if (mBlock) {
onClickUnblock();
} else {
onClickBlock();
}
}
public void getPrivacyList() throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException {
QBPrivacyListsManager privacyListsManager = QBChatService.getInstance().getPrivacyListsManager();
QBPrivacyList privacyList = privacyListsManager.getPrivacyList("public");
List<QBPrivacyListItem> items = privacyList.getItems();
int i;
for (i = 0; i < privacyList.getItems().size(); i++) {
QBPrivacyListItem item = items.get(i);
String valueForType = item.getValueForType();
String[] splitvalueType = valueForType.split("-");
String blockId = splitvalueType[0];
if (blockId.equalsIgnoreCase(String.valueOf(recipientId))) {
mBlock = true;
binding.tvBlock.setText("Unblock");
break;
} else {
binding.tvBlock.setText("Block");
}
}
}
}
The problem is chatDialog.getUnreadMessageCount() giving me count 2 when I once enter in chat room and come back to my chat listing page.
Description on issue:-
Example:-
I have installed my application in two devices. when i send message from one (Device A) to other (Device B).The device B will display correct Unread count i.e 1 . Now when i click on chat dialog and get entered inside the chat room (of Device B). and come back to it's listing page and then again try to send message from Device A to device B . This time the unread count comes as 2 but it should be one as i already viewed my previous message. This get more worse if i try to open my chat room again to read the message(Device B) and get back to my listing page(Device B) after reading the message . This time if I send the message from Device A to Device B, Then the count came out as "5" just for my one message this thing is making me sick, I debugged the whole code, it's chatDialog .getUnreadMessageCount() who is returning me count "5", I don't know why my previous messages are not counted as being read messages and why everytime I open chat room one additional number gets added up inside the unread count.Please help me out , i am scratching my head from past two days.
Your help will be greatly Appreciated.
Thanks
Problem is that your AllDialogsMessageListener is not getting unregistered so unregister it by calling unregisterQbChatListeners(); when you will be opening your chat room screen . Every thing will work fine once you do that.
This what i mean :-
binding.listDialogsChats.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position);
if (currentActionMode == null) {
unregisterQbChatListeners();
ChatActivity.startForResult(((Activity) mContext), REQUEST_DIALOG_ID_FOR_UPDATE, selectedDialog);
} else {
dialogsAdapter.toggleSelection(selectedDialog);
}
}
});
private void unregisterQbChatListeners() {
if (incomingMessagesManager != null) {
incomingMessagesManager.removeDialogMessageListrener(allDialogsMessagesListener);
}
if (systemMessagesManager != null) {
systemMessagesManager.removeSystemMessageListener(systemMessagesListener);
}
dialogsManager.removeManagingDialogsCallbackListener(this);
}
cheers!!!
Please use this code below :
QBChatService.markMessagesAsRead("YOUR_DIALOG_ID", null, new QBEntityCallback<Void>() {
#Override
public void onSuccess(Void aVoid, Bundle bundle) {
QBRequestGetBuilder requestBuilder = new QBRequestGetBuilder();
requestBuilder.eq("_id", Team.getCurrent().getChatId());
QBChatService.getChatDialogs(null, requestBuilder, new QBEntityCallback<ArrayList<QBDialog>>() {
#Override
public void onSuccess(ArrayList<QBDialog> qbDialogs, Bundle bundle) {
if (qbDialogs != null && qbDialogs.size() > 0) {
QBDialog dialog = qbDialogs.get(0);//here you get your dialog with unreadMessageCount = 0
}
}
#Override
public void onError(QBResponseException e) {
}
});
}
#Override
public void onError(QBResponseException e) {
}
});
i want to query results from custom adapter by comparing query text with list in RecycleView, it successfully gets results from query then i make list of results and update the existing adapter but it does not effect anything, i use below code fot that
combinationMessagesList = createCombinationMessagesList();
combinationMessages = createCombinationMessagesList();
combinationMessages.clear();
for (int i = 0; i < combinationMessagesList.size(); i++) {
CombinationMessage message = combinationMessagesList.get(i);
if (message.getBody().toString().equals(search.getText().toString())){
combinationMessages.add(combinationMessagesList.get(i));
}
}
messagesAdapter.setList(combinationmessagesList);
messagesAdapter.notifyDataSetChanged();
}
PrivateDialogActivity
public class PrivateDialogActivity extends BaseDialogActivity {
private FriendOperationAction friendOperationAction;
private FriendObserver friendObserver;
private int operationItemPosition;
private final String TAG = "PrivateDialogActivity";
EditText search;
public static void start(Context context, User opponent, Dialog dialog) {
Intent intent = new Intent(context, PrivateDialogActivity.class);
intent.putExtra(QBServiceConsts.EXTRA_OPPONENT, opponent);
intent.putExtra(QBServiceConsts.EXTRA_DIALOG, dialog);
context.startActivity(intent);
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initFields();
context = this;
if (dialog == null) {
finish();
}
setUpActionBarWithUpButton();
if (isNetworkAvailable()) {
deleteTempMessages();
}
addObservers();
initMessagesRecyclerView();
search = (EditText) findViewById(R.id.search_edittext);
Button button = (Button) findViewById(R.id.search);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
showResult();
}
});
}
private void showResult() {
combinationMessagesList = createCombinationMessagesList();
combinationMessages = createCombinationMessagesList();
combinationMessages.clear();
for (int i = 0; i < combinationMessagesList.size(); i++) {
CombinationMessage message = combinationMessagesList.get(i);
if (message.getBody().toString().equals(search.getText().toString())){
combinationMessages.add(combinationMessagesList.get(i));
}
}
messagesAdapter.setList(combinationMessagesList);
messagesAdapter.notifyDataSetChanged();
}
#Override
protected void addActions() {
super.addActions();
addAction(QBServiceConsts.ACCEPT_FRIEND_SUCCESS_ACTION, new AcceptFriendSuccessAction());
addAction(QBServiceConsts.ACCEPT_FRIEND_FAIL_ACTION, failAction);
addAction(QBServiceConsts.REJECT_FRIEND_SUCCESS_ACTION, new RejectFriendSuccessAction());
addAction(QBServiceConsts.REJECT_FRIEND_FAIL_ACTION, failAction);
updateBroadcastActionList();
}
#Override
protected void onResume() {
super.onResume();
checkForCorrectChat();
if (isNetworkAvailable()) {
startLoadDialogMessages();
}
checkMessageSendingPossibility();
}
#Override
protected void onDestroy() {
super.onDestroy();
deleteObservers();
}
#Override
protected void updateActionBar() {
setOnlineStatus(opponentUser);
checkActionBarLogo(opponentUser.getAvatar(), R.drawable.placeholder_user);
}
#Override
protected void onConnectServiceLocally(QBService service) {
onConnectServiceLocally();
setOnlineStatus(opponentUser);
}
#Override
protected void onFileLoaded(QBFile file, String dialogId) {
if(!dialogId.equals(dialog.getDialogId())){
return;
}
try {
privateChatHelper.sendPrivateMessageWithAttachImage(file, opponentUser.getUserId(), null, null);
} catch (QBResponseException exc) {
ErrorUtils.showError(this, exc);
}
}
#Override
protected Bundle generateBundleToInitDialog() {
Bundle bundle = new Bundle();
bundle.putInt(QBServiceConsts.EXTRA_OPPONENT_ID, opponentUser.getUserId());
return bundle;
}
#Override
protected void initMessagesRecyclerView() {
super.initMessagesRecyclerView();
messagesAdapter = new PrivateDialogMessagesAdapter(this, friendOperationAction, combinationMessagesList, this, dialog);
messagesRecyclerView.addItemDecoration(
new StickyRecyclerHeadersDecoration((StickyRecyclerHeadersAdapter) messagesAdapter));
findLastFriendsRequest();
messagesRecyclerView.setAdapter(messagesAdapter);
scrollMessagesToBottom();
}
#Override
protected void updateMessagesList() {
initActualExtras();
checkForCorrectChat();
int oldMessagesCount = messagesAdapter.getAllItems().size();
this.combinationMessagesList = createCombinationMessagesList();
Log.d(TAG, "combinationMessagesList = " + combinationMessagesList);
messagesAdapter.setList(combinationMessagesList);
findLastFriendsRequest();
checkForScrolling(oldMessagesCount);
}
private void initActualExtras() {
opponentUser = (User) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_OPPONENT);
dialog = (Dialog) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_DIALOG);
}
#Override
public void notifyChangedUserStatus(int userId, boolean online) {
super.notifyChangedUserStatus(userId, online);
if (opponentUser != null && opponentUser.getUserId() == userId) {
setOnlineStatus(opponentUser);
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.private_dialog_menu, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean isFriend = DataManager.getInstance().getFriendDataManager().getByUserId(
opponentUser.getUserId()) != null;
if (!isFriend && item.getItemId() != android.R.id.home) {
ToastUtils.longToast(R.string.dialog_user_is_not_friend);
return true;
}
switch (item.getItemId()) {
case R.id.action_audio_call:
callToUser(opponentUser, QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_AUDIO);
break;
case R.id.switch_camera_toggle:
callToUser(opponentUser, QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_VIDEO);
break;
default:
super.onOptionsItemSelected(item);
}
return true;
}
#Override
protected void checkMessageSendingPossibility() {
boolean enable = dataManager.getFriendDataManager().existsByUserId(opponentUser.getUserId()) && isNetworkAvailable();
checkMessageSendingPossibility(enable);
}
#OnClick(R.id.toolbar)
void openProfile(View view) {
UserProfileActivity.start(this, opponentUser.getUserId());
}
private void initFields() {
chatHelperIdentifier = QBService.PRIVATE_CHAT_HELPER;
friendOperationAction = new FriendOperationAction();
friendObserver = new FriendObserver();
initActualExtras();
// opponentUser = (User) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_OPPONENT);
// dialog = (Dialog) getIntent().getExtras().getSerializable(QBServiceConsts.EXTRA_DIALOG);
combinationMessagesList = createCombinationMessagesList();
title = opponentUser.getFullName();
}
private void addObservers() {
dataManager.getFriendDataManager().addObserver(friendObserver);
}
private void deleteObservers() {
dataManager.getFriendDataManager().deleteObserver(friendObserver);
}
private void findLastFriendsRequest() {
((PrivateDialogMessagesAdapter) messagesAdapter).findLastFriendsRequestMessagesPosition();
messagesAdapter.notifyDataSetChanged();
}
private void setOnlineStatus(User user) {
if (user != null) {
if (friendListHelper != null) {
String offlineStatus = getString(R.string.last_seen, DateUtils.toTodayYesterdayShortDateWithoutYear2(user.getLastLogin()),
DateUtils.formatDateSimpleTime(user.getLastLogin()));
setActionBarSubtitle(
OnlineStatusUtils.getOnlineStatus(this, friendListHelper.isUserOnline(user.getUserId()), offlineStatus));
}
}
}
public void sendMessage(View view) {
sendMessage(true);
}
private void callToUser(User user, QBRTCTypes.QBConferenceType qbConferenceType) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
List<QBUser> qbUserList = new ArrayList<>(1);
qbUserList.add(UserFriendUtils.createQbUser(user));
CallActivity.start(PrivateDialogActivity.this, qbUserList, qbConferenceType, null);
}
private void acceptUser(final int userId) {
if (isNetworkAvailable()) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
showProgress();
QBAcceptFriendCommand.start(this, userId);
} else {
ToastUtils.longToast(R.string.dlg_fail_connection);
return;
}
}
private void rejectUser(final int userId) {
if (isNetworkAvailable()) {
if (!isChatInitializedAndUserLoggedIn()) {
ToastUtils.longToast(R.string.call_chat_service_is_initializing);
return;
}
showRejectUserDialog(userId);
} else {
ToastUtils.longToast(R.string.dlg_fail_connection);
return;
}
}
private void showRejectUserDialog(final int userId) {
User user = DataManager.getInstance().getUserDataManager().get(userId);
if (user == null) {
return;
}
TwoButtonsDialogFragment.show(getSupportFragmentManager(),
getString(R.string.dialog_message_reject_friend, user.getFullName()),
new MaterialDialog.ButtonCallback() {
#Override
public void onPositive(MaterialDialog dialog) {
super.onPositive(dialog);
showProgress();
QBRejectFriendCommand.start(PrivateDialogActivity.this, userId);
}
});
}
private void checkForCorrectChat() {
Dialog updatedDialog = null;
if (dialog != null) {
updatedDialog = dataManager.getDialogDataManager().getByDialogId(dialog.getDialogId());
} else {
finish();
}
if (updatedDialog == null) {
finish();
} else {
dialog = updatedDialog;
}
}
private class FriendOperationAction implements FriendOperationListener {
#Override
public void onAcceptUserClicked(int position, int userId) {
operationItemPosition = position;
acceptUser(userId);
}
#Override
public void onRejectUserClicked(int position, int userId) {
operationItemPosition = position;
rejectUser(userId);
}
}
private class AcceptFriendSuccessAction implements Command {
#Override
public void execute(Bundle bundle) {
((PrivateDialogMessagesAdapter) messagesAdapter).clearLastRequestMessagePosition();
messagesAdapter.notifyItemChanged(operationItemPosition);
startLoadDialogMessages();
hideProgress();
}
}
private class RejectFriendSuccessAction implements Command {
#Override
public void execute(Bundle bundle) {
((PrivateDialogMessagesAdapter) messagesAdapter).clearLastRequestMessagePosition();
messagesAdapter.notifyItemChanged(operationItemPosition);
startLoadDialogMessages();
hideProgress();
}
}
private class FriendObserver implements Observer {
#Override
public void update(Observable observable, Object data) {
if (data != null && data.equals(FriendDataManager.OBSERVE_KEY)) {
checkForCorrectChat();
checkMessageSendingPossibility();
}
}
}
}
it was my own mistake it code, i made the code work by changing messagesAdapter.setList(combinationmessagesList)
to
messagesAdapter.setList(combinationMessages);
I am working on post method with parameters. My app is not responding (find my code below). I am getting a NullPointerException when I am trying to add data into queue in void addToRequestQueue(Request<T> req, String tag). Could you, please, help me to identify the problem.
RegisterActivity
public class RegistrationActivity extends AppCompatActivity implements View.OnClickListener, VolleyTasksListener {
private Button btnRegister;
private EditText edtEmail;
private EditText edtConfirmEmail;
private EditText edtPassword;
private EditText edtconfirmPassword;
private EditText edtFullName;
private EditText edtContactNumber;
private TextView txtDOB;
private LinearLayout parentLayout;
private Toolbar toolbar;
private String udid;
private TextView txtErrEmail;
private TextView txtErrCEMAIL;
private TextView txtErrPassword;
private TextView txtErrCpassword;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
findViews();
initToolbar();
}
private void findViews() {
parentLayout = (LinearLayout) findViewById(R.id.lyt_parent);
btnRegister = (Button) findViewById(R.id.btn_register);
txtDOB = (TextView) findViewById(R.id.txt_dob);
txtErrPassword = (TextView) findViewById(R.id.txt_err_password);
txtErrCpassword = (TextView) findViewById(R.id.txt_err_c_password);
txtErrEmail = (TextView) findViewById(R.id.txt_err_email);
txtErrCEMAIL = (TextView) findViewById(R.id.txt_err_c_email);
edtEmail = (EditText) findViewById(R.id.edt_email);
edtConfirmEmail = (EditText) findViewById(R.id.edt_confirm_email);
edtPassword = (EditText) findViewById(R.id.edt_password);
edtconfirmPassword = (EditText) findViewById(R.id.edt_confirm_password);
edtFullName = (EditText) findViewById(R.id.edt_full_name);
edtContactNumber = (EditText) findViewById(R.id.edt_contact_number);
udid = Settings.Secure.getString(RegistrationActivity.this.getContentResolver(), Settings.Secure.ANDROID_ID);
TypefaceHelper.getInstance().setTypeface(parentLayout, Constant.FONT_OPENSANS_REGULAR);
TypefaceHelper.getInstance().setTypeface(btnRegister, Constant.FONT_OPENSANS_BOLD);
txtDOB.setOnClickListener(this);
btnRegister.setOnClickListener(this);
}
#Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_register:
getRegistrationService();
break;
case R.id.txt_dob:
ShowDatePicker();
break;
}
}
private void getRegistrationServiceValidation() {
{
String username = edtFullName.getText().toString().trim();
String confirmEmail = edtConfirmEmail.getText().toString();
String email = edtEmail.getText().toString();
String confirmPassword = edtconfirmPassword.getText().toString();
String mobile = edtContactNumber.getText().toString();
String password = edtPassword.getText().toString();
if (ValidationUtils.isValidEmail(email)) {
if (ValidationUtils.isValidEmail(email, confirmEmail)) {
if (ValidationUtils.isValidPassword(password)) {
if (ValidationUtils.isValidPassword(password, confirmPassword)) {
getRegistrationService();
} else {
txtErrCpassword.setVisibility(View.VISIBLE);
txtErrCpassword.setText("Password does not match");
}
}else{
txtErrPassword.setVisibility(View.VISIBLE);
txtErrPassword.setText("Password require more than 8 character");
}
}else {
txtErrCEMAIL.setVisibility(View.VISIBLE);
txtErrCEMAIL.setText("*Email does not match");
}
}else {
txtErrEmail.setVisibility(View.VISIBLE);
txtErrEmail.setText("*This Email has already been used");
}
}
}
private void getRegistrationService() {
if (ConnectionUtils.isConnectedNetwork(RegistrationActivity.this)) {
JSONObject jsonMainObject = new JSONObject();
try {
jsonMainObject.put("email_id", edtEmail.getText().toString());
jsonMainObject.put("password", edtPassword.getText().toString());
jsonMainObject.put("full_name", edtFullName.getText().toString());
jsonMainObject.put("contact_number", edtContactNumber.getText().toString());
jsonMainObject.put("dob", txtDOB.getText().toString());
jsonMainObject.put("gender", "Male");
VolleyTasks.makeVolleyPost(RegistrationActivity.this, Constant.REGISTRATION_URL, jsonMainObject, "Login");
} catch (JSONException e) {
e.printStackTrace();
}
} else {
DialogUtils.switchOnInternetDialog(RegistrationActivity.this, false);
}
}
private void getRegisterSucessAlert() {
Builder builder = new Builder(this);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.alet_register_success, (ViewGroup) findViewById(R.id.lnt_root));
LinearLayout lytAlertParent = (LinearLayout) layout.findViewById(R.id.lnt_root);
TextView txttitle = (TextView) layout.findViewById(R.id.txt_register_title);
TypefaceHelper.getInstance().setTypeface(lytAlertParent, Constant.FONT_OPENSANS_REGULAR);
TypefaceHelper.getInstance().setTypeface(txttitle, Constant.FONT_OPENSANS_BOLD);
Button btnOk = (Button) layout.findViewById(R.id.btn_ok);
builder.setView(layout);
final android.app.AlertDialog alertDialog = builder.create();
alertDialog.setCanceledOnTouchOutside(true);
alertDialog.show();
btnOk.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
ActivityUtils.launchActivity(RegistrationActivity.this, HomeActivity.class, true);
}
});
}
private void ShowDatePicker() {
{
final AlertDialog.Builder builder = new AlertDialog.Builder(RegistrationActivity.this, R.style.AppCompatAlertDialogStyle);
final View view = View.inflate(RegistrationActivity.this, R.layout.picker_date, null);
builder.setView(view);
final DatePicker datePicker = (DatePicker) view.findViewById(R.id.date_picker);
builder.setPositiveButton("Set", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialogInterface, int i) {
Calendar calendar = new GregorianCalendar(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
String date = DateUtils.getSimpleDateFormat(Constant.DATE_TEMPLATE_CAB_BOOK, calendar.getTime());
txtDOB.setText(date);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.show();
}
}
private void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("");
toolbar.setTitleTextColor(Color.WHITE);
setSupportActionBar(toolbar);
ImageView imgClose = (ImageView) findViewById(R.id.img_close);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
imgClose.setColorFilter(getResources().getColor(R.color.ft_blue, null));
} else {
imgClose.setColorFilter(getResources().getColor(R.color.ft_blue));
}
imgClose.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
ActivityUtils.launchActivity(RegistrationActivity.this, AuthenticationActivity.class, true);
}
});
}
#Override
public void onBackPressed() {
super.onBackPressed();
ActivityUtils.launchActivity(this, AuthenticationActivity.class, true);
}
#Override
public void handleError(Exception error) {
L.d("Error"+error);
}
#Override
public void handleResult(String method_name, JSONObject response) {
L.d ("response" + response);
if (response != null) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.serializeNulls();
Gson gson = gsonBuilder.create();
if (method_name.equals("Login")) {
AbstractRegister abstractRegister = gson.fromJson(response.toString(), AbstractRegister.class);
if (abstractRegister != null) {
if (abstractRegister.getResponse().equals("1")) {
getRegisterSucessAlert();
} else {
}
} else {
}
}
}
}}
Application
public class eTravelApplication extends Application {
private static eTravelApplication sInstance;
private RequestQueue mRequestQueue;
public static final String TAG = "VolleyPatterns";
#Override
public void onCreate() {
super.onCreate();
TypefaceHelper.initialize(this);
}
/**
* #return ApplicationController singleton instance
*/
public static synchronized eTravelApplication getInstance() {
return sInstance;
}
public RequestQueue getRequestQueue() {
// created when it is accessed for the first time
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue (getApplicationContext ());
}
return mRequestQueue;
}
/**
* Adds the specified request to the global queue, if tag is specified
* then it is used else Default TAG is used.
*
* #param req
* #param tag
*/
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty (tag) ? TAG : tag);
VolleyLog.d ("Adding request to queue: %s", req.getUrl ());
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
// set the default tag if tag is empty
req.setTag(TAG);
getRequestQueue().add(req);
}
/**
* Cancels all pending requests by the specified TAG, it is important
* to specify a TAG so that the pending/ongoing requests can be cancelled.
*
* #param tag
*/
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
#Override
public void onTerminate() {
TypefaceHelper.destroy();
super.onTerminate();
}}
I am trying to update viewpager fregment when viewpager swipe in MainActivity.
MenuActivity:-
package jbit.kanha;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.koushikdutta.async.future.FutureCallback;
import com.koushikdutta.ion.Ion;
import com.romainpiel.shimmer.Shimmer;
import com.romainpiel.shimmer.ShimmerTextView;
import org.json.JSONArray;
import org.json.JSONObject;
import jbit.kanha.AllAdepters.SideMenuAdapter;
import jbit.kanha.InternetConection.CheckInternetConection;
import jbit.kanha.InternetConection.ConnectionDetector;
import jbit.kanha.InternetConection.InternetDialoge;
import jbit.kanha.ProgressDialog.MyProgressDialog;
import jbit.kanha.SideMenuClasses.MyProfile;
import jbit.kanha.db.Database;
public class MenuActivity extends FragmentActivity implements View.OnClickListener{
public static ResideMenu resideMenu;
private MenuActivity mContext;
private ResideMenuItem itemHome;
private ResideMenuItem itemProfile;
private ResideMenuItem itemCalendar;
private ResideMenuItem itemSettings;
SharedPreferences loginPreferences;
private SharedPreferences pref;
ImageView profile_image;
public static TextView title_bar_right_menu,txt_total_rate;
Database database;
JSONArray categoryItem;
// private PagerSlidingTabStrip tabLayout;
private TabLayout tabLayout;
ViewPager pager;
private ConnectionDetector connectionDetector;
private MyProgressDialog dialog;
ViewPagerAdapter adapter;
OneFregment fregment;
// private int currentColor = Color.parseColor("#1D569B");
// PagerSlidingTabStrip tabStrip;
/**
* Called when the activity is first created.
*/
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = this;
database = new Database(MenuActivity.this);
tabLayout= (TabLayout)findViewById(R.id.tabs);
pager = (ViewPager)findViewById(R.id.pager);
loginPreferences = getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);
connectionDetector = new ConnectionDetector(mContext);
dialog = new MyProgressDialog(mContext);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
if (connectionDetector.isConnectingToInternet()){
getCategoryName();
}else{
Toast.makeText(mContext, "No Internet Connection", Toast.LENGTH_SHORT).show();
}
title_bar_right_menu = (TextView) findViewById(R.id.title_bar_right_menu);
txt_total_rate = (TextView) findViewById(R.id.txt_total_rate);
pref = getApplicationContext().getSharedPreferences("loginPrefs", MODE_PRIVATE);
Cursor cursor1 = database.getData("SELECT * FROM cart");
int count = cursor1.getCount();
cursor1.close();
title_bar_right_menu.setText(count+"");
setUpMenu();
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
#Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
#Override
public void onPageSelected(int position) {
getCategoryDataRefresh(position);
}
#Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void getCategoryData(final int postion){
Ion.with(mContext)
.load(getResources().getString(R.string.api_main_url) + "categoryoriginal.php")
.setTimeout(30*1000)
.setBodyParameter("outlet_id",loginPreferences.getString("outlet_id",""))
.setBodyParameter("catid",String.valueOf(postion+1))
.asString().setCallback(new FutureCallback<String>() {
#Override
public void onCompleted(Exception e, String result) {
dialog.hide();
if (e != null) {
e.printStackTrace();
DialogsClassTwoData(mContext, "Connection Timed Out!", "Message...",postion).show();
}
if (result != null) {
try {
Log.d("name",result);
JSONObject mainJson = new JSONObject(result);
String status = mainJson.getString("status");
if(status.equals("Success")){
JSONArray jsonArray = mainJson.getJSONArray("data");
setUpViewPager(pager,categoryItem,jsonArray);
}
}catch (Exception ex) {
ex.printStackTrace();
Log.d("exaption", ex.toString());
}
} else {
Log.d("exaption", e.toString());
}
}
});
}
private void getCategoryDataRefresh(final int postion){
dialog.show();
Ion.with(mContext)
.load(getResources().getString(R.string.api_main_url) + "categoryoriginal.php")
.setTimeout(30*1000)
.setBodyParameter("outlet_id",loginPreferences.getString("outlet_id",""))
.setBodyParameter("catid",String.valueOf(postion+1))
.asString().setCallback(new FutureCallback<String>() {
#Override
public void onCompleted(Exception e, String result) {
dialog.hide();
if (e != null) {
e.printStackTrace();
DialogsClassTwoData(mContext, "Connection Timed Out!", "Message...",postion).show();
}
if (result != null) {
try {
Log.d("name",result);
JSONObject mainJson = new JSONObject(result);
String status = mainJson.getString("status");
if(status.equals("Success")){
Fragment frg = null;
frg = new OneFregment(mainJson.getJSONArray("data"));
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();
}
}catch (Exception ex) {
ex.printStackTrace();
Log.d("exaption", ex.toString());
}
} else {
Log.d("exaption", e.toString());
}
}
});
}
private void getCategoryName(){
dialog.show();
Ion.with(mContext)
.load(getResources().getString(R.string.api_main_url) + "categoryname.php")
.setTimeout(30*1000)
.asString().setCallback(new FutureCallback<String>() {
#Override
public void onCompleted(Exception e, String result) {
// dialog.hide();
if (e != null) {
e.printStackTrace();
DialogsClassTwo(mContext, "Connection Timed Out!", "Message...").show();
}
if (result != null) {
try {
Log.d("name",result);
JSONObject mainJson = new JSONObject(result);
String status = mainJson.getString("status");
if(status.equals("Success")){
JSONObject jsonObject = mainJson.getJSONObject("data");
categoryItem = jsonObject.getJSONArray("items");
// setUpViewPager(pager,jsonObject.getJSONArray("items"));
Log.d("json",jsonObject+"");
getCategoryData(0);
//data = jsonObject.getJSONArray("items");
/* for(int i=0;i<data.length();i++){
JSONObject jsonObject1 = data.getJSONObject(i);
bigImage.add(jsonObject1.getString("bigimage"));
}
pager.setAdapter(new CustomPagerAdapter(getActivity(),data));
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
tabs.setViewPager(pager);
changeColor(currentColor);*/
}
}catch (Exception ex) {
ex.printStackTrace();
Log.d("exaption", ex.toString());
}
} else {
Log.d("exaption", e.toString());
}
}
});
}
private void setUpViewPager(ViewPager pager, JSONArray jsonArray,JSONArray products){
try {
// ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
adapter.addFrag(new OneFregment(products),jsonObject.getString("categoryname"));
}
pager.setAdapter(adapter);
tabLayout.setupWithViewPager(pager);
// tabLayout.tabSelectedTextColor
// getCategoryData();
}
catch (Exception e) {
Log.e("error", e.getMessage());
}
}
public AlertDialog.Builder DialogsClassTwo(Context cxt, final String message, String title){
return new AlertDialog.Builder(cxt).setTitle(title).setMessage(message).setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogs, int which) {
// here you can add functions
if (CheckInternetConection.isInternetConnection(mContext.getApplicationContext())){
getCategoryName();
// getCategoryData();
}else{
InternetDialoge.showDialogFinishActivity(
"Internet Connection Failed!", "connection error", mContext);
}
}
});
}
public AlertDialog.Builder DialogsClassTwoData(Context cxt, final String message, String title, final int postion){
return new AlertDialog.Builder(cxt).setTitle(title).setMessage(message).setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogs, int which) {
// here you can add functions
if (CheckInternetConection.isInternetConnection(mContext.getApplicationContext())){
//getCategoryName();
getCategoryData(postion);
}else{
InternetDialoge.showDialogFinishActivity(
"Internet Connection Failed!", "connection error", mContext);
}
}
});
}
private void setUpMenu() {
resideMenu = new ResideMenu(MenuActivity.this, R.layout.side_menu, R.layout.home);
//resideMenu.setBackground(Color.parseColor("#FAA514"));//FAA514
resideMenu.setBackground(R.drawable.slider_background);
resideMenu.attachToActivity(MenuActivity.this);
resideMenu.setScaleValue(0.5f);
View leftMenu = resideMenu.getLeftMenuView();
Shimmer shimmer = new Shimmer();//#faebd7
shimmer.setDuration(3000)
.setStartDelay(500)
.setDirection(Shimmer.ANIMATION_DIRECTION_LTR);
ShimmerTextView powered = (ShimmerTextView)leftMenu.findViewById(R.id.powered);
ListView list = (ListView) leftMenu.findViewById(R.id.list1);
list.setAdapter(new SideMenuAdapter(MenuActivity.this));
profile_image = (ImageView) leftMenu.findViewById(R.id.profile_image);
TextView title1 = (TextView) leftMenu.findViewById(R.id.title1);
TextView loction1 = (TextView) leftMenu.findViewById(R.id.loction1);
ImageView location_icon =(ImageView) leftMenu.findViewById(R.id.location_icon);
RelativeLayout ll_checkout = (RelativeLayout) findViewById(R.id.ll_checkout);
//loginPreferences = getSharedPreferences("loginPrefs", Context.MODE_PRIVATE);
title1.setText(loginPreferences.getString("fullname",""));
loction1.setText(loginPreferences.getString("address",""));
// if(!loginPreferences.getString("profileimage","").equals("")){
/* Picasso.with(MenuActivity.this)
.load(loginPreferences.getString("profileimage",""))
.error(R.drawable.images)
.placeholder(R.drawable.progress_animation)
.into(profile_image);*/
// File file = new File("/main_json/main_json/com.example.w.lazymojo/app_imageDir/profile.jpg");
shimmer.start(powered);
if(pref.getString("User_id", "").equals("")){
profile_image.setImageResource(R.drawable.images);
location_icon.setVisibility(View.INVISIBLE);
}
else {
Bitmap bitmap1 = BitmapFactory.decodeFile("/data/data/jbit.kanha/app_imageDir/profile.jpg");
if(bitmap1!=null){
Log.d("MenuActivity:-","image not null");
profile_image.setImageBitmap(bitmap1);
// Picasso.with(MenuActivity.this).load(file).resize(dpToPx(96),dpToPx(96)).centerCrop().into(profile_image);
}
else {
Log.d("MenuActivity:-","image is null");
profile_image.setImageResource(R.drawable.images);
}
}
profile_image.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if(pref.getString("User_id", "").equals("")){
profile_image.setImageResource(R.drawable.images);
new AlertDialog.Builder(MenuActivity.this).setTitle("Login").setMessage("You have to login first").setPositiveButton("Login", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
Intent in = new Intent(MenuActivity.this,LoginActivity.class);
startActivity(in);
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
else {
Intent i = new Intent(MenuActivity.this, MyProfile.class);
startActivity(i);
}
}
});
// }
ll_checkout.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if(!pref.getString("User_id", "").equals("")){
Intent i = new Intent(MenuActivity.this,MyCart.class);
startActivity(i);
finish();
}
else
{
new AlertDialog.Builder(MenuActivity.this).setTitle("Login").setMessage("You must login first").setPositiveButton("Login", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(MenuActivity.this,LoginActivity.class);
startActivity(intent);
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
}
});
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);
resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_LEFT);
findViewById(R.id.title_bar_left_menu).setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);
}
});
findViewById(R.id.cart_img).setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
if(!pref.getString("User_id", "").equals("")){
Intent i = new Intent(MenuActivity.this,MyCart.class);
startActivity(i);
finish();
}
else
{
new AlertDialog.Builder(MenuActivity.this).setTitle("Login").setMessage("You must login first").setPositiveButton("Login", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(MenuActivity.this,LoginActivity.class);
startActivity(intent);
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
// resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);
}
});
}
#Override
public void onClick(View view) {
resideMenu.closeMenu();
}
private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {
#Override
public void openMenu() {
// Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();
}
#Override
public void closeMenu() {
//Toast.makeText(mContext, "Menu is closed!", Toast.LENGTH_SHORT).show();
}
};
// What good method is to access resideMenu?
public ResideMenu getResideMenu(){
return resideMenu;
}
#Override
protected void onResume() {
super.onResume();
}
#Override
public void onBackPressed() {
super.onBackPressed();
finish();
moveTaskToBack(true);
}
}
ViewPagerAdapter.java:
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
#Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
#Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
#Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
#Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
OneFregement:-
public class OneFregment extends Fragment {
JSONArray jsonArray;
ListView listView;
HomeLiatAdapter adapter;
public OneFregment() {
// Required empty public constructor
}
#SuppressLint("ValidFragment")
public OneFregment(JSONArray jsonArray){
this.jsonArray = jsonArray;
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.home_child_layout, container, false);
listView = (ListView) v.findViewById(R.id.list);
try {
JSONObject obj = jsonArray.getJSONObject(0);
adapter = new HomeLiatAdapter(getContext(),obj.getJSONArray("items"),obj.getString("bigimage"));
listView.setAdapter(adapter);
}catch (Exception e){
e.printStackTrace();
}
return v;
}
/* public void update(){
try {
JSONObject obj = jsonArray.getJSONObject(0);
adapter = new HomeLiatAdapter(getContext(),obj.getJSONArray("items"),obj.getString("bigimage"));
listView.setAdapter(adapter);
}catch (Exception e){
e.printStackTrace();
}
}*/
}
I am do this but fregment is show previous data.I also try create update method in fregment class but all is wain.
I am new in Android Developing please help me. Thanks in advance.
you will have to write custom interface and implement in each fragment. And on onpagechangelistener you will have to call those method.
check this for more explanation. even i had to implement same for my project to get the fragments updated as normal fragment life-cycle wont work as you want. due to view pager adding and retaining of fragment as you swipe through.
I am alerting the user after some action and showing alert dialog but when accessibility is on it is not reading full alert dailog header and body. It is reading only header. I found this issue in samsung galaxy s5.
Please help me solving this issue.
public class TransactionDialog extends DialogFragment {
private int _state = -1;
private final String TITLE = "TITLE";
private final String MESSAGE = "MESSAGE";
private final String POS_TEXT = "POS_TEXT";
private final String STATE = "STATE";
private int _title = 0;
private int _message = 0;
private int _positiveText = 0;
private NoticeDialogListener mListener;
Logger logger = Logger.getNewLogger("com.ui.TransactionDialog");
boolean actionPerformed = false;
AlertDialog dialog = null;
public TransactionDialog() {
}
public void setListener(NoticeDialogListener listener) {
this.mListener = listener;
}
public TransactionDialog(int title, int message, int positiveText, int state) {
this._title = title;
this._message = message;
this._positiveText = positiveText;
this._state = state;
}
public int getState() {
return _state;
}
#Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt(TITLE, this._title);
outState.putInt(MESSAGE, this._message);
outState.putInt(POS_TEXT, this._positiveText);
outState.putInt(STATE, this._state);
}
#Override
public void onResume() {
super.onResume();
logger.debug("TITLE:" + this._title);
logger.debug("_message:" + this._message);
logger.debug("_positiveText:" + this._positiveText);
logger.debug("_state:" + this._state);
}
#Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
logger.debug("Created");
}
#Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
super.onDismiss(dialog);
mListener.onDialogDismissed();
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
logger.debug("ON CREATE");
if (savedInstanceState != null) {
this._title = savedInstanceState.getInt(TITLE);
this._message = savedInstanceState.getInt(MESSAGE);
this._positiveText = savedInstanceState.getInt(POS_TEXT);
this._state = savedInstanceState.getInt(STATE);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getResources().getString(this._title))
.setMessage(getResources().getString(_message))
.setPositiveButton(getResources().getString(_positiveText), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
if(actionPerformed)
return;
actionPerformed = true;
mListener.onDialogPositiveClick(TransactionDialog.this);
}
});
dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
dialog.show();
dialog.setOnKeyListener(new OnKeyListener() {
#Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
mListener.onDialogPositiveClick(TransactionDialog.this);
}
return false;
}
});
return dialog;
}
#Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the
// host
mListener = (NoticeDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement NoticeDialogListener");
}
}
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogDismissed();
}}
Here i am using the txndialog class for creating the alert dialog.
private TransactionDialog transactionDialog;
transactionDialog = (TransactionDialog) newTransactionFrgment;
transactionDialog.setListener(this);
transactionDialog = new TransactionDialog(R.string.transaction_complete_header, R.string.transaction_complete_message,
R.string.transaction_complete_positive_button, STATE_SET_TRANSACION);
transactionDialog.show(getFragmentManager(), TRANSACTION_DIALOG_TAG);