Получить имя пользователя другого пользователя из идентификатора пользователя — Parse и Android

Я пытался сделать простое приложение для обмена мгновенными сообщениями для iOS и Android. Все сделал на iOS. Я застрял на одной вещи на Android, хотя.

Всякий раз, когда я отправляю сообщение, оно отправляет сообщение с двумя объектами sender и other. Отправитель — это отправитель сообщения, а другой — лицо, получающее сообщение.

В iOS это дает sender имя пользователя, вошедшего в систему в данный момент. То же самое с other, но он дает имя пользователя человека, получающего сообщение. На Android в настоящее время я могу заставить его дать sender имя пользователяимя текущего пользователя, вошедшего в систему, а other установить на пользователя id человека, получающего сообщение. Я хочу, чтобы Android установил other в качестве имени пользователя.

Я очень новичок в разработке приложений для Java и Android. Я знаю гораздо больше о разработке Swift и iOS. Однако я почти уверен, что для этого потребуется запрос.

Может ли кто-нибудь дать мне указатель на то, как это сделать? Спасибо большое!

Код: Pastebin #1 Pastebin #2 StackOverflow не позволяет мне вставить другую ссылку. Я могу просто вставить его в ответ, если кто-то захочет его посмотреть.

p.s. Извините, если это не имеет особого смысла. Я действительно не знаю, как это описать.


person Insleep    schedule 14.07.2015    source источник


Ответы (3)


Не зная много о sinch (похоже, вы используете этот сервис для обмена сообщениями?), я вижу, что переменная other устанавливается с помощью дополнительного намерения, когда вы создаете MessagingActivity:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        Intent intent = getIntent();
       // recipientId = intent.getStringExtra("RECIPIENT_ID");
        other = intent.getStringExtra("OTHER"); 
        ...

    };

Я бы посмотрел, что дополнительно (с именем «ДРУГОЕ») вы добавляете к намерению в любом действии, вызывающем намерение MessagingActivity.

person bertybro    schedule 15.07.2015

Может быть, не самое понятное, но если вы посмотрите в учебнике по ios, вы запустите клиент sinch с именем пользователя, а не с идентификатором пользователя для синтаксического анализа.

[initSinchClient:self.usernameField.text];

Но в приложении для Android вы запускаете его с идентификатором пользователя синтаксического анализа

currentUserId = ParseUser.getCurrentUser().getObjectId();
        currentUserName = ParseUser.getCurrentUser().getUsername();

        if (currentUserId != null && !isSinchClientStarted()) {
            startSinchClient(currentUserId); //change this 
        }

попробуйте изменить это на startSinchClient(currentUserName);

person cjensen    schedule 15.07.2015

Вы должны сделать Parse Query, если хотите получить имя пользователя получателя из его идентификатора пользователя:

Попробуйте следующее:

String receiverName = null;
List<ParseUser> users = null;
try {
ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
userQuery.whereEqualTo("objectId", other);
users = userQuery.find();
} catch (ParseException e) {
  e.printStackTrace();
}
if( users != null && users.size() >= 1)
{receiverName = users.get(0).getUsername();}
person Maha Benabbou    schedule 16.07.2015
comment
Ву! Спасибо. Я определенно кое-что получаю. Однако я получаю сообщение об ошибке List<ParseUser> users = userQuery.find();. Ошибка: Ошибка: (56, 47) ошибка: незарегистрированное исключение ParseException; должен быть пойман или объявлен брошенным. Что тут происходит? Спасибо!! - person Insleep; 17.07.2015
comment
Только что попробовал это. На этот раз я получаю две ошибки. Один находится на String receiverName = users.get(0).getUsername();, а сообщение об ошибке Not a statement. Другой такой же, как и раньше, userQuery.find(); и сообщение Unhanded exception: com.parse.ParseException. - person Insleep; 17.07.2015
comment
Добавьте такое признание, если (users != null && users.size() ›= 1) {String ReceiverName = users.get(0).getUsername();} Во-вторых, вы должны иметь возможность обрабатывать ParseException, щелкнув на ошибку. На какой IDE вы работаете? Я отредактировал ответ! Надеюсь, поможет - person Maha Benabbou; 17.07.2015
comment
Хорошо, разобрались с этими двумя ошибками. Вторую ошибку на самом деле было очень легко исправить (я забыл импортировать com.parse.ParseException), и я не получаю никаких ошибок внутри Android Studio. Однако теперь, когда я пытаюсь отправить сообщение (внутри приложения), приложение вылетает. (К сожалению, [имя приложения] остановлено.) Спасибо за помощь! - person Insleep; 18.07.2015
comment
Я думаю, что вы где-то получаете исключение nullPointerException. Могу я взглянуть на ваш код? - person Maha Benabbou; 18.07.2015
comment
Проверьте мой GitHub, чтобы увидеть весь код. - person Insleep; 19.07.2015
comment
В вашем коде атрибут other всегда будет нулевым, потому что вы никогда не влияете на его значение, а затем пытаетесь отправить сообщение, подобное этому: messageService.sendMessage(other, messageBody); но другое равно нулю. Он должен представлять идентификатор получателя. Попробуйте ознакомиться с официальным руководством здесь: sinch.com/tutorials/ - person Maha Benabbou; 19.07.2015
comment
Официальный учебник - это то место, откуда я на самом деле получил код. Я только изменил несколько вещей. Я не помню, чтобы они упоминали, как преобразовать идентификатор в имя пользователя. - person Insleep; 19.07.2015
comment
Нет необходимости преобразовывать UserId в UserName, чтобы ваше приложение работало. Но чтобы отправить сообщение, вы должны указать идентификатор получателя! это звучит ясно? - person Maha Benabbou; 19.07.2015
comment
Необходимо преобразовать его ... причина, по которой я хочу это сделать, заключается в том, что версия iOS делает это (язык кодирования Swift), и я хочу иметь возможность видеть сообщения, отправленные iOS из приложения Android, если это имеет смысл . (Приложение iOS устанавливает отправителю имя пользователя отправителя, а не идентификатор пользователя, и то же самое с тем, кому оно отправляется (получатель), и раньше приложение Android устанавливало их как объектные идентификаторы, но затем я смог изменить его, чтобы отправитель - это имя пользователя, а не идентификатор пользователя, но я все еще не могу заставить получателя изменить идентификатор пользователя на имя пользователя Извините, если это не имеет особого смысла. - person Insleep; 20.07.2015
comment
Я понимаю, что ты хочешь сделать. В учебнике у вас есть ListUsersActivity, которая отображает список всех пользователей. Когда вы щелкаете элемент пользователя, открывается MessagingActivity, и вы можете отправить сообщение этому пользователю, вызвав функцию отправки. Обратите внимание, что в методе onClick в ListUsersActivity получатель отправляется в MessagingActivity с помощью намерения.putExtra, а затем в onCreate в MessagingActivity вы можете получить его с помощью: Intentintent=getIntent(); идентификатор получателя = намерение.getStringExtra (RECIPIENT_ID); - person Maha Benabbou; 20.07.2015
comment
Итак, что вы можете сделать, так это поместить атрибут other как жестко закодированный! - person Maha Benabbou; 20.07.2015