В приложении нет доступного экземпляра типа
У меня есть этот код:
Thread thread = new Thread(null, vieworders, "MagentoBackground");
thread.start();
m_progressDialog = ProgressDialog.show(SoftwarePassionView.this,
"Please wait...", "Retrieving data...", true);
Это приводит к следующей ошибке компиляции:
Нет экземпляра экземпляра типа SoftwarePassionView доступен в области
Как это вызвано и как я могу его решить?
Ответы
Ответ 1
Выражение SoftwarePassionView.this
имеет смысл только в том случае, если код в фрагменте примера находится в нестационарном внутреннем/вложенном классе, а один из входящих классов - SoftwarePassionView
. В нем говорится: "Дайте мне экземпляр SoftwarePassionView
".
Если этот код не в этом контексте (как указывает ошибка компилятора), вам нужно заменить выражение на стандартное имя переменной или вызов метода, который дает ссылку на некоторый объект SoftwarePassionView
.
Для записи здесь приведен пример, где SoftwarePassionView.this
не будет ошибкой компиляции:
public class SoftwarePassionView {
public class Inner {
...
public void doIt() {
Thread thread = new Thread(null, vieworders, "MagentoBackground");
thread.start();
m_progressDialog = ProgressDialog.show(SoftwarePassionView.this,
"Please wait...", "Retrieving data...", true);
}
}
}
Ответ 2
Вы пытаетесь получить this
для окружающего класса, который будет работать, если вы были внутри анонимного класса, но я предполагаю, что это не тот случай.
Пожалуйста, прочитайте http://mindprod.com/jgloss/this.html
Ответ 3
Если вы хотите поместить свой фрагмент в другой класс, а не в SoftwarePassionView, вы можете передать экземпляр класса SoftwarePassionView в свой конструктор потоков.
Вот пример:
Class SoftwarePassionView {
....
Thread thread = new something(SoftwarePassionView);
thread.start();
......
}
В другом классе
Class something extends Thread{
SoftwarePassionView SPV;
something(SoftwarePassionView){
super(null, vieworders, "MagentoBackground");
this.SPV = SoftwarePassionView}
}
@Override
public void run(){
m_progressDialog = ProgressDialog.show(SPV,
"Please wait...", "Retrieving data...", true);
}
}