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(); 
      } 
     } 
} 

Und in getView ich so etwas wie dies bin mit:Zeigte Status für das letzte Listenelement in einem Listview-ViewHolder mit

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) { 

    } 

    } 

Wie Sie in getView (...) Methode sehen können, ich bin drei verschiedene Arten von Zeichen verwenden (nämlich: - online, lokal, Standard)

Wenn Online zeigt, dass Daten auf den Online-Server hochgeladen wurden, zeigt dies, dass dies zur lokalen Datenbank und Standard hinzugefügt wurde in der lokalen Datenbank gespeichert)

Problem:

Immer, wenn ich Bulk-Upload tue, online ziehbar nur in einer Liste für die letzte Reihe Einzelteil erhalten haben, während ich ganze Liste Positionsdaten an den Server hochgeladen haben

Ich möchte nur für Online-ziehbar zeigen alle Listenelemente, haben diejenigen, die ich auf den Server hochgeladen, sonst mein Code funktioniert gut ...

Fast vollständigen Code:

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

Ich bin verwirrt nach dem Lesen Ihrer Frage. –

+0

in 'onPostExecute' nehmen an,' dataPosition' statt 'globalPosition' zu verwenden – Bharatesh

+0

Ich habe es auch mit dataPosition versucht, aber bekomme dasselbe Ergebnis – Sun

Antwort

0

Ausgabe ist in holder.dataImageButton.setOnClickListener Methodenblock, Positionswert, den Sie globalPosition (globalPosition = position;) zuweisen, wird an die Methode getView übergeben (getView wird jedes Mal aufgerufen, wenn die Ansicht wiederverwendet wird). Daher sollten Sie die Position auf das holder.dataImageButton-Tag setzen und von diesem in Ihrem setOnClickListener-Methodenblock abrufen.

gesetzt So die Position in holder.dataImageButton Tag

holder.dataImageButton.setTag(position); 

nach der Codezeile

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

und Ihre setOnClickListener Methode ändern, wie

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

aber ich habe das Problem, wenn ich Bulk-Upload nur mache - überprüfen Sie UploadBulkData – Sun

+0

Beim Aufrufen von UploadBulkData übergeben Sie GlobalPosition Wert, d. H. Einen einzelnen Wert. Entweder müssen Sie eine Schleife im buttonAllData.setOnClickListener-Methodenblock erstellen, oder Sie können ein vollständiges Array von Dateien zum Upload an UploadBulkData asynctask übergeben und eine Schleife in der doInBackground-Methode erstellen. –

+0

Ich habe versucht, kann mir den Weg zeigen .. das ist das einzige, was ich nicht in meiner App erreicht habe, und verbrachte etwa 4 Tage mit diesem .. aber ich hoffe, Sie können mein Problem innerhalb weniger Minuten lösen, Freund ich habe meine gegeben am besten .. helft mir, es fertig zu machen – Sun

0

Es erscheint, dass in beiden UploadData und UploadBulkData wird der exakt gleiche Code für up verwendet Datierung der hochgeladenen Datenbank: myDbbv.InsertData(fileNameDB). Dies hätte zur Folge, dass nur die letzte Datei von UploadBulkData als hochgeladen markiert würde, was mit dem problematischen Verhalten übereinstimmt, das Sie sehen.

Versuchen Sie, myDbbv für jede Datei zu aktualisieren, die in UploadData hochgeladen wird, und sehen Sie, ob es hilft.