2014-02-12 4 views
0
public class CaptureImage extends Activity { 

private static final String TAG = "CaptureImage.java"; 

public static ArrayList<HashMap<String, String>> outlets = outlets = new ArrayList<HashMap<String, String>>(); 
final static int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 1; 

int serverResponseCode = 0; 
static String uploadFilePath = " "; 
static String Path; 
static int delete_image_id = 0; 
TextView shift_display; 
Uri imageUri = null; 
static TextView imageDetails = null; 

public static ImageView showImg = null; 

CaptureImage CameraActivity = null; 
Upload upload; 
ProgressDialog dialog_upload = null; 

// FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(CaptureImage.this); 
static Cursor cursor = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_capture_image); 
    CameraActivity = this; 
    showImg = (ImageView) findViewById(R.id.showImg); 
    upload = new Upload(CaptureImage.this); 
    final Button photo = (Button) findViewById(R.id.photo); 
    final Button upload = (Button) findViewById(R.id.upload); 
    final Button selet_outlet = (Button) findViewById(R.id.outlet_names); 
    photo.setOnClickListener(oclBtnOk); 
    upload.setOnClickListener(oclBtnOk3); 
    selet_outlet.setOnClickListener(oclBtnOk4); 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if (imageUri != null) { 
     outState.putString("cameraImageUri", imageUri.toString()); 
    } 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if (savedInstanceState.containsKey("cameraImageUri")) { 
     imageUri = Uri 
       .parse(savedInstanceState.getString("cameraImageUri")); 
    } 
} 

OnClickListener oclBtnOk = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.i("VALUES", "It is Working"); 
     String fileName = "Camera_Example.jpg"; 
     ContentValues values = new ContentValues(); 
     values.put(MediaStore.Images.Media.TITLE, fileName); 
     values.put(MediaStore.Images.Media.DESCRIPTION, 
       "Image capture by camera"); 

     imageUri = getContentResolver().insert(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 

     intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

     startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

     /*************************** Camera Intent End ************************/ 

    } 
}; 

OnClickListener oclBtnOk3 = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (showImg.getDrawable() == null) { 
      Toast.makeText(CaptureImage.this, " Picture was not captured ", 
        Toast.LENGTH_SHORT).show(); 
     } 

     else { 
      upload_prescription(); 
     } 

    } 
}; 

OnClickListener oclBtnOk4 = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (showImg.getDrawable() == null) { 
      Toast.makeText(CaptureImage.this, " Picture was not captured ", 
        Toast.LENGTH_SHORT).show(); 

     } 

     else { 

      // Intent intent = new Intent(CaptureImage.this, 
      // Chanel_Display.class); 
      // startActivity(intent); 

     } 

    } 

}; 

public void upload_prescription() { 
    dialog_upload = ProgressDialog.show(CaptureImage.this, "", 
      "Uploading file...", true); 
    new Thread(new Runnable() { 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 

       } 
      }); 

      createDirectoryIfNeeded(); 
      copy(); 

      deleteImageFromGallery(delete_image_id + ""); 
      upload.uploadFile(uploadFilePath); 

     } 
    }).start(); 

} 

