2011-03-25 15 views
12

tengo este código:Ningún caso encerrando del tipo es accesible en su alcance

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

Esto da el siguiente error de compilación:

No enclosing Instance of the type SoftwarePassionView is accessible in scope

cómo es esto provocó y cómo puedo solucionarlo?

+5

Es este código dentro de la clase 'SoftwarePassionView' o subclase de ella? – MByD

Respuesta

11

La expresión SoftwarePassionView.this sólo tiene sentido si el código en el fragmento de ejemplo se encuentra en una clase interna/anidada no estático, y una de las clases de cerramiento es SoftwarePassionView. Dice "dame la SoftwarePassionViewinstancia adjunta".

Si este código no está en ese contexto, (como indicaría el error del compilador), debe reemplazar la expresión con un nombre de variable normal o una llamada de método que haga referencia a algún objeto SoftwarePassionView.


Para el registro, que aquí es un ejemplo en el SoftwarePassionView.this no sería un error de compilación:

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); 
     } 
    } 
} 
+0

Honestamente, no estoy seguro de lo que dices. ¿Sería posible obtener un ejemplo? y este es un interior no estático. – Christian

4

Si usted quiere poner su fragmento dentro de una clase diferente en vez de SoftwarePassionView, puede pasar una instancia de la clase SoftwarePassionView en su constructor de subprocesos.

Aquí se muestra un ejemplo:

Class SoftwarePassionView { 
    .... 

    Thread thread = new something(SoftwarePassionView); 
    thread.start(); 
    ...... 
    } 

En la otra clase

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); 
    } 

    } 
Cuestiones relacionadas