2017-05-17 1 views
0

ok alors qu'est-ce qui me manque ici? J'essaie de démarrer une barre de progression circulaire en appuyant sur un bouton et de l'arrêter après que les méthodes terminent la barre de progression ne s'affiche pas ou affiche uniquement lorsque les tâches sont terminées bizarre car il semble que dans d'autres didacticiels je vais bien.barre de progression android ne montre pas

public class contacts extends AppCompatActivity { 
Cursor cursor; 
Cursor cursor2; 
ArrayList<String> vCard ; 
String vfile; 
int a; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_contacts); 
    AdView mAdView = (AdView) findViewById(R.id.adView2); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    mAdView.loadAd(adRequest); 
    final ProgressBar pro = (ProgressBar) findViewById(R.id.pb); 
    pro.setVisibility(View.GONE); 

    TextView text = (TextView) findViewById(R.id.textView5); 
    cursor2 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    a = cursor2.getCount(); 
    StringBuilder sb = new StringBuilder(); 
    sb.append("נמצאו"); 
    sb.append(" "); 
    sb.append(a); 
    sb.append(" "); 
    sb.append("אנשי קשר"); 

    String b1 = sb.toString(); 
    text.setText(b1); 
    // Log.d("printwtfbro",String.valueOf(a)); 
    Button btn2 = (Button) findViewById(R.id.button6); 



    btn2.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 





      //vfile = "Contacts" + "_" + System.currentTimeMillis() + ".vcf"; 
      vfile = "גיבוי אנשי קשר" + ".vcf"; 
      /**This Function For Vcard And here i take one Array List in Which i store every Vcard String of Every Conatact 
      * Here i take one Cursor and this cursor is not null and its count>0 than i repeat one loop up to cursor.getcount() means Up to number of phone contacts. 
      * And in Every Loop i can make vcard string and store in Array list which i declared as a Global. 
      * And in Every Loop i move cursor next and print log in logcat. 
      * */ 

      try { 

       pro.setVisibility(View.VISIBLE); 
       //pro.setProgress(30); 
       getVcardString(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 


     private void getVcardString() throws IOException { 
      // TODO Auto-generated method stub 
      //ProgressBar pro = (ProgressBar)findViewById(R.id.pb); 

      // ProgressBar pro = (ProgressBar) findViewById(R.id.pb1); 
      vCard = new ArrayList<String>(); // Its global.... 
      cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
      if (cursor != null && cursor.getCount() > 0) { 
       int i; 
       String storage_path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile; 
       FileOutputStream mFileOutputStream = new FileOutputStream(storage_path, false); 
       cursor.moveToFirst(); 
       for (i = 0; i < cursor.getCount(); i++) { 

        get(cursor); 
        Log.d("TAG", "Contact " + (i + 1) + "VcF String is" + vCard.get(i)); 
        cursor.moveToNext(); 

        mFileOutputStream.write(vCard.get(i).toString().getBytes()); 
       } 
       mFileOutputStream.close(); 
       cursor.close(); 
       pro.setVisibility(View.GONE); 
      } else { 
       Log.d("TAG", "No Contacts in Your Phone"); 
      } 
     } 

     private void get(Cursor cursor2) { 
      String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
      Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); 
      AssetFileDescriptor fd; 
      try { 
       fd = getContentResolver().openAssetFileDescriptor(uri, "r"); 

       FileInputStream fis = fd.createInputStream(); 
       byte[] buf = new byte[(int) fd.getDeclaredLength()]; 
       fis.read(buf); 
       String vcardstring = new String(buf); 
       vCard.add(vcardstring); 
      } catch (Exception e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

    }); 
}} 

fichier xml

<TextView 
    android:id="@+id/textView5" 
    style="@style/Widget.AppCompat.TextView.SpinnerItem" 
    android:layout_width="247dp" 
    android:layout_height="41dp" 
    android:layout_marginTop="8dp" 
    android:textColor="@color/common_google_signin_btn_text_dark_focused" 
    android:textSize="24sp" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/imageView2" /> 

<ProgressBar 
    android:id="@+id/pb" 
    style="?android:attr/progressBarStyle" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:layout_constraintBottom_toTopOf="@+id/adView2" 
    app:layout_constraintTop_toBottomOf="@+id/button6" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintVertical_bias="0.168" /> 

Répondre

1

S'il vous plaît essayer d'exécuter la fonction getVcardString() dans un autre thread. Une fois que vous avez terminé avec cette fonction, utilisez un gestionnaire et exécutez la barre de progression de la visibilité de la barre de progression à partir de là.

quelque chose comme:

pro.setVisibility(View.VISIBLE); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      getVcardString(); 
     } 
    }).start(); 

ensuite de la fonction getVcardString():

private void getVcardString(){ 
    .... 

    new Handler(Looper.getMainLooper()).post(new Runnable() { 
     @Override 
     public void run() { 
      pro.setVisibility(View.GONE); 
     } 
    }); 
} 
+0

fonctionne parfaitement! Merci! –