마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sdcard에 있는 이미지파일의 exif정보 받아오려고 하는데 계속 null이 떠요...

0 추천

sdcard에 있는 모든 이미지 파일을 그리드뷰에 띄우고 이미지파일의 날짜 정보를 받아오려고 하는데 계속 null이 뜨네요.. 도와주세요..

코드 입니다.

 

-------------------MainActivity.java------------------------------------------------------------------------

public class MainActivity extends AppCompatActivity {

    GridView gridview;
    public ArrayList<String> LocationArray = new ArrayList<String>();
    CustomGridViewAdapter customGridViewAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LocationArray.clear();
        getFiles();

        // 리스트뷰 객체 생성 & 어댑터 설정
        gridview = (GridView) findViewById(R.id.GridView);
        customGridViewAdapter = new CustomGridViewAdapter(this, R.layout.row_grid, LocationArray);
        gridview.setAdapter(customGridViewAdapter);
    }

    /*
     * 이미지를 담고 있는 폴더 추출
     *
     * @param file
     * @return
     */

    @SuppressWarnings("deprecation")
    private void getFiles() {

        Cursor cursor;

        cursor = getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

        String filename = Environment.getExternalStorageDirectory().getPath();

        if (cursor != null && cursor.moveToLast()) {
            do {
                try {
                    ExifInterface exif = new ExifInterface(filename);
                    String strlatitude = getTagString(ExifInterface.TAG_DATETIME, exif);

                    String myAttribute = strlatitude;

                    if (exif != null)
                        LocationArray.add(myAttribute);

                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(this, "Error!", Toast.LENGTH_LONG).show();
                }

            } while (cursor.moveToPrevious());
        }
    }

    private String getTagString(String tag, ExifInterface exif) {
        return (tag + " : " + exif.getAttribute(tag) + "\n");
    }

}

-------------------CustomGridViewAdapter.java--------------------------------------------------------------------

public class CustomGridViewAdapter extends ArrayAdapter<String> {

    Context context;
    int layoutResourceId;
    ArrayList<String> data = new ArrayList<String>();

    public CustomGridViewAdapter(Context context, int layoutResourceId, ArrayList<String> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        RecordHolder holder = null;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new RecordHolder();
            holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
            holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
            row.setTag(holder);
        } else {
            holder = (RecordHolder) row.getTag();
        }

        String item = data.get(position);
        holder.txtTitle.setText(item);
        //holder.imageItem.(item.getImage());
        return row;

    }

    static class RecordHolder {
        TextView txtTitle;
        ImageView imageItem;
    }
}

 

-------------------activity_main.xml------------------------------------------------------------------------
 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <GridView
        android:id="@+id/GridView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="10dp"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:columnWidth="60dp"
        android:stretchMode="columnWidth"
        android:gravity="center"
        />

</RelativeLayout>

 

-------------------row_grid.xml--------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/white_folder" />

    <TextView
        android:id="@+id/item_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="TextView" />

</LinearLayout>

 

닭긔우물 (120 포인트) 님이 2015년 12월 23일 질문

1개의 답변

0 추천
대충 봐서 잘 모르겠지만, 이미지 파일이라고 해서 EXIF 정보를 다 갖고 있는 게 아닙니다.

jpg파일 중에서 EXIF을 갖고 있는 파일들이 있는거지요.

무조건 EXIF 추출이 아니라 없는 경우에 대한 예외처리를 하셔야 할 것 같습니다.
cc1232 (35,280 포인트) 님이 2015년 12월 23일 답변
...