public void deleteImageFromGallery(String captureimageid) { 

    Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    cursor = null; 

    getContentResolver().delete(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      BaseColumns._ID + "=?", new String[] { captureimageid }); 

    String[] projection = { MediaStore.Images.ImageColumns.SIZE, 
      MediaStore.Images.ImageColumns.DISPLAY_NAME, 
      MediaStore.Images.ImageColumns.DATA, BaseColumns._ID, }; 

    Log.i("InfoLog", "on activityresult Uri u " + u.toString()); 

    try { 
     if (u != null) { 
      cursor = CaptureImage.this.getContentResolver().query(imageUri, 
        projection, null, null, null); 
     } 
     if ((cursor != null) && (cursor.moveToLast())) { 

      int i = getContentResolver().delete(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
        BaseColumns._ID + "=" + cursor.getString(3), null); 
      Log.v(TAG, "Number of column deleted : " + i); 
     } 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 

public void copy() { 

    String sdCard = Environment.getExternalStorageDirectory().toString(); 
    uploadFilePath = sdCard + "/Capturetemp/" + getDate() + "_" + "AI" 
      + ".jpg"; 

    File sourceLocation = new File(Path); 
    File targetLocation = new File(uploadFilePath); 
    Log.v(TAG, "sourceLocation: " + sourceLocation); 
    Log.v(TAG, "targetLocation: " + targetLocation); 

    try { 

     // 1 = move the file, 2 = copy the file 
     int actionChoice = 2; 

     // moving the file to another directory 
     if (actionChoice == 1) { 

      if (sourceLocation.renameTo(targetLocation)) { 
       Log.v(TAG, "Move file successful."); 
      } else { 
       Log.v(TAG, "Move file failed."); 
      } 

     } 

     // we will copy the file 
     else { 

      // make sure the target file exists 

      if (sourceLocation.exists()) { 

       InputStream in = new FileInputStream(sourceLocation); 
       OutputStream out = new FileOutputStream(targetLocation); 

       // Copy the bits from instream to outstream 
       byte[] buf = new byte[1024]; 
       int len; 

       while ((len = in.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       } 

       in.close(); 
       out.close(); 

       Log.v(TAG, "Copy file successful."); 

      } else { 
       Log.v(TAG, "Copy file failed. Source file missing."); 
      } 

     } 

    } catch (NullPointerException e) { 
     // e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

@SuppressLint("SimpleDateFormat") 
public String getDate() { 

    Calendar c = Calendar.getInstance(); 
    SimpleDateFormat df1 = new SimpleDateFormat("dd-MM-yyyy"); 
    String formattedDate1 = df1.format(c.getTime()); 

    return formattedDate1; 

} 

private void createDirectoryIfNeeded() { 
    File direct = new File(Environment.getExternalStorageDirectory() 
      + "/Capturetemp"); 

    if (!direct.exists()) { 
     if (direct.mkdir()) { 
      // directory is created; 
     } 

    } 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 

     if (resultCode == RESULT_OK) { 

      /*********** Load Captured Image And Data Start ***************/ 

      String imageId = convertImageUriToFile(imageUri, CameraActivity); 

      // Create and excecute AsyncTask to load capture image 

      new LoadImagesFromSDCard(CaptureImage.this).execute("" 
        + imageId); 

      /*********** Load Captured Image And Data End ****************/ 

     } else if (resultCode == RESULT_CANCELED) { 

      Toast.makeText(this, " Picture was not taken ", 
        Toast.LENGTH_SHORT).show(); 

     } else { 

      Toast.makeText(this, " Picture was not taken ", 
        Toast.LENGTH_SHORT).show(); 

     } 
    } 

} 

/************ Convert Image Uri path to physical path **************/ 

public static String convertImageUriToFile(Uri imageUri, Activity activity) { 

    int imageID = 0; 

    try { 

     /*********** Which columns values want to get *******/ 
     String[] proj = { MediaStore.Images.Media.DATA, 
       MediaStore.Images.Media._ID, 
       MediaStore.Images.Thumbnails._ID, 
       MediaStore.Images.ImageColumns.ORIENTATION }; 

     cursor = activity.getContentResolver().query(imageUri, proj, null, 
       null, null); 

     // Get Query Data 

     int columnIndex = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media._ID); 
     int file_ColumnIndex = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 

     // int orientation_ColumnIndex = cursor. 
     // getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION); 

     int size = cursor.getCount(); 

     /******* If size is 0, there are no images on the SD Card. *****/ 

     if (size == 0) { 

      // imageDetails.setText("No Image"); 
     } else { 

      if (cursor.moveToFirst()) { 

       imageID = cursor.getInt(columnIndex); 
       delete_image_id = imageID; 

       Path = cursor.getString(file_ColumnIndex); 

      } 

     } 

    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 

    // Return Captured Image ImageID (By this ImageID Image will load from 
    // sdcard) 

    return "" + imageID; 
} 

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

    private ProgressDialog Dialog; 
    CaptureImage context; 

    Bitmap mBitmap; 

    public LoadImagesFromSDCard(CaptureImage context) { 
     this.context = context; 

    } 

    @Override 
    protected void onPreExecute() { 
     Dialog = new ProgressDialog(context); 
     Dialog.show(); 

    } 

    // Call after onPreExecute method 
    @Override 
    protected Void doInBackground(String... urls) { 

     Bitmap bitmap = null; 
     Bitmap newBitmap = null; 
     Uri uri = null; 

     try { 

      uri = Uri.withAppendedPath(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" 
          + urls[0]); 

      /************** Decode an input stream into a bitmap. *********/ 
      bitmap = BitmapFactory.decodeStream(getContentResolver() 
        .openInputStream(uri)); 

      if (bitmap != null) { 

       /********* Creates a new bitmap, scaled from an existing bitmap. ***********/ 

       newBitmap = Bitmap.createScaledBitmap(bitmap, 350, 350, 
         true); 
       // SaveIamge(newBitmap); 
       bitmap.recycle(); 
       if (newBitmap != null) { 

        mBitmap = newBitmap; 
       } 
      } 
     } catch (IOException e) { 
      // Error fetching image, try to recover 

      /********* Cancel execution of this task. **********/ 
      cancel(true); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void unused) { 

     if (mBitmap != null) { 
      context.showImg.setImageBitmap(mBitmap); 
     Dialog.dismiss(); 
     } 

     if (Dialog.isShowing()) { 


     } 

    } 

} 

}Выдает ошибку утечки окна, когда изображение загружается

Я попытался выше дисплей коды на изображение извлечения из SD-карты работает fine.But при загрузке изображений на экран, то она возвращает следующее сообщение об ошибке . Здесь я использовал диалог выполнения для отображения во время загрузки изображения.

le.androidchathunservice.CaptureImage has leaked window [email protected] that was originally added here 


     02-12 13:15:24.093: E/WindowManager(12019): android.view.WindowLeaked: Activity com.example.androidchathunservice.CaptureImage has leaked window [email protected] that was originally added here 

     02-12 13:15:24.093: E/WindowManager(12019):  at android.app.Dialog.show(Dialog.java:277) 
     02-12 13:15:24.093: E/WindowManager(12019):  at com.example.androidchathunservice.CaptureImage$LoadImagesFromSDCard.onPreExecute(CaptureImage.java:418) 
+0

что ** CaptureImage ** ??? – Piyush

+0

Я загружаю весь код – user2771059

ответ

1

вы должны изменить этот ...

CaptureImage context; 

в

Context context; 

также

public LoadImagesFromSDCard(CaptureImage context) { 
    this.context = context; 

} 

до

public LoadImagesFromSDCard(Context context) { 
    this.context = context; 

} 

EDIT:

@Override 
    protected void onPostExecute(Void unused) { 
    super.onPostExecute(); 

    if (Dialog.isShowing()&& Dialog!=null) { 

     Dialog.dismiss(); 
     Dialog = null; 
    } 

    if (mBitmap != null) { 
     context.showImg.setImageBitmap(mBitmap); 

    } 
} 
+0

Проверить обновленный ответ. – Piyush

+0

он работает в первый раз отлично. Когда во второй раз я запечатлел изображение и загрузил его работу dosenot – user2771059

+0

context.showImg.setImageBitmap (mBitmap); не работает вместо этого эта работа showImg.setImageBitmap (mBitmap); – user2771059

0

Может быть, возможно, что ваша CaptureImage деятельность, на которую вы создали диалог уже закончена к тому времени, вы попали onPostExecute(). Если это так, то попытка закрыть диалоговое окно, несомненно, просочиться в окно

+0

может убрать ответ – user2771059

Смежные вопросы