Подтвердить что ты не робот

В приложении нет доступного экземпляра типа

У меня есть этот код:

Thread thread = new Thread(null, vieworders, "MagentoBackground");
thread.start();
m_progressDialog = ProgressDialog.show(SoftwarePassionView.this, 
    "Please wait...", "Retrieving data...", true);

Это приводит к следующей ошибке компиляции:

Нет экземпляра экземпляра типа SoftwarePassionView доступен в области

Как это вызвано и как я могу его решить?

4b9b3361

Ответ 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);
     }

  }