18
int globalPosition ; 

    .............. 

    buttonAllData.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
     new UploadBulkData(globalPosition).execute(); 

     } 
    }); 

    ........ 

    class UploadBulkData extends AsyncTask<String, String, String> { 
    private ProgressDialog pDialog; 
    int dataPosition; 

    public UploadBulkData(int position){ 
    this.dataPosition = position; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(UploadActivity.this); 
     pDialog.setMessage("Uploading..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 
     ....... 
     String url = "http://web/uploadBulk.php"; 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("UserData", st)); 

     String resultServer = getHttpPost(url,params); 
     Log.d("Entire string::", " " + resultServer); 

     /*** Default Value ***/ 
     strStatusID = "0"; 
     strError = ""; 

     JSONObject jsonObject; 
     try { 
     jsonObject = new JSONObject(resultServer); 
     strStatusID = jsonObject.getString("StatusID"); 
     strError = jsonObject.getString("Message"); 
     } catch (JSONException e) { 
     e.printStackTrace(); 
     } 
    } 

    return null; 

    } 

    protected void onPostExecute(String file_url) { 

     pDialog.dismiss(); 
     fileNameDB=ImageList.get(globalPosition).toString().substring 
      (strPath.lastIndexOf('/')+1, strPath.length()); 

     if(strStatusID.equals("1")) 
      { 
      Toast.makeText(UploadActivity.this, "Data Uploaded Successfully", Toast.LENGTH_SHORT).show(); 

      long saveImge = myDbbv.InsertData(fileNameDB); 
      Log.d("fileNameDB:UP", String.valueOf(saveImge)); 
      } 
      else 
      { 
      Toast.makeText(UploadActivity.this, "Unable to upload Data", Toast.LENGTH_SHORT).show();         
      } 

      if (file_url != null){ 
       Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show(); 
      } 
     } 
} 

E in GetView sto usando qualcosa di simile:Visualizzazione di stato per l'ultimo elemento della lista in una lista utilizzando ViewHolder

public View getView(final int position, View convertView, ViewGroup parent) { 

holder.dataImageView.setImageResource(R.drawable.bullet_button); 

try { 
    // check data exist or not 
    boolean strDataExistU = myDbbv.Exists(fileNameDB); 
    if(strDataExistU) 
    { 
     holder.dataImageView.setImageResource(R.drawable.online); 
    } 
    else 
    { 
     boolean strDataExist = myDb.Exists(fileNameDB); 
     if(strDataExist) 
     { 
     holder.dataImageView.setImageResource(R.drawable.local); 
     } 
     else 
     { 
     holder.dataImageView.setImageResource(R.drawable.default); 
     } 
    }      

    } catch (Exception e) { 

    } 

    } 

Come si può vedere in GetView (...) metodo, io sono utilizzando tre diversi tipi di drawable (vale a dire: - online, locale, predefinito)

Dove online mostra i dati sono stati caricati sul server online, locale mostra che questo è stato aggiunto al database locale e predefinito .. (né caricato sul server né memorizzato nel database locale)

Problema:

Ogni volta che sto facendo caricamento collettivo, ottenendo drawable online solo per l'ultimo elemento riga di una lista, mentre ho caricato i dati interi di voci di elenco di server di

voglio solo mostrare drawable online tutti gli elementi della lista, quelli che ho caricato sul server, altrimenti il ​​mio codice funziona bene ...

Quasi codice completo:

public class UploadActivity extends Activity { 

     int globalPosition ; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  

     setContentView(R.layout.activity_upload); 

     ImageButton buttonAllData = (ImageButton) findViewById(R.id.btnMenus); 
     buttonAllData.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
     // TODO Auto-generated method stub 

