मुझे एक प्रोसेसिंग थ्रेड से एंड्रॉइड टोस्ट बनाने की ज़रूरत है, जो ओपनसीवी के लिए कस्टम है, इसलिए मैं runOnUiThread() का उपयोग नहीं कर सकता जैसा कि यहां सुझाया गया है: Android: Toast in a thread।किसी अन्य धागे से टोस्ट बनाने के लिए कैसे करें (sans runOnUiThread)
इनमें से अधिकांश कोड CVCamera नमूना ऐप से है। लेकिन उन अपरिचित, जब मैं सर्फ मेनू बटन का चयन करें, SURFProcessor तो जैसे कहा जाता है:
else if (item.getTitle().equals("SURF")) {
defaultcallbackstack.addFirst(new SURFProcessor());
toasts(DIALOG_TUTORIAL_SURF, "");
}
यह प्रोसेसर धागा इतना है कि जब मैं फ़ोन के कैमरे बटन दबाएँ (capturePress = सच), एक छवि लिया जाता है चलाया जाता है और प्रसंस्करण किया। मैं दिखाया गया है टोस्ट विधि कॉल करना चाहते हैं:
void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........
अभी इस कोड को मुझे एक त्रुटि देता है:
class SURFProcessor implements NativeProcessor.PoolCallback {
@Override
public void process(int idx, image_pool pool, long timestamp,
NativeProcessor nativeProcessor) {
if(capturePress) {
String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
capturePress = false;
toasts(PROCESS_MESSAGE, processMsg);
}
}
}
यहाँ टोस्ट विधि, मुख्य वर्ग में स्थित विस्तार गतिविधि है "नहीं कर सकते थ्रेड के अंदर हैंडलर बनाएं जिसे Looper.prepare() नहीं कहा जाता है। " टोस्ट्स विधि को कॉल करने के बारे में मैं कैसे जा सकता हूं? या क्या प्रक्रियाओं में बदलाव के लिए टोस्ट विधि सुनना संभव है? यदि संभव हो, तो मैं प्रक्रिया संदेश भेजने या इसके बजाय कक्षा चर बदलने के साथ प्राप्त कर सकता हूं। संक्षेप में, मुझे इस प्रोसेसर थ्रेड से अपडेट की गई स्ट्रिंग की आवश्यकता है।
बहुत बहुत धन्यवाद, और यदि चाहें तो मैं अधिक जानकारी/कोड प्रदान करूंगा।
टॉम
धन्यवाद! एक आकर्षण की तरह काम करता है ... मुझे लगा कि इसे करने का एक आसान तरीका होना चाहिए। – wrapperapps