java - Update TextView outside Activity through Application -
मेरे पास निम्न तीन वर्ग हैं:
सार्वजनिक वर्ग ApplicationView आवेदन को बढ़ाता है { निजी स्थिर संदर्भ mContext; निजी स्थिर अंतिम स्ट्रिंग TAG = "एप्लिकेशनदृश्य"; सार्वजनिक स्थिर संदर्भ getContext () {Log.i (TAG, "getContext:" + mContext); वापसी mContext; } सार्वजनिक स्थिर शून्य सेटकोन्टेक्स्ट (संदर्भ मिमीकॉन्टेक्स्ट) {लॉग.i (टैग, "सेटकॉन्टेक्स्ट:" + मिमीकॉन्टेक्स्ट); MContext = mmContext; }}
सार्वजनिक श्रेणी के वीडियोकैप्चर गतिविधि को लागू करता है SurfaceHolder.Callback {सार्वजनिक शून्य पर क्रेट (बंडल सहेजे गए इन्स्टैंसस्टेट) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); ApplicationView.setContext (this); }} -------------------------- सार्वजनिक वर्ग ओवरलेविव सरफेसव्यू लागू करता है SurfaceHolder.Callback {सार्वजनिक शून्य अद्यतनटेक्स्ट () {संदर्भ mcontext = ApplicationView.getContext (); ((VideoCapture) mcontext)। RunOnUiThread (नया रननाबल) (सार्वजनिक शून्य रन () {स्ट्रिंग न्यूटेक्स्ट = "ब्लैए ब्लैए ब्लैक" टेक्स्टव्यू txtView = (TextView) findViewById (R.id.txt_status); txtView.setText (NewText); }}); }}
मेरे प्रकट में:
- आवेदन में: एंड्रॉइड: name = "xxx.yyy.zzz.ApplicationView"
- गतिविधि में: एंड्रॉइड: नाम = "xxx.yyy.zzz.VideoCapture"
यह मुझे देता है जब मैं अपडेट टेक्स्ट को निम्न NullPointerException त्रुटि पर कॉल करता हूं:
<कोड> 02-17 नवम्बर: 15: 27.850: ई / AndroidRuntime (15834): गंभीर अपवाद: मुख्य नवम्बर 02-17: 15: 27.850: ई / AndroidRuntime (15834): java.lang.NullPointerException 02- 17 11: 15: 27.850: ई / AndroidRuntime (15834): 15: 27.850: ई / AndroidRuntime (15834): एंड्रॉयड पर xx.yyy.zzz.OverlayView $ 2.run (OverlayView.java:137) 02-17 नवम्बर में .app.Activity.runOnUiThread (Activity.java:4591) 02-17 नवम्बर: 15: 27.850: ई / AndroidRuntime (15834): xxx.yyy.zzz.OverlayView.updateText (OverlayView.java:133) में 02-17 नवम्बर : 15: 27.850: ई / AndroidRuntime (15834): xxx.yyy.zzz.OverlayView $ 1.onPreviewFrame (OverlayView.java:122) में 02-17 नवम्बर: 15: 27.850: ई / AndroidRuntime (15834): पर android.hardware .Camera $ EventHandler.handleMessage (कैमरा.जावा: 754) 02-17 11: 15: 27.850: ई / एंड्रॉइडरुन समय (15834): एंड्रॉइड.ओएस। हेंडलर डिस्पेच मेसेज (हैंडलर.जावाः 99) 02-17 11: 15: 27.850: ई / एंड्रॉइड रेंटाइम (15834): एंड्रॉइड.ओएस.लॉपर। लूप पर (Looper.java:137 ) 02-17 11: 15: 27.850: ई / एंड्रॉइड रेंटाइम (15834): एंड्रॉइड। एप। एक्टिवटीट्रेड.माइन (गतिविधिट्रेड.जेवा 0745) 02-17 11: 15: 27.850: ई / एंड्रॉइडरेंटाइम (15834): जावा पर .lang.reflect.Method.invokeNative (नेटिव मेथड) 02-17 11: 15: 27.850: ई / एंड्रॉइडरेंटाइम (15834): java.lang.reflect.Method.invoke पर (विधि.जावात्र 11) 02-17 11: 15: 27.850: ई / AndroidRuntime (15834): com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786) में 02-17 नवम्बर: 15: 27.850: ई / AndroidRuntime (15834): पर कॉम .android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 02-17 नवम्बर: 15: 27.850: ई / AndroidRuntime (15834): पर dalvik.system.NativeStart.main (मूल निवासी विधि) < / Pre>
मैं क्या गलत करता हूँ? OverlayView में updateText कॉल करने का एक बेहतर तरीका है? सभी को धन्यवाद!
मुझे लगता है कि यह खराब व्यवहार है जब गतिविधि कक्षा को छोड़कर कोई भी कक्षा लेआउट और / या विचारों के बारे में जानता है इस गतिविधि का मेरा सुझाव विधि बनाने के लिए है जो ढूँढता है और VideoCapture गतिविधि में TextView अपडेट करता है और UI थ्रेड पर इस ऑपरेशन को निष्पादित करता है: सार्वजनिक शून्य अद्यतन पाठ (अंतिम स्ट्रिंग पाठ) {runOnUiThread ( नया रननाबल () {सार्वजनिक शून्य रन () {टेक्स्टव्यू txtView = (टेक्स्टदृश्य) खोजव्यूबीआईआईडी (आर.आईड.टेक्स्ट_स्टेटस); txtView.setText (टेक्स्ट);}}); } और इसे कॉल करें ओवरलेव्यू : संदर्भ mcontext = ApplicationView.getContext (); ((वीडियोकैप्चर) mcontext) .updateText ("bla bla bla");
Comments
Post a Comment