      new UploadBulkData(globalPosition).execute(); 

      } 
     }); 

     /*** Get Images from SDCard ***/ 
     ImageList = getSD(); 

     // ListView and imageAdapter 
     lstView = (ListView) findViewById(R.id.listView1); 
     lstView.setAdapter(new ImageAdapter(this)); 

     totalItems = ""+ lstView.getAdapter().getCount(); 
     } 

     public static List <String> getSD() 
     { 
      List <String> it = new ArrayList <String>(); 
      String string = "/mnt/sdcard/Pictures/Joseph/"; 
      f = new File (string+ CameraLauncherActivity.folder+ "/"); 
      files = f.listFiles(); 

      /*** 
      * to show last taken image on top using lastModified 
      * to sort data 
      * to refresh data after (remove or update) 
      */ 
      Arrays.sort(files, new Comparator<Object>() 
      { 
       public int compare(Object o1, Object o2) { 

        if (((File)o1).lastModified() > ((File)o2).lastModified()) { 
         return -1; 
        } else if (((File)o1).lastModified() < ((File)o2).lastModified()) { 
         return +1; 
        } else { 
         return 0; 
        } 
       } 
      }); 
      // <<<<<<<<<END>>>>>>>>>>> 

      for (int i = 0; i < files.length; i++) 
      { 
      file = files[i]; 
      Log.d("Count",file.getPath()); 
      it.add (file.getPath()); 
      } 

     return it; 
     }   

     static class ViewHolder { 
      public ViewHolder(View convertView) { 
       // TODO Auto-generated constructor stub 
      }     
      TextView imageNameTextView; 
      ImageView sdCardImageView, statusImageView, dataImageView; 
      ProgressBar uploadProgressBar; 
      ImageButton uploadImageButton, dataImageButton;    
      boolean isUploading = false;   
     } 

     public class ImageAdapter extends BaseAdapter 
      { 
       public ImageAdapter(Context c) 
       { 

       } 

       public int getCount() { 
        // TODO Auto-generated method stub 
        return ImageList.size(); 
       } 

       public Object getItem(int position) { 
        // TODO Auto-generated method stub 
        return position; 
       } 

       public long getItemId(int position) { 
        // TODO Auto-generated method stub 
        return position; 
       } 

     public View getView(final int position, View convertView, ViewGroup parent) { 
      // Avoid unneccessary calls to findViewById() on each row, which is expensive! 

       holder = null; 

       // If this item is to be synced 
       if(flags.get(position)) {     

        startUpload(position); 

       // Mark as synced 
       flags.put(position, false); 
       } 

       /* 
       * If convertView is not null, we can reuse it directly, no inflation required! 
       * We only inflate a new View when the convertView is null. 
       */ 
       if (convertView == null) { 
       convertView = getLayoutInflater().inflate(R.layout.list_upload, null); 
       holder = new ViewHolder(convertView); 

       // Create a ViewHolder and store references to the children views 
       holder.imageNameTextView = (TextView) convertView.findViewById(R.id.ColImgName); 
       holder.sdCardImageView = (ImageView) convertView.findViewById(R.id.ColImgPath); 
       holder.statusImageView = (ImageView) convertView.findViewById(R.id.ColStatus); 
       holder.uploadProgressBar = (ProgressBar) convertView.findViewById(R.id.progressBar); 
       holder.uploadImageButton = (ImageButton) convertView.findViewById(R.id.btnUpload); 
       holder.dataImageButton = (ImageButton) convertView.findViewById(R.id.btnData);     
       holder.dataImageView = (ImageView) convertView.findViewById(R.id.dataExist); 

       // The tag can be any Object, this just happens to be the ViewHolder 
       convertView.setTag(holder);     
       } else {      
       holder = (ViewHolder) convertView.getTag();    
       } 

       strPath = ImageList.get(position).toString(); 

       // Get File Name 
       fileName = strPath.substring(strPath.lastIndexOf('_')+1, strPath.length()); 
       file = new File(strPath); 
       @SuppressWarnings("unused") 
       long length = file.length(); 
       holder.imageNameTextView.setText(fileName); 

       fileName=ImageList.get(position).toString().substring 
      (strPath.lastIndexOf('_')+1, strPath.length()); 
     fileNameDB=ImageList.get(position).toString().substring 
      (strPath.lastIndexOf('/')+1, strPath.length()); 

       final BitmapFactory.Options options = new BitmapFactory.Options(); 

       options.inSampleSize = 8; 

       Bitmap bm = BitmapFactory.decodeFile(strPath,options); 
       holder.sdCardImageView.setImageBitmap(bm);  

       if(holder.isUploading) {      
        holder.uploadProgressBar.setVisibility(View.VISIBLE); 
       } else { 
        holder.uploadProgressBar.setVisibility(View.GONE); 
       }                      
       holder.dataImageView.setImageResource(R.drawable.bullet_button); 

       try { 
        // check data exist or not 
        boolean strDataExistU = myDbbv.Exists(fileNameDB); 
        if(strDataExistU) 
        { 
         holder.dataImageView.setImageResource(R.drawable.online); 
        } 
        else 
        { 
         // check data exist or not 
         boolean strDataExist = myDb.Exists(fileNameDB); 
         if(strDataExist) 
         { 
          holder.dataImageView.setImageResource(R.drawable.database); 
         } 
         else 
         { 
          holder.dataImageView.setImageResource(R.drawable.default); 
         } 
        }     

       } catch (Exception e) { 
        // TODO: handle exception 
       } 

       fileName = ImageList.get(position).toString().substring 
         (strPath.lastIndexOf('/')+1, strPath.length()); 

       try { 
        boolean strExist = myDbb.Exists(fileName); 
        if(strExist) 
        { 
         holder.statusImageView.setImageResource(R.drawable.onl); 
        } 
        else 
        { 
         holder.statusImageView.setImageResource(R.drawable.bullet_button); 
        } 
       } catch (Exception e) { 
        // TODO: handle exception 
       } 


       // btnData 
       holder.dataImageButton.setOnClickListener(new View.OnClickListener() { 
       @SuppressWarnings("deprecation") 
       public void onClick(View v) { 
        // Print 
        globalPosition = position; 
        fileName=ImageList.get(position).toString().substring 
          (strPath.lastIndexOf('_')+1, strPath.length()); 
        fileNameDB=ImageList.get(position).toString().substring 
          (strPath.lastIndexOf('/')+1, strPath.length()); 
        showDialog(DIALOG_LOGIN); 
        } 
       });  

     return convertView; 

      } 
     } 


         class UploadData extends AsyncTask<String, String, String> { 
          private ProgressDialog pDialog; 

          /** 
          * Before starting background thread Show Progress Dialog 
          * */ 

          @Override 
          protected void onPreExecute() { 
           super.onPreExecute(); 
           pDialog = new ProgressDialog(UploadActivity.this); 
           pDialog.setMessage("Uploading..."); 
           pDialog.setIndeterminate(false); 
           pDialog.setCancelable(true); 
           pDialog.show();      
          } 

          @Override 
          protected String doInBackground(String... args) { 

           String url = "http://web/uploadData.php";          

           List<NameValuePair> params = new ArrayList<NameValuePair>(); 

           params.add(new BasicNameValuePair("sImageName", fileNameDB)); 
           Log.d("sImageName::", fileNameDB); 


           String resultServer = getHttpPost(url,params); 
           Log.d("Entire string::", " " + resultServer); 

           /*** Default Value ***/ 
           strStatusID = "0"; 
           strError = ""; 

           JSONObject c; 
           try { 
            c = new JSONObject(resultServer); 
            strStatusID = c.getString("StatusID"); 
            strError = c.getString("Error"); 
           } catch (JSONException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           }           

           return null; 

          } 
          /** 
          * After completing background task Dismiss the progress dialog 
          * **/ 
          protected void onPostExecute(String file_url) { 
           // dismiss the dialog once product deleted 
           pDialog.dismiss(); 

           try { 

            fileName=ImageList.get(globalPosition).toString().substring 
              (strPath.lastIndexOf('_')+1, strPath.length()); 
            fileNameDB=ImageList.get(globalPosition).toString().substring 
              (strPath.lastIndexOf('/')+1, strPath.length()); 

            // prepare save data 
            if(strStatusID.equals("0")) 
            { 
             Toast.makeText(getApplicationContext(), "Unable to upload Data", 
               Toast.LENGTH_LONG).show(); 
            } 
            else if (strStatusID.equals("1")) 
            { 
             Toast.makeText(getApplicationContext(), "Data Uploaded Successfully!", 
               Toast.LENGTH_SHORT).show(); 
             // Save Data 
             long saveImge = myDbbv.InsertData(fileNameDB); 
             Log.d("fileNameDB:UP", String.valueOf(saveImge)); 
            } else { 
             Toast.makeText(getApplicationContext(), "Unable to upload Data", 
               Toast.LENGTH_LONG).show(); 
            } 

           } catch (Exception e) { 
            // TODO: handle exception 
           } 


          if (file_url != null){ 
           Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show(); 
          } 

         } 

        } 


       }); 

       cancelButton.setOnClickListener(new View.OnClickListener(){ 
        @Override 
         public void onClick(View v) {       
         alertDialog.dismiss(); 
         } 
       }); 

       closeButton.setOnClickListener(new View.OnClickListener(){ 
        @Override 
         public void onClick(View v) {       
         alertDialog.dismiss(); 
         } 
       }); 
      } 
     }  


         class UploadBulkData extends AsyncTask<String, String, String> { 
          private ProgressDialog pDialog; 

          int dataPosition; 

          //constructor to pass position of row, on which button was clicked to class 
          public UploadBulkData(int position){ 
           this.dataPosition = position; 
          } 

          /** 
          * Before starting background thread Show Progress Dialog 
          * */ 

          @Override 
          protected void onPreExecute() { 
           super.onPreExecute(); 
           pDialog = new ProgressDialog(UploadActivity.this); 
           pDialog.setMessage("Uploading..."); 
           pDialog.setIndeterminate(false); 
           pDialog.setCancelable(true); 
           pDialog.show(); 
          } 

          @Override 
          protected String doInBackground(String... args) { 

           String url = "http://web/uploadBulk.php"; 

           List<NameValuePair> params = new ArrayList<NameValuePair>(); 
           params.add(new BasicNameValuePair("EventData", st)); 

           String resultServer = getHttpPost(url,params); 
           Log.d("Entire string::", " " + resultServer); 

           /*** Default Value ***/ 
           strStatusID = "0"; 
           strError = ""; 

           JSONObject jsonObject; 
           try { 
             jsonObject = new JSONObject(resultServer); 
             strStatusID = jsonObject.getString("StatusID"); 
             strError = jsonObject.getString("Message"); 
             } catch (JSONException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
           } 

           return null; 

          } 
          /** 
          * After completing background task Dismiss the progress dialog 
          * **/ 
          protected void onPostExecute(String file_url) { 
           // dismiss the dialog once product deleted 
           pDialog.dismiss(); 

           // Prepare Save Data 
           if(strStatusID.equals("1")) 
           { 
            Toast.makeText(UploadActivity.this, "Data Uploaded Successfully", Toast.LENGTH_SHORT).show(); 
            fileNameDB=ImageList.get(dataPosition).toString().substring 
              (strPath.lastIndexOf('/')+1, strPath.length()); 

            // Save Data 
            long saveImge = myDbbv.InsertData(fileNameDB); 
            Log.d("fileNameDB:UP", String.valueOf(saveImge)); 
           } 
           else 
           { 
            Toast.makeText(UploadActivity.this, "Unable to upload Data", Toast.LENGTH_SHORT).show();          
           } 

           if (file_url != null){ 
            Toast.makeText(UploadActivity.this, file_url, Toast.LENGTH_LONG).show(); 
           } 

          } 

      } 
