में कुछ एंड्रॉइड यूआई सामान करें क्या गैर-यूआई थ्रेड में यूआई परिवर्तन करने का कोई तरीका है? संक्षिप्त सवालगैर-यूआई थ्रेड
उत्तर
आप एक AsyncTask उपयोग करने के लिए, अपने मुख्य गतिविधि में एक आंतरिक वर्ग (ResponseHandler) के साथ पर्यवेक्षक पैटर्न की कोशिश चाहते हैं न, तो माफ करना मैं स्वरूपण सही लेकिन यकीन है कि आप विचार प्राप्त im सके
public class WorkerThread extends Observable implements Runnable {
public void run() {
try {
DoSomething();
String response = "Doing something";
setChanged();
notifyObservers(response);
DoSomethingElse();
String response = "Doing something else";
setChanged();
notifyObservers(response);
}
catch (IOException e) {
e.printStackTrace();
}
}
private void DoSomething(){
}
private void DoSomethingElse(){
}
public class MainActivity{
public class ResponseHandler implements Observer {
private String resp;
public void update (Observable obj, Object arg) {
if (arg instanceof String) {
resp = (String) arg;
//Write message to UI here ie System.out.println("\nReceived Response: "+ resp);
//or EditText et = (EditText)findViewById(R.id.blah);
// blah.SetText(resp);
}
}
}
private void doStuffAndReportToUI(){
final WorkerThread wt = new WorkerThread();
final ResponseHandler respHandler = new ResponseHandler();
wt.addObserver(respHandler);
Thread thread = new Thread(wt);
thread.start();
}
ऐसा करने के कई तरीके हैं, AsyncTask or Threads का उपयोग करें। संक्षिप्त जवाब।
सुझाव: यूआई सामान पूर्व postExecute/runOnUiThread/हैंडलर वर्ग
Handler वर्ग चेक बाहर किया जा सकता है। या इन इसी तरह के सवाल पर एक नज़र डालें:
या तो Handler का उपयोग करें या नीचे दिए गए कोड का उपयोग
runOnUiThread(new Runnable()
{
@Override
public void run()
{
// Ui Stuff here
}
});
कोशिश runOnUIThread पता लगाने के लिए()
http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
मैं + tmho जवाब की कोशिश की, लेकिन यह अभी भी इस त्रुटि देता है:
E/AndroidRuntime(****): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
मैं अंत में + ingsaurabh तरीके के साथ यह combinning खत्म, उस तरह:
private class ResponseHandler implements Observer, Runnable {
Activity act;
public ResponseHandler(Activity caller) {
act = caller;
}
@Override
public void update (Observable obj, Object arg) {
act.runOnUiThread(this);
}
@Override
public void run() {
//update UI here
}
}
आप दोनों को धन्यवाद।
- 1. थ्रेड
- 2. थ्रेड
- 3. थ्रेड
- 4. थ्रेड
- 5. थ्रेड
- 6. थ्रेड
- 7. थ्रेड
- 8. थ्रेड
- 9. थ्रेड
- 10. थ्रेड प्राथमिकता और थ्रेड सटीकता
- 11. जावा थ्रेड बनाम ओएस थ्रेड
- 12. बूस्ट। थ्रेड या बस :: थ्रेड?
- 13. एंड्रॉइड यूआई थ्रेड (यूआई थ्रेड)
- 14. थ्रेड पूल बनाम थ्रेड स्पॉइंग
- 15. थ्रेड आईडी बनाम थ्रेड हैंडल
- 16. थ्रेड पूल बनाम कई व्यक्तिगत थ्रेड
- 17. एक थ्रेड में सोना (सी/पॉज़िक्स थ्रेड)
- 18. थ्रेड पूल में सक्रिय थ्रेड संख्या
- 19. एक चर (थ्रेड) की थ्रेड-सुरक्षित सेटिंग?
- 20. मुख्य थ्रेड यूआई थ्रेड के समान है?
- 21. क्यूटी: पृष्ठभूमि थ्रेड रीफ्रेशिंग यूआई थ्रेड
- 22. बूस्ट :: एएसओ, थ्रेड पूल और थ्रेड मॉनिटरिंग
- 23. जावा कैश्ड थ्रेड पूल और थ्रेड स्थानीय
- 24. सी # थ्रेड पूल में कम थ्रेड प्राथमिकता
- 25. SCHED_FIFO थ्रेड को SCHED_OTHER थ्रेड द्वारा लिनक्स
- 26. पृष्ठभूमि थ्रेड
- 27. एंड्रॉइड - थ्रेड
- 28. थ्रेड क्वांटम?
- 29. सी # थ्रेड
- 30. मैं थ्रेड
अच्छी तरह से मूल समस्या यह है कि, धागा मेरी मुख्य गतिविधि की तुलना में अन्य वर्ग में है, और यह अनंत लूप (सॉकेट इत्यादि) में कुछ कर रहा है। – Knobik