Как я понимаю, метод uploadImageToServer()
выполняет некоторое сетевое действие. Если это так, вы должны сделать это в потоке не-пользовательского интерфейса. Кроме того, в вашем коде catLoadingView.dismiss();
не будет ждать, пока ваш асинхронный процесс не будет выполнен, и сразу же скрывает представление загрузки. Вы должны использовать какой-нибудь метод обратного вызова, чтобы исправить завершение процесса загрузки, а затем отклонить ваше представление.
Это будет выглядеть так:
Ваш интерфейс обратного вызова:
interface MyCallback {
void onUploaded();
}
ваш метод загрузки:
void upload(MyCallback callback) {
// some async process on non-UI thread
callback.onUploaded();
}
Наконец, вызовите ваш метод:
case R.id.socialMediaShareButton:
catLoadingView.show(getSupportFragmentManager(),"");
//loadingDialog = LoadingDialog.Companion.get(SocialMediaActivity.this).show();
uploadImageToServer(new MyCallback() {
runOnUiThread {
catLoadingView.dismiss();
}
});
break;
Дизайном для каждой переменной 'x' (в этом случае) не предназначен, чтобы быть присвоенным. Я удивлен, что это даже компилирует прекрасный.
String[] currentState = new String[answer.length()];
for (String x : currentState) {
x = "_"; // x is not a reference to some element of currentState
}
следующий код, возможно, показывает то, что Вы, в действительности делают. Обратите внимание, что это не то, как перечисления работают, но это иллюстрирует, почему Вы не можете присвоить 'x'. Это - копия элемента в местоположении 'я'. (Редактирование: обратите внимание, что элемент является ссылочным типом, как таковым, это - копия той ссылки, присвоение на ту копию не обновляет ту же ячейку памяти т.е. элемент в местоположении 'я')
String[] currentState = new String[answer.length()];
for (int i = 0; i < answer.length(); i++) {
String x = currentState[i];
x = "_";
}
Исходный код:
String currentState = new String[answer.length()];
for(String x : currentState)
{
x = "_";
}
Переписанный код:
String currentState = new String[answer.length()];
for(int i = 0; i < currentState.length; i++)
{
String x;
x = currentState[i];
x = "_";
}
, Как я написал бы код:
String currentState = new String[answer.length()];
for(final String x : currentState)
{
x = "_"; // compiler error
}
Переписанный код с ошибкой:
String currentState = new String[answer.length()];
for(int i = 0; i < currentState.length; i++)
{
final String x;
x = currentState[i];
x = "_"; // compiler error
}
Создание финала переменных выделяется, когда Вы делаете вещи как это (это - общая ошибка новичка). Попытайтесь сделать весь свой финал переменных (экземпляр, класс, аргументы, исключения в выгоде. и т.д....) - только делают их неокончательными, если действительно необходимо изменить их. Необходимо найти, что 90%-95% переменных являются окончательными (новички будут волновать с 20%-50%, когда они начнут делать это).
Поскольку x
ссылка (или переменная ссылочного типа ). Вся первая часть кода делает повторно указать на ссылку на новое значение. Например
String y = "Jim";
String x = y;
y = "Bob";
System.out.println(x); //prints Jim
System.out.println(y); //prints Bob
то, что Вы повторно присваиваете ссылку y
"Bob", не влияет на то, чему была присвоена ссылка x
.
Можно преобразовать массив в Список и затем выполнить итерации как это:
String[] currentState = new String[answer.length()];
List<String> list = Arrays.asList(currentState);
for(String string : list) {
x = "_";
}
Object x [] = {1, "ram", 30000f, 35, "account"}; для (Объект i: x) System.out.println (я); для каждого используется для последовательного доступа