2011-05-28 14 views
31

पर डेटा लोड मैं एक चरखा संवाद दिखाना चाहते हैं, जबकि जबकि मेरी एप्लिकेशन कुछ डेटा लोड:दिखाएँ चरखा संवाद एंड्रॉयड

Spinning wheel dialog

चरखा संवाद एक बटन पर क्लिक दिखाना चाहिए। मैं नीचे दिए गए कोड का उपयोग कर रहा हूं लेकिन अब यह कताई चक्र दिखाता है। क्या समस्या हो सकती है?

public void CheckAccount(String username, String password) { 
    try { 

     final ProgressDialog progDailog = ProgressDialog.show(this, 
      "Progress_bar or give anything you want", 
      "Give message like ....please wait....", true); 
     new Thread() { 
      public void run() { 
       try { 
        // sleep the thread, whatever time you want. 
        sleep(1000); 
       } catch (Exception e) { 
       } 
       progDailog.dismiss(); 
      } 
     }.start(); 

     //getting data code here 
     //getting data code here 
     //getting data code here 
     //getting data code here 
     //getting data code here 

    } catch (Exception e) { 
     Log.e(LOG_TAG, e.getMessage()); 
     PopIt("CheckAccountError", e.getMessage(), "Denied"); 
    } 
} 

उत्तर

48

तो, यह देखते हुए कि इस उत्तर के अधिक से अधिक upvotes हो रही है, मैंने तय कर लिया है कि मैं इसे अपने आप पर लेने के जवाब की गुणवत्ता में सुधार करना चाहिए। जैसा कि मैंने मूल को देखा है, मुझे "मेरे कोड में समस्या क्या है?" के सवाल के लिए कोई वास्तविक 'उत्तर' नहीं दिख रहा है। मैं लिंकिंग को संरक्षित रखने के लिए नीचे दिए गए मूल उत्तर को छोड़ रहा हूं, जो मुझे लगता है कि उत्तर लोकप्रियता का कारण बन गया है।

अपडेट किया गया उत्तर

यह संभावना है कि आप 'एकल थ्रेड मॉडल' का उल्लंघन कर रहे है। एंड्रॉइड यूआई टूलकिट थ्रेडसेफ नहीं है, और केवल 'मुख्य' यूआई थ्रेड से ही छेड़छाड़ की जानी चाहिए। एंड्रॉइड में कुछ उपयोगी सहायक विधियां हैं जिनका उपयोग आप यह सुनिश्चित करने के लिए कर सकते हैं कि यूआई थ्रेड पर आपके यूआई मैनिपुलेशन किए जाएं। इन विधि कॉल के अधिकांश विवरण एंड्रॉइड पेन्सलेस थ्रेडिंग ब्लॉग पोस्ट (नीचे 'एक' शब्द से जुड़े हुए हैं, और त्वरित संदर्भ के लिए here) में पाए जा सकते हैं।

अपने कोड को देखते हुए, मुझे लगता है कि विशिष्ट उल्लंघन यह है कि ProgressDialog यूआई थ्रेड की संभावना में बनाया जा रहा है, जिसे तब नव निर्मित पृष्ठभूमि थ्रेड में खारिज कर दिया जाता है।

आप Runnable में अपनी पृष्ठभूमि विधि को encapsulating और पृष्ठभूमि में काम करने के लिए View#post(Runnable) का उपयोग कर बेहतर होगा।

याद रखें, पृष्ठभूमि करने के कई तरीके हैं, इसलिए उपलब्ध होने पर एक नज़र डालें, और अपनी स्थिति के लिए सही महसूस करें।

मूल उत्तर

कैसे Android में asynchronouswork करने के लिए की manytutorials की one पर एक look लो।

इसके अलावा, यहां कुछ अन्य StackOverflow सवाल है कि मिलते-जुलते हैं

Progress dialog problem in Android

Progress Dialog on open activity

Progress Dialog while starting new activity

Android: Progress Dialog spinner not spinning

Updating progress dialog

android: showing a progress dialog

+1

बिल्कुल सही संदर्भ, बहुत धन्यवाद @ निकोलस! :) – Kris

+6

संदर्भ के उपयोग से प्यार है, +1 :) – xorinzor

32
ProgressDialog dialog = new ProgressDialog(this); // this = YourActivity 
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
dialog.setMessage("Loading. Please wait..."); 
dialog.setIndeterminate(true); 
dialog.setCanceledOnTouchOutside(false); 
dialog.show(); 
+0

आकर्षण की तरह काम किया। हालांकि डेटा लोड होने के बाद इसे कैसे रोकें? – Sykox

+0

संवाद कॉल को छुपाने के लिए 'dialog.dismiss(); ' –

1

मैं दो गतिविधियों, गतिविधि एक और गतिविधि बी के बीच स्विच करने की समस्या थीगतिविधि बी में लंबे समय तक चलने वाले कार्य थे जो UI को अपडेट कर रहे थे, इसलिए यह AsyncTask के लिए उम्मीदवार नहीं था। मैंने गतिविधि ए पर एक प्रगति संवाद लॉन्च करके और गतिविधि को लॉन्च करने से पहले इसे हल करने से पहले इसे हल किया। कोड इस तरह दिखता है:

  // wrap thread around original code for progress button 
      final ProgressDialog ringProgressDialog = ProgressDialog.show(getActivity(), "Working", "Please Wait", 
        true, false); 
      ringProgressDialog.setIndeterminate(true); 
      new Thread(new Runnable() { 
       public void run() { 
        try { 

         Intent startNewActivityOpen = new Intent(getActivity(), ActivityB.class); 
         startNewActivityOpen.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
         startActivity(startNewActivityOpen); 
         GlobalVars.navigateFromScreen = true; 

         Thread.sleep(3000); 


         if (ringProgressDialog != null && ringProgressDialog.isShowing()) { 
          ringProgressDialog.dismiss(); 
         } 

         getActivity().finish(); 


        } catch (Exception e) { 

        } 

       } 

      }).start(); 
संबंधित मुद्दे