2012-10-15 24 views
9

मेरे पास एक बैकअप दिनचर्या है जो एक फ़ोल्डर से बाहरी एसडी कार्ड में सबकुछ कॉपी करती है जो पूरी तरह से काम करती है। मैं एक अच्छा पॉपअप संवाद बॉक्स प्राप्त करने की कोशिश कर रहा हूं जो दिखाता है कि यह कब चल रहा है लेकिन यह दिखाया नहीं जा रहा है। चलाने का भी प्रयास नहीं करता है (लेकिन बैकअप पूरा हो जाता है)।कोई कार्य करने के दौरान प्रोग्रेसडिअलॉग नहीं दिख रहा है

public void doBackup(View view) throws IOException{ 
    ProgressDialog pd = new ProgressDialog(this); 
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    pd.setMessage("Running backup. Do not unplug drive"); 
    pd.setIndeterminate(true); 
    pd.setCancelable(false); 
    pd.show(); 
    File source = new File("/mnt/extSdCard/DirectEnquiries"); 
    File dest = new File("/mnt/UsbDriveA/Backup"); 
    copyDirectory(source, dest); 
    pd.dismiss(); 
} 
+0

आप (onCreate में इस विधि) बुला रहे हैं ????? –

+0

इसे बटन पर दबाया जा रहा है – TMB87

उत्तर

30

आप Thread में या AsyncTask में लंबे समय से चल रहे कार्यों को चलाते हैं। फिर आपका ProgressDialog दिखाई देगा।

करो की तरह कुछ:

public void doBackup(View view) throws IOException{ 
    final ProgressDialog pd = new ProgressDialog(this); 
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    pd.setMessage("Running backup. Do not unplug drive"); 
    pd.setIndeterminate(true); 
    pd.setCancelable(false); 
    pd.show(); 
    Thread mThread = new Thread() { 
     @Override 
     public void run() { 
      File source = new File("/mnt/extSdCard/DirectEnquiries"); 
      File dest = new File("/mnt/UsbDriveA/Backup"); 
      copyDirectory(source, dest); 
      pd.dismiss(); 
     } 
    }; 
    mThread.start(); 
} 
+0

यह एक आकर्षण काम करता है, आपको बहुत धन्यवाद – TMB87

+0

क्या आप समझा सकते हैं कि हमें pd.dismiss() क्यों रखना चाहिए; धागे के अंदर मैंने mThread.join() का उपयोग किया और मैंने pd.dismiss() डाल दिया इसके बाद यह काम नहीं करता है? –

+0

प्रोग्रेसडिअलॉग ऑब्जेक्ट का दिखाना और खारिज करना एक हैंडलर के साथ किया जाना चाहिए, क्योंकि केवल मूल धागा दृश्य को स्पर्श कर सकता है। –

1

एक asyntask बनाएँ और अपने समय लेने कार्यों

public void doBackup(View view) throws IOException{ 
     ProgressDialog pd = new ProgressDialog(this); 
     pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     pd.setMessage("Running backup. Do not unplug drive"); 
     pd.setIndeterminate(true); 
     pd.setCancelable(false); 
     pd.show(); 
//create asyntask here 
//Put below code in doInBackground mathod 
     File source = new File("/mnt/extSdCard/DirectEnquiries"); 
     File dest = new File("/mnt/UsbDriveA/Backup"); 
     copyDirectory(source, dest); 
//put this code in onPostExecute Method. 
     pd.dismiss(); 
    } 

आप Asyntask के नमूनों की संख्या मिल जाएगा डाल:

यहाँ पल में मेरी कोड है।

0

एक बार में एक समारोह में ऐसा करने के बजाय। निम्नलिखित कदम उठाएं और यह निश्चित रूप से आपके लिए काम करेगा। 1. एक एसिंक क्लास बनाएं। (यह आपकी कॉपी निर्देशिका कार्यक्षमता के लिए एक अलग थ्रेड बनाएगा और मुख्य यूआई पर नहीं चलेंगे।) 2. एसिंक क्लास निष्पादित करने से पहले अपना प्रगति संवाद दिखाएं। 3. पोस्ट निष्पादन विधि पर, अपना संवाद खारिज करें।