2014-01-09 2 views
0

Когда бы я ни был, независимо от того, где я его вызываю, приложение вылетает с IllegalStateException: не удалось выполнить метод активности. На данный момент у меня только несколько классов, и все они находятся в одном пакете, включая класс со статическими методами, вызывающими крушение.Почему я не могу вызвать статические методы в любом приложении Android

Есть ли какая-то проблема или особое соображение, которое следует учитывать при вызове статических методов в приложении для Android?

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    ImageManager.initImageManager(this); // crash 
} 

EDIT
Извинения, ошибка на самом деле VerifyError. Кажется, что существует какой-то конфликт с Dropbox API, который я использую в одном из статических методов, но который не вызывается перед сбоем приложения. Ниже приведен вывод об ошибке после того, как я изменил ImageManager как полностью статический класс, который, я думаю, должен быть. ImageManager код следующим образом:

01-09 19:23:51.356: W/dalvikvm(32032): VFY: unable to find class referenced in signature (Lcom/dropbox/client2/DropboxAPI;) 
01-09 19:23:51.357: I/dalvikvm(32032): Could not find method com.dropbox.client2.DropboxAPI.getFile, referenced from method rfynes.moviebrowser.ImageManager.downloadImage 
01-09 19:23:51.357: W/dalvikvm(32032): VFY: unable to resolve virtual method 5140: Lcom/dropbox/client2/DropboxAPI;.getFile (Ljava/lang/String;Ljava/lang/String;Ljava/io/OutputStream;Lcom/dropbox/client2/ProgressListener;)Lcom/dropbox/client2/DropboxAPI$DropboxFileInfo; 
01-09 19:23:51.357: D/dalvikvm(32032): VFY: replacing opcode 0x6e at 0x0063 
01-09 19:23:51.358: W/dalvikvm(32032): VFY: unable to resolve exception class 735 (Lcom/dropbox/client2/exception/DropboxServerException;) 
01-09 19:23:51.358: W/dalvikvm(32032): VFY: unable to find exception handler at addr 0x8b 
01-09 19:23:51.358: W/dalvikvm(32032): VFY: rejected Lrfynes/moviebrowser/ImageManager;.downloadImage (Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Lcom/dropbox/client2/DropboxAPI;)V 
01-09 19:23:51.358: W/dalvikvm(32032): VFY: rejecting opcode 0x0d at 0x008b 
01-09 19:23:51.358: W/dalvikvm(32032): VFY: rejected Lrfynes/moviebrowser/ImageManager;.downloadImage (Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Lcom/dropbox/client2/DropboxAPI;)V 
01-09 19:23:51.358: W/dalvikvm(32032): Verifier rejected class Lrfynes/moviebrowser/ImageManager; 
01-09 19:23:51.358: D/AndroidRuntime(32032): Shutting down VM 
01-09 19:23:51.358: W/dalvikvm(32032): threadid=1: thread exiting with uncaught exception (group=0x41672898) 
01-09 19:23:51.361: E/AndroidRuntime(32032): FATAL EXCEPTION: main 
01-09 19:23:51.361: E/AndroidRuntime(32032): java.lang.VerifyError: rfynes/moviebrowser/ImageManager 
01-09 19:23:51.361: E/AndroidRuntime(32032): at rfynes.moviebrowser.MainActivity.onCreate(MainActivity.java:16) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.Activity.performCreate(Activity.java:5150) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2192) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2288) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.ActivityThread.access$600(ActivityThread.java:148) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1273) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.os.Looper.loop(Looper.java:137) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at android.app.ActivityThread.main(ActivityThread.java:5222) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at java.lang.reflect.Method.invoke(Method.java:525) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-09 19:23:51.361: E/AndroidRuntime(32032): at dalvik.system.NativeStart.main(Native Method) 

ImageManager

public class ImageManager { 

private File posterDir, backdropDir; 

public static void initImageManager(Activity activity) { 
    posterDir = activity.getDir("poster", Context.MODE_PRIVATE); 
    backdropDir = activity.getDir("backdrop", Context.MODE_PRIVATE); 
} 
    ... 
    ... 
    public static void downloadImage(String movieId, File imageDir, String imageType, DropboxAPI<AndroidAuthSession> dropbox) { 
    ... 
    ... 
+1

Опубликовать stacktrace пожалуйста, это было бы полезно. –

+2

Также вы можете включить статический метод, вызывающий проблему? – bblincoe

+0

Вы уверены, что это проблема со статическими методами вообще или с самим статическим методом? – Submersed

ответ

1

Чтобы исправить это, я на самом деле в конечном итоге нарушение downloadImage метод (и пара других) из класса ImageManager в свои собственные отдельные нестатический класс. ImageManager по-прежнему остается статическим классом, но он не вызывает никаких проблем и приложение не сбой. Таким образом, похоже, что проблема заключалась в вызове API Dropbox API, который я делал из статического контекста, но я точно не знаю, почему именно. Хотя я доволен тем, что у меня есть.

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