2014-09-20 2 views
0

dans mon application, j'ai besoin de passer des paramètres à TimerTask pour une utilisation Context. mais je ne peux pas le faire. dans ce code ci-dessous GetSMSThread classe est subclass et qui ont besoin d'obtenir des paramètres de la classe principale.Android passer les paramètres à TimerTask étend la classe

Timer smsThread = new Timer(); 
GetSMSThread getSMSThread = new GetSMSThread(); 
smsThread.scheduleAtFixedRate(getSMSThread, 0, 100000); 

GetSMSThread subClass:

public class GetSMSThread extends TimerTask { 
    @Override 
    public void run() { 

    } 
} 
+0

Vous pouvez vous déclarer la classe TimerTask lui-même dans MainClass – SilentKiller

Répondre

1

Il a deux façons de résoudre votre problème

  • Déclarez votre GetSMSThread elle-même à MainClass donc pas besoin d'envoyer params dans Constructor

  • Une autre façon est d'envoyer des paramètres dans Constructors



Option 1:

public class MainClass extends Activity { 

    private String myString = ""; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // .... your code 
     Timer smsThread = new Timer(); 
     GetSMSThread getSMSThread = new GetSMSThread(); 
     smsThread.scheduleAtFixedRate(getSMSThread, 0, 100000); 
     myString = "assigning some value"; 
    } 

    public class GetSMSThread extends TimerTask { 

     @Override 
     public void run() { 
      myString = "manipulating Values"; 
     } 
    } 

} 

Option 2:

public class MainClass extends Activity { 

    private String myString = ""; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // .... your code 
     myString = "assigning some value"; 
     Timer smsThread = new Timer(); 
     GetSMSThread getSMSThread = new GetSMSThread(myString); 
     smsThread.scheduleAtFixedRate(getSMSThread, 0, 100000); 
    } 

} 

GetSMSThread:

public class GetSMSThread extends TimerTask { 

    private String myString = ""; 

    public GetSMSThread(String mString) { 
     myString = mString; 
    } 

    @Override 
    public void run() { 
     myString = "manipulating Values"; 
    } 
} 
0
Timer smsThread = new Timer(); 
    GetSMSThread getSMSThread = new GetSMSThread("data"); 
    smsThread.scheduleAtFixedRate(getSMSThread, 0, 100000); 
    GetSMSThread subClass: 

    public class GetSMSThread extends TimerTask { 

    String data; 
    GetSMSThread(String data){ 

    this.data = data; 

    } 
     @Override 
     public void run() { 
       //use data here 
     } 
    } 
0

Vous pouvez passer un objet de contexte à une classe par un constructeur.

public class GetSMSThread extends TimerTask { 
Context context; 
public GetSMSThread (Context context){ 
    this.context = context; 
} 
@Override 
public void run() { 
    //make sure you dont use the context in a background thread 
} 
} 

Vous pouvez instancier le ** GetSMSThread ** classe et passer un contexte valide à elle:

GetSMSThread myThread = new GetSMSThread(myContext); 
//start your timer 
Questions connexes