2017-10-07 5 views
1

나는 이미지를 필드 중 하나로 입력 할 수있는 데이터베이스를 가지고 있습니다. 이미지가 전화기에 저장되고 URI가 데이터베이스에 저장됩니다.SQL 데이터베이스 커서의 열이 비어 있는지 어떻게 확인합니까?

사용자가 항목에 대한 이미지를 넣지 않기로 결정하는 경우 문제가 있습니다.

"if"조건이 커서의 이미지 열이 null인지 확인하는 if/else 문을 쓰려고합니다. if 조건에 무엇을 입력해야하는지 알 수 없습니다.

다음은 내가 작업중인 코드 비트입니다. 기본적으로 커서의 COLUMN_WINE_IMAGE가 null 인 경우 토스트를 만들도록하고 싶습니다. null가 아닌 경우 이미지를 설정하십시오. 이 대신

if (Uri.parse(cursor.getString(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE))).equals(null)){ 

//This returns error: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jeremy.sqlwine/com.example.jeremy.sqlwine.DetailsActivity}: java.lang.NullPointerException: uriString 

답변

1

하는 검색 여기

//This section turns the database's image URI stored in this cursor into a bitmap, and then sets the ImageView. 
    Bitmap bitmap = null; 
    try { 
     if (............){ 
      Toast.makeText(this, "No image was taken for this item. (TOAST IS JUST TESTING PURPOSES)", Toast.LENGTH_SHORT).show(); 
     }else{ 
      bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(cursor.getString(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE)))); 
      mFullImage.setImageBitmap(bitmap); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

내가 성공하지 시도한 것 중 하나의 예입니다 분리 된 메소드의 렬 치 그런 다음 사용하기 전에 반환 값을 확인하십시오. 이 같은

시도 뭔가 :

private String checkDatabaseValue(Cursor cursor){ 
    String result = null; 
    try{ 
     //This can throw an error if the column is not found 
     int index = cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE); 
     result = cursor.getString(index).trim(); 
    } 
    catch(Exception ex){ 
     // determine what threw the error and handle appropriately 
     Log.e(TAG, ex.getMessage()); 
    } 
    return result; 
} 

그런 다음 여기 사용

Bitmap bitmap = null; 
    try { 
     // I'm assuming you have the cursor from somewhere!! 
     String imageFile = checkDatabaseValue(cursor); 
     if (imageFile == null){ 
      Toast.makeText(this, "No image was taken for this item. (TOAST IS JUST TESTING PURPOSES)", Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     if(!imageFile.isEmpty()){ 
      bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(imageFile)); 
      mFullImage.setImageBitmap(bitmap); 
     else{ 
      Toast.makeText(this, "Empty String. (TOAST IS JUST TESTING PURPOSES)", Toast.LENGTH_SHORT).show(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

으로 업데이트되었습니다. 고마워. 나는 그런 식으로 생각하는 것을 너무 좋아하지 않습니다. 나는 그것을 향상시킬 수 있기를 바랍니다. 그런 방법을 제공해 주셔서 감사합니다. 이제 나는 이런 프로젝트에 대해 어떻게 생각해야하는지에 대한 좋은 본보기를 가지고 있습니다. – andrdoiddev

+0

당신은 여전히 ​​배우면서 (그리고 우리 모두는 아니지만 실제로) 다음과 같은 복합 구문을 사용하지 않도록 노력하십시오 ::'Uri.parse (cursor.getColumnIndexOrThrow (WineContract.WineEntry.COLUMN_WINE_IMAGE))) :: 무엇이 잘못되었는지, 왜 잘못되었는지, 왜 잘못되었는지 알기가 어렵습니다. 당신이 각 가치를 확인할 수 있도록 모든 것을 무너 뜨려 라. – Barns

0

사용 :

if(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE) == null) 

갱신 :

cursor.isNull(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE)) 
+0

이 생각의 문제는 바로, 그 인덱스의 정수를 얻을 수 있다는 것입니다? 내가 틀렸다면. 어느 쪽이든, 내가 그렇게하면 빨간색 밑줄이 표시됩니다. Operator "=="는 'int', 'null'에 적용 할 수 없습니다. – andrdoiddev

+0

@andrdoiddev 대답이 – Hooman