Полагаю, я понимаю, о чем вы спрашиваете. Хотя вы говорите, что хотите «вернуть» его (по сути) из метода выборки, достаточно сказать, что вы просто хотите использовать значение, полученное после завершения выборки. Если это так, это то, что вам нужно сделать:
. После того, как ваша выборка завершится успешно, вы можете делать много вещей с переменной. 4а и 4b - некоторые простые примеры:
4a. Изменить. В качестве примера использования вы можете запустить все, что вам нужно для запуска в вашем классе, который использует yourNameVariable
(и вы можете быть уверены, что yourNameVariable
не является нулевым)
4b. Изменить: в качестве примера использования вы можете использовать переменную в функции, которая запускается кнопкой onClickListener.
Попробуйте это.
// 1. Create a variable at the top of your class
private String yourNameVariable;
// 2. Retrieve your value (which you have done mostly correctly)
private void getUserName(String uid) {
databaseReference.child(String.format("users/%s/name", uid))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// 3. Set the public variable in your class equal to value retrieved
yourNameVariable = dataSnapshot.getValue(String.class);
// 4a. EDIT: now that your fetch succeeded, you can trigger whatever else you need to run in your class that uses `yourNameVariable`, and you can be sure `yourNameVariable` is not null.
sayHiToMe();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
// (part of step 4a)
public void sayHiToMe() {
Log.d(TAG, "hi there, " + yourNameVariable);
}
// 4b. use the variable in a function triggered by the onClickListener of a button.
public void helloButtonWasPressed() {
if (yourNameVariable != null) {
Log.d(TAG, "hi there, " + yourNameVariable);
}
}
Затем вы может использовать yourNameVariable
, где бы вы ни захотели на протяжении всего вашего класса.
Примечание: просто убедитесь, что вы проверяете, что yourNameVariable
не является нулевым при его использовании, поскольку onDataChange
является асинхронным и может не завершиться в то время, когда вы пытаетесь использовать его в другом месте.
вы можете добавить следующую строку:
syn region Comment start=/"""/ end=/"""/
в ваш ~ / .vim / after / syntax / python.vim. Вы можете создать этот файл, если он не существует.
PEP 257 предписывает использовать "" "тройные двойные кавычки" "" для docstrings. Не обязательно включать «тройные одинарные кавычки» или «одиночные двойные кавычки» в докстроны. Существует одна трудность, заключающаяся в том, что у нас есть классные докстры, функции docstrings, docstrings модуля, атрибуты docstrings и дополнительные docstrings. Вот почему я решил, что считать docstring проще:
syn region pythonDocString start=+^\s*"""+ end=+"""+ keepend contains=...
И затем:
HiLink pythonDocString Comment
Вы можете увидеть примеры в этом скрипте (search pythonDocString): https://github.com/andbar-ru/python-syntax/blob/master/syntax/python.vim
Для меня работало следующее:
syn region pythonDocstring start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError
syn region pythonDocstring start=+^\s*[uU]\?[rR]\?'''+ end=+'''+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError
Взято из измененного python.vim из здесь .