2017-04-03 7 views
1

UploadActivityから画像を選択してアップロードしようとしています。android JSONアップロード画像の収集が機能しない

public static int count; 
    private Bitmap[] thumbnails; 
    private boolean[] thumbnailsselection; 
    private String[] arrPath; 
    private ImageAdapter imageAdapter; 
    private static final int PICK_FROM_CAMERA = 1; 
    ArrayList<String> IPath = new ArrayList<String>(); 
    public static Uri uri; 
    TextView msgLoading; 
    //ProgressBar pBar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload); 
     msgLoading = (TextView) findViewById(R.id.msgLoading); 

     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 


      @Override 
      public void run() { 
       final Cursor imagecursor = getImageCursor(); 

       GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
       imageAdapter = new ImageAdapter(); 
       imagegrid.setAdapter(imageAdapter); 
       imagecursor.close(); 
       msgLoading.setVisibility(View.GONE); 
      } 
     },100); 

     final Button uploadBtn = (Button) findViewById(R.id.uploadDONE); 
     uploadBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final int len = thumbnailsselection.length; 
       int cnt = 0; 
       String selectImages = ""; 
       for (int i = 0; i < len; i++) { 
        if (thumbnailsselection[i]) { 
         cnt++; 
         selectImages = arrPath[i]; 
         IPath.add(selectImages); 
        } 
       } 

       if (cnt == 0) { 
        Toast.makeText(getApplicationContext(), 
          "Please select at least one image", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "You've selected Total " + cnt + " image(s).", 
          Toast.LENGTH_LONG).show(); 
        Log.i("SelectedImages", String.valueOf(selectImages.toCharArray())); 

        Intent intentMessage = new Intent(UploadActivity.this, 
          ImagesForAds.class); 
        intentMessage.putStringArrayListExtra("IMAGE", IPath); 
        startActivity(intentMessage); 
       } 
      } 
     }); 
    } 

    @NonNull 
    private Cursor getImageCursor() { 
     final String[] columns = { MediaStore.Images.Media.DATA, 
       MediaStore.Images.Media._ID }; 
     final String orderBy = MediaStore.Images.Media._ID; 
     final Cursor imagecursor = managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
       null, orderBy); 
     final int image_column_index = imagecursor 
       .getColumnIndex(MediaStore.Images.Media._ID); 
     this.count = imagecursor.getCount(); 
     this.thumbnails = new Bitmap[this.count]; 
     this.arrPath = new String[this.count]; 
     this.thumbnailsselection = new boolean[this.count]; 
     for (int i = 0; i < this.count; i++) { 
      imagecursor.moveToPosition(i); 
      int id = imagecursor.getInt(image_column_index); 
      int dataColumnIndex = imagecursor 
        .getColumnIndex(MediaStore.Images.Media.DATA); 
      thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
        getApplicationContext().getContentResolver(), id, 
        MediaStore.Images.Thumbnails.MICRO_KIND, null); 
      arrPath[i] = imagecursor.getString(dataColumnIndex); 
     } 
     return imagecursor; 
    } 

    public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public ImageAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     public int getCount() { 
      return count; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.galleryitem, null); 
       holder.imageview = (ImageView) convertView 
         .findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView 
         .findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 
        if (thumbnailsselection[id]) { 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 

      holder.imageview.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
      // TODO Auto-generated method stub 
      int id = v.getId(); 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_VIEW); 
      intent.setDataAndType(Uri.parse("file://" + arrPath[id]), 
      "image/*"); 
      startActivity(intent); 
      } 
      }); 

      holder.imageview.setImageBitmap(thumbnails[position]); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
    } 

    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 

    @Override 
    public void onBackPressed() { 
     // TODO Auto-generated method stub 
     Intent i = new Intent(UploadActivity.this, ImagesForAds.class); 
     UploadActivity.this.finish(); 
     startActivity(i); 
     super.onBackPressed(); 
    } 

、それがうまく働いただ、私は以下のように私のメインの活動にデータをバックアップすることができます

b = getIntent().getExtras(); 
if (b != null) { 
     ImgData = b.getStringArrayList("IMAGE"); 
     for (int i = 0; i < ImgData.size(); i++) { 
      map.add(ImgData.get(i).toString()); 

     } 

    } 

今、それは私が選択したこれらの画像をアップロードする必要が...大丈夫だ、ここに私のasyncTaskがあります:

public class ImageUploadTask extends AsyncTask<String, Void, String> { 

    String sResponse = null; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     dialog = ProgressDialog.show(ImagesForAds.this, "Uploading", 
       "Please wait...", true); 
     dialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 

      String url = "myLink"; 
      int i = Integer.parseInt(params[0]); 
      Bitmap bitmap = decodeFile(map.get(i)); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(url); 
      entity = new MultipartEntity(); 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); 
      byte[] data = bos.toByteArray(); 

      //entity.addPart("user_id", new StringBody("199")); 
      //entity.addPart("club_id", new StringBody("10")); 
      entity.addPart("images", new ByteArrayBody(data, 
        "image/jpeg", params[1])); 


      Log.i(TAG, "array map: " + map.get(i)); 


      httpPost.setEntity(entity); 
      HttpResponse response = httpClient.execute(httpPost, 
        localContext); 
      sResponse = EntityUtils.getContentCharSet(response.getEntity()); 

      System.out.println("sResponse : " + sResponse); 
     } catch (Exception e) { 
      if (dialog.isShowing()) 
       dialog.dismiss(); 
      Log.e(e.getClass().getName(), e.getMessage(), e); 

     } 
     return sResponse; 
    } 

    @Override 
    protected void onPostExecute(String sResponse) { 
     try { 
      if (dialog.isShowing()) 
       dialog.dismiss(); 

      if (sResponse != null) { 
       Toast.makeText(getApplicationContext(), 
         sResponse + " Photo uploaded successfully", 
         Toast.LENGTH_SHORT).show(); 
       count++; 
       if (count < map.size()) { 
        new ImageUploadTask().execute(count + "", "hm" + count 
          + ".jpg"); 
       } 
      } 

     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(), 
        Toast.LENGTH_LONG).show(); 
      Log.e(e.getClass().getName(), e.getMessage(), e); 
     } 

    } 
} 

とここで私はそれを呼び出す方法:

int count = 0; 
new ImageUploadTask().execute(count + "", "pk" + count + ".jpg"); 

AsyncTaskの問題..アップロードしたのは1画像だけです。選択したすべての画像をアップロードするにはどうすればいいですか?

答えて

0

これはあなたの欠陥である:

 if (count < map.size()) { 
      new ImageUploadTask().execute(count + "", "hm" + count 
        + ".jpg"); 
     } 

ないImageUploadTaskの内側に新しいImageUploadTaskを作成することをお勧め。 forループをdoInBackground()内に移動し、ユーザーの使用publishProgress()を更新し、onProgressUpdate内でそのイベントをキャッチします。

はAsyncTaskについて詳しく読む:https://developer.android.com/reference/android/os/AsyncTask.html

+0

私はコードでそれを達成することができますか? – CODE1010101010101

関連する問題