1

コード 1を使用する

Utility.DetailsInfo myInfo=new Utility.DetailsInfo()とエラーが発生するのはなぜですか?

No enclosing instance of type Utility is accessible. Must qualify the allocation with an enclosing instance of type Utility
(egxnew A() x は Utility のインスタンス)。

コード 2
Can I make an instance of inner static class?を使用する必要があります。
ありがとう!

コード 1

public class Utility {

    class DetailsInfo {
        String title;
        String path;
        String size;
        Bitmap thumbnails;
    }

    public static void GetPhotoDetailsByID(Context mycontext,String id,DetailsInfo myInfo ){
             Cursor cur = mycontext.getContentResolver().query(
                     MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                     null,
                     MediaStore.Images.Media._ID+"=?", 
                     new String[]{id},
                     "" );
             if (cur.moveToFirst()){
                 myInfo.title= cur.getString(cur.getColumnIndex(MediaStore.Images.Media.TITLE));
                 myInfo.path = cur.getString(cur.getColumnIndex(MediaStore.Images.Media.DATA));
                 myInfo.size=cur.getString(cur.getColumnIndex(MediaStore.Images.Media.SIZE));

                 myInfo.thumbnails = MediaStore.Images.Thumbnails.getThumbnail(
                                   mycontext.getContentResolver(), 
                                   Integer.parseInt(id),
                                   MediaStore.Images.Thumbnails.MICRO_KIND, 
                                   null);

             }
             cur.close();
        }       
}

コード 2

public class Utility {    
    public static class DetailsInfo {
        String title;
        String path;
        String size;
        Bitmap thumbnails;
    }

    public static void GetPhotoDetailsByID(Context mycontext,String id,DetailsInfo myInfo ){
             Cursor cur = mycontext.getContentResolver().query(
                     MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                     null,
                     MediaStore.Images.Media._ID+"=?", 
                     new String[]{id},
                     "" );
             if (cur.moveToFirst()){
                 myInfo.title= cur.getString(cur.getColumnIndex(MediaStore.Images.Media.TITLE));
                 myInfo.path = cur.getString(cur.getColumnIndex(MediaStore.Images.Media.DATA));
                 myInfo.size=cur.getString(cur.getColumnIndex(MediaStore.Images.Media.SIZE));

                 myInfo.thumbnails = MediaStore.Images.Thumbnails.getThumbnail(
                                   mycontext.getContentResolver(), 
                                   Integer.parseInt(id),
                                   MediaStore.Images.Thumbnails.MICRO_KIND, 
                                   null);

             }
             cur.close();
        }       
}
4

3 に答える 3

1

これがあなたを助けますように..

親クラスのオブジェクトで内部クラスを呼び出す必要があるため、この行はエラーを引き起こします..

Utility.DetailsInfo myInfo=new Utility.DetailsInfo();

子クラスは、静的でない場合にのみ、その親クラス オブジェクトで参照できます。

お気に入り:

Utility utility = new Utility();
Utility.DetailsInfo myInfo= new utility.DetailsInfo(); 

はい、静的と宣言されているため、内部クラスのインスタンスを直接静的にすることができます..

于 2013-07-25T06:01:44.213 に答える
0

コード 1 では、Utility.DetailsInfoは静的ではないため、インスタンス化せずに使用することはできません。したがって、最初に のオブジェクトをインスタンス化してからUtility、その内部クラスにアクセスしてみてくださいDetailsInfo

Utility utility = new Utility();
Utility.DetailsInfo myInfo= utility.new DetailsInfo();

ただし、コード 2 では、DetailsInfo静的クラスとして定義されているため、直接インスタンス化できます。

Utility.DetailsInfo myInfo = new Utility.DetailsInfo();

理想的には、外部クラスにのみ役立つ場合にのみ、クラスを別のクラスに埋め込むことが論理的です。そのような場合、「ヘルパー クラス」をネストすると、パッケージがより合理化されるか、回避しようとします。

于 2013-07-25T06:57:07.550 に答える