Java 尝试启动新活动时应用程序崩溃
当我尝试启动Activity(gallery)时,应用程序似乎因以下错误而崩溃: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
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();