2011-05-29 5 views
5

में संदर्भ हो रही मैं एंड्रॉयड यूआई (जो Runnable लागू करता है)एक वर्ग को लागू करने वाली Runnable

से एक अलग सूत्र में मैं (अक्षांश और देशांतर के रूप में जीपीएस डेटा) कुछ डेटा प्राप्त है कि में वाला ऐप और इस डेटा से मैं

चाहते बाहर सही पता है कि यह एक जियोकोडर को पास करके लगता है ..... के बाद उस पते जियोकोडर द्वारा दिया मैं एक डेटाबेस में संग्रहीत:

यहाँ कैसे मैं इन करते हैं चीजें:

public class Client implemets Runnable{ 


public void run() 
{ 

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault()); 



} 

} 

लेकिन मैं यहाँ त्रुटि मिलती है:

Geocoder myLocation=new Geocoder(getApplicationContext,Locale.getDefault()); 

Runnable पता नहीं है जो getApplicationContext है ..... मैं के साथ "यह" के बजाय, लेकिन एक ही कहानी की कोशिश की .....

अब जो Geocoder कन्स्ट्रक्टर में पास करने के लिए सही संदर्भ है ????

Geocoder myLocation =new Geocoder(context,locale); 

मेरी गतिविधि में मैं यह कर:

यहाँ कैसे जियोकोडर निर्माता की तरह दिखता है है

public class Server2 extends Activity { 


public void onCreate(Bundle icicle) { 


ClientThread_special client = new ClientThread_special(db);//here is where I start thread 


     new Thread(client).start(); 
} 


} 

public class ClientThread_special implements Runnable { 



public ClientThread_special(DBAdapter db){ 

    this.db=db; 
    } 


public void run() 

{ 

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault()); 


} 


} 

मैं कैसे निर्माता को संशोधित करना चाहिए

public ClientThread_special(DBAdapter db){ 

    this.db=db; 

    } 

मेरे रननेबल सर्वर 2 के संदर्भ में होने के लिए?

+0

आप एक धागा क्यों प्रयोग कर रहे हैं? Google ऐसी चीजों के खिलाफ अनुशंसा करता है: http://developer.android.com/resources/articles/painless-threading.html – Haphazard

+0

@ हैफज़र्ड कि लिंक मर चुका है। – tony9099

उत्तर

10

मुझे लगता है कि आपकी कक्षा ClientThreadSpecial एक अलग वर्ग है (आंतरिक कक्षा नहीं)? यदि हां, तो आप अपने कॉलिंग गतिविधि से संदर्भ क्यों नहीं पारित करते?

यदि यह एक आंतरिक श्रेणी है, तो यह भी आसान है। अपने ClientThreadSpecial स्तरीय MyActivity स्तरीय (जो गतिविधि फैली) की एक आंतरिक वर्ग मानते हुए है, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

Geocoder myLocation=new Geocoder(MyActivity.this,Locale.getDefault()); 
+0

यह एक आंतरिक वर्ग नहीं है ... और यह वही था जो मैंने किया था ... केवल थोड़ी देर लग गई जब तक मुझे यह पता नहीं चला कि यह कैसे करना है :) – embry

3

आप this का उपयोग नहीं कर सकते क्योंकि this एक रननेबल को संदर्भित करता है। चूंकि रननेबल को MyActivity (आपकी गतिविधि/सेवा नाम से प्रतिस्थापित) के भीतर परिभाषित किया गया है, तो आप MyActivity.this देख सकते हैं।

+0

मैं अपना प्रश्न संपादित करूंगा ... क्या आप इसे देख सकते हैं !! – embry

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^