+2

Sono confuso dopo aver letto la tua domanda. –

+0

in 'onPostExecute' si supponga di usare' dataPosition' invece di 'globalPosition' – Bharatesh

+0

ho provato anche con dataPosition, ma ottengo lo stesso risultato – Sun

risposta

0

questione è in holder.dataImageButton.setOnClickListener Il blocco del metodo, il valore di posizione che si assegna a globalPosition (globalPosition = position;) è quello passato al metodo getView (getView viene chiamato ogni volta che la vista viene riciclata). Pertanto, è necessario impostare la posizione sul tag holder.dataImageButton e recuperarla dal blocco del metodo setOnClickListener.

Quindi impostare la posizione in holder.dataImageButton tag

holder.dataImageButton.setTag(position); 

dopo la vostra linea di codice

holder.dataImageView.setImageResource(R.drawable.bullet_button); 

e modificare il metodo di setOnClickListener come

holder.dataImageButton.setOnClickListener(new View.OnClickListener() { 
    @SuppressWarnings("deprecation") 
    public void onClick(View v) { 
     // Print 
     globalPosition = (Integer)v.getTag(); //modified 
     fileName=ImageList.get(position).toString().substring 
          (strPath.lastIndexOf('_')+1, strPath.length()); 
     fileNameDB=ImageList.get(position).toString().substring 
          (strPath.lastIndexOf('/')+1, strPath.length()); 
     showDialog(DIALOG_LOGIN); 
    } 
}); 
+0

ma sto affrontando il problema, quando sto facendo solo il caricamento collettivo - controlla UploadBulkData – Sun

+0

Durante la chiamata di UploadBulkData stai passando il valore di GlobalPosition, vale a dire un singolo valore. O si deve creare un ciclo nel blocco del metodo buttonAllData.setOnClickListener, oppure è possibile passare l'array completo di file da caricare in UploadBulkData asynctask e creare un ciclo all'interno del metodo doInBackground. –

+0

ho provato può mostrarmi il modo .. questa è l'unica cosa che non ho raggiunto nella mia app, e ho trascorso circa 4 giorni con questo .. ma spero che tu possa risolvere il mio problema in pochi minuti, amico che ho dato al mio meglio .. aiutami a farlo funzionare – Sun

0

Sembra che sia in UploadData e UploadBulkData per lo stesso esatto codice risale al database caricato: myDbbv.InsertData(fileNameDB). Ciò avrebbe l'effetto di contrassegnare solo l'ultimo file di UploadBulkData come caricato, il che è coerente con il comportamento problematico che stai vedendo.

Provare ad aggiornare myDbbv per ogni file che viene caricato in UploadData e vedere se è utile.