私はプログラムを持っており、以下のコードを使用してクラス android.media.RemoteControlClient android.media.RemoteControlClient.MetadataEditor * * android.media.MediaMetadataRetriever をロードします
1つを除くすべてのクラスがロードされ、1行だけでエラーが発生し、他の行は正常に動作します
try{
mRemoteControlClass=Class.forName("android.media.RemoteControlClient");
//this gives the error
MetadataEditorC=Class.forName("android.media.RemoteControlClient.MetadataEditor");
MediaMetadataRetrieverC=Class.forName("android.media.MediaMetadataRetriever");
Log.e("RemoteControlClient", "Succesfully Set Metadata");
}catch(Exception e){e.printStackTrace();
Log.e("RemoteControlClient", "ERROR Set Metadata");}
これはスタックトレースです
08-17 16:17:17.621: W/System.err(1771): java.lang.ClassNotFoundException: android.media.RemoteControlClient.MetadataEditor
08-17 16:17:17.621: W/System.err(1771): at java.lang.Class.classForName(Native Method)
08-17 16:17:17.621: W/System.err(1771): at java.lang.Class.forName(Class.java:217)
08-17 16:17:17.621: W/System.err(1771): at com.SmoothApps.iSenseMusic.MyRemoteControlClient.updatemetadata(MyRemoteControlClient.java:94)
08-17 16:17:17.621: W/System.err(1771): at com.SmoothApps.iSenseMusic.iSenseMusic.setNotify(iSenseMusic.java:296)
08-17 16:17:17.621: W/System.err(1771): at com.SmoothApps.iSenseMusic.iSenseMusic.onStartCommand(iSenseMusic.java:421)
08-17 16:17:17.621: W/System.err(1771): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2656)
08-17 16:17:17.621: W/System.err(1771): at android.app.ActivityThread.access$1900(ActivityThread.java:141)
08-17 16:17:17.621: W/System.err(1771): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
08-17 16:17:17.621: W/System.err(1771): at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 16:17:17.621: W/System.err(1771): at android.os.Looper.loop(Looper.java:137)
08-17 16:17:17.621: W/System.err(1771): at android.app.ActivityThread.main(ActivityThread.java:5039)
08-17 16:17:17.621: W/System.err(1771): at java.lang.reflect.Method.invokeNative(Native Method)
08-17 16:17:17.621: W/System.err(1771): at java.lang.reflect.Method.invoke(Method.java:511)
08-17 16:17:17.621: W/System.err(1771): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-17 16:17:17.621: W/System.err(1771): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-17 16:17:17.621: W/System.err(1771): at dalvik.system.NativeStart.main(Native Method)
08-17 16:17:17.621: W/System.err(1771): Caused by: java.lang.NoClassDefFoundError: android/media/RemoteControlClient/MetadataEditor
08-17 16:17:17.621: W/System.err(1771): ... 16 more
08-17 16:17:17.621: W/System.err(1771): Caused by: java.lang.ClassNotFoundException: android.media.RemoteControlClient.MetadataEditor
08-17 16:17:17.621: W/System.err(1771): at java.lang.VMClassLoader.loadClass(Native Method)
08-17 16:17:17.621: W/System.err(1771): at java.lang.BootClassLoader.findClass(ClassLoader.java:765)
08-17 16:17:17.621: W/System.err(1771): at java.lang.BootClassLoader.loadClass(ClassLoader.java:825)
08-17 16:17:17.621: W/System.err(1771): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-17 16:17:17.621: W/System.err(1771): ... 16 more
08-17 16:17:17.621: W/System.err(1771): Caused by: java.lang.NoClassDefFoundError: [generic]
08-17 16:17:17.621: W/System.err(1771): ... 1 more
別のアプローチを試してみるとうまくいきますが、理想的なコーディングやCPUフレンドリーではありません。スーパークラスのすべてのサブクラスをロードしてから名前を確認する必要があり、以下にコーディングしたように動作します(わかりません)上記で使用した単純なプロセスが機能しない理由)
Class[] cls=mRemoteControlClass.getDeclaredClasses();
for(int i=0;i<cls.length;i++){
//Log.e("CLASS "+(i+1),cls[i].getName());
if(cls[i].getName().contains("MetadataEditor"))
MetadataEditorC=cls[i];
}
私が推測できるのは、thenclass MetaDataEditor にはクラス定義がないため、ロードできないということです。しかし、他の方法でロードできます。
クラスをロードする簡単な方法があることを願っています。私は Java クラスのロードにあまり慣れていません。助けてください。