Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试启动新活动时应用程序崩溃_Java_Android - Fatal编程技术网

Java 尝试启动新活动时应用程序崩溃

Java 尝试启动新活动时应用程序崩溃,java,android,Java,Android,当我尝试启动Activity(gallery)时,应用程序似乎因以下错误而崩溃: 07-12 10:27:55.614: E/AndroidRuntime(12215): FATAL EXCEPTION: main 07-12 10:27:55.614: E/AndroidRuntime(12215): Process: com.map.example, PID: 12215 07-12 10:27:55.614: E/AndroidRuntime(12215): java.lang.Runti

当我尝试启动Activity(gallery)时,应用程序似乎因以下错误而崩溃:

07-12 10:27:55.614: E/AndroidRuntime(12215): FATAL EXCEPTION: main
07-12 10:27:55.614: E/AndroidRuntime(12215): Process: com.map.example, PID: 12215
07-12 10:27:55.614: E/AndroidRuntime(12215): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.map.example/com.map.example.media.Gallery}: java.lang.IllegalStateException: calling this from your main thread can lead to deadlock
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2394)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2452)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread.access$900(ActivityThread.java:172)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1302)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.os.Handler.dispatchMessage(Handler.java:102)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.os.Looper.loop(Looper.java:136)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread.main(ActivityThread.java:5586)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at java.lang.reflect.Method.invokeNative(Native Method)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at java.lang.reflect.Method.invoke(Method.java:515)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at dalvik.system.NativeStart.main(Native Method)
07-12 10:27:55.614: E/AndroidRuntime(12215): Caused by: java.lang.IllegalStateException: calling this from your main thread can lead to deadlock
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.accounts.AccountManager.ensureNotOnMainThread(AccountManager.java:1423)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.accounts.AccountManager.access$200(AccountManager.java:145)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.accounts.AccountManager$Future2Task.internalGetResult(AccountManager.java:1673)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.accounts.AccountManager$Future2Task.getResult(AccountManager.java:1710)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at com.map.example.picasa.PicasaApi.getAccounts(PicasaApi.java:66)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at com.map.example.media.PicasaDataSource.getAccountStatus(PicasaDataSource.java:39)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at com.map.example.media.Gallery.onCreate(Gallery.java:168)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.Activity.performCreate(Activity.java:5451)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
07-12 10:27:55.614: E/AndroidRuntime(12215):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2358)
07-12 10:27:55.614: E/AndroidRuntime(12215):    ... 11 more
我不知道如何解决这个问题,我已经尝试了一些建议的解决方案,但没有运气。我希望有人能帮我这个忙,好吗

下面是
picasapi.java:66

public static final class AuthAccount {
    public final String user;
    public final String authToken;
    public final Account account;

    public AuthAccount(String user, String authToken, Account account) {
        this.user = user;
        this.authToken = authToken;
        this.account = account;
    }
}

public static Account[] getAccounts(Context context) {
    // Return the list of accounts supporting the Picasa GData service.
    AccountManager accountManager = AccountManager.get(context);
    Account[] accounts = {};
    try {
        accounts = accountManager.getAccountsByTypeAndFeatures(PicasaService.ACCOUNT_TYPE,
                new String[] { PicasaService.FEATURE_SERVICE_NAME }, null, null).getResult();
    } catch (OperationCanceledException e) {
    } catch (AuthenticatorException e) {
    } catch (IOException e) {
    }
    return accounts;
}
第66行位于
新字符串[]{PicasaService.FEATURE_SERVICE_NAME},null,null)

然后对于
PicasaDataSource.java:39

public static final HashMap<String, Boolean> getAccountStatus(final Context context) {
    final Account[] accounts = PicasaApi.getAccounts(context);
    int numAccounts = accounts.length;
    HashMap<String, Boolean> accountsEnabled = new HashMap<String, Boolean>(numAccounts);
    for (int i = 0; i < numAccounts; ++i) {
        Account account = accounts[i];
        boolean isEnabled = ContentResolver.getSyncAutomatically(account, PicasaContentProvider.AUTHORITY);
        String username = account.name.toLowerCase();
        if (username.contains("@gmail.") || username.contains("@googlemail.")) {
            // Strip the domain from GMail accounts for canonicalization.
            // TODO: is there an official way?
            username = username.substring(0, username.indexOf('@'));
        }
        accountsEnabled.put(username, new Boolean(isEnabled));
    }
    return accountsEnabled;
}
其中第168行为:
mAccountsEnabled=PicasaDataSource.getAccountStatus(此)

通过像这样分解,我认为这与帐户有关

有人能帮忙吗(被困在这里快两天了!)


谢谢

您试图执行一些阻止UI线程的工作。您需要在后台线程中运行此代码。请尝试此代码

YourActivity.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
       mAccountsEnabled = PicasaDataSource.getAccountStatus(this);
    }
});
试试这个:

new Thread(new Runnable() {
        @Override
        public void run() {
            mAccountsEnabled = PicasaDataSource.getAccountStatus(YourActivity.this);
        }
    }).start();

谢谢,但这是我现在得到的
类型picasadasource中的getAccountStatus(Context)方法不适用于(this)的参数(new Runnable(){})
;它可能将Runnable作为参数读取,而不是像您希望的那样读取库,因此出现了错误。Do YourActivity.this或参数希望接收的任何内容。@AlexandreG“Do YourActivity.this或参数希望接收的任何内容”是什么意思?@wemapps它希望接收一个上下文,所以您可能需要执行mAccountsEnabled=picasadasource.getAccountStatus(Gallery.this);(如果您还没有)-这就是我要做的mean@AlexandreG哦,好的,我明白了!谢谢,一切都好了!
new Thread(new Runnable() {
        @Override
        public void run() {
            mAccountsEnabled = PicasaDataSource.getAccountStatus(YourActivity.this);
        }
    }).start();