簡體   English   中英

為什么我無法在Android應用中的任何地方調用靜態方法

[英]Why can't I call static methods anywhere in my Android app

無論何時,無論從何處調用它,應用程序都會崩潰,並拋出IllegalStateException:無法執行activity的方法 目前,我只有幾個類,它們都在同一個包中,包括帶有導致崩潰的靜態方法的類。

在Android應用中調用靜態方法時,是否應考慮某些問題或特殊考慮?

public class MainActivity extends Activity {

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

編輯
抱歉,該錯誤實際上是一個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) {
    ...
    ...

為了解決這個問題,我實際上最終將imageManager類中的downloadImage方法(以及其他幾個方法)分解為它們自己單獨的非靜態類。 ImageManager現在仍然是靜態類,但是它不會引起任何問題,並且應用程序也不會崩潰。 因此,問題似乎出在我從靜態上下文進行的Dropbox API調用上,但是我不知道為什么。 不過,我對自己現在所擁有的感到很滿意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM