我正在尝试从GMail API for Android 实施 GmailQuickstart 我使用了与网页相同的代码,将代码复制到Eclipse。当我在我的三星设备上运行代码时,我可以选择gmail id,允许身份验证。检索邮件时显示错误。
09-27 16:06:32.979: E/AndroidRuntime(26644): FATAL EXCEPTION: AsyncTask #1
09-27 16:06:32.979: E/AndroidRuntime(26644): java.lang.RuntimeException: An error occured while executing doInBackground()
09-27 16:06:32.979: E/AndroidRuntime(26644): at android.os.AsyncTask$3.done(AsyncTask.java:299)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-27 16:06:32.979: E/AndroidRuntime(26644): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.lang.Thread.run(Thread.java:856)
09-27 16:06:32.979: E/AndroidRuntime(26644): Caused by: java.lang.NoClassDefFoundError: com.google.gson.stream.JsonReader
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.json.gson.GsonFactory.createJsonParser(GsonFactory.java:86)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.json.gson.GsonFactory.createJsonParser(GsonFactory.java:76)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.example.gmailquickstart.ApiAsyncTask.getDataFromApi(ApiAsyncTask.java:67)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.example.gmailquickstart.ApiAsyncTask.doInBackground(ApiAsyncTask.java:36)
09-27 16:06:32.979: E/AndroidRuntime(26644): at com.example.gmailquickstart.ApiAsyncTask.doInBackground(ApiAsyncTask.java:1)
09-27 16:06:32.979: E/AndroidRuntime(26644): at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-27 16:06:32.979: E/AndroidRuntime(26644): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-27 16:06:32.979: E/AndroidRuntime(26644): ... 5 more
09-27 16:06:50.069: I/Choreographer(26644): Skipped 1019 frames! The application may be doing too much work on its main thread.
09-27 16:06:50.919: E/WindowManager(26644): Activity com.example.gmailquickstart.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@419cb7f0 that was originally added here
09-27 16:06:50.919: E/WindowManager(26644): android.view.WindowLeaked: Activity com.example.gmailquickstart.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@419cb7f0 that was originally added here
09-27 16:06:50.919: E/WindowManager(26644): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:419)
09-27 16:06:50.919: E/WindowManager(26644): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:322)
09-27 16:06:50.919: E/WindowManager(26644): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:234)
09-27 16:06:50.919: E/WindowManager(26644): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153)
09-27 16:06:50.919: E/WindowManager(26644): at android.view.Window$LocalWindowManager.addView(Window.java:557)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.Dialog.show(Dialog.java:277)
09-27 16:06:50.919: E/WindowManager(26644): at com.example.gmailquickstart.MainActivity.refreshResults(MainActivity.java:179)
09-27 16:06:50.919: E/WindowManager(26644): at com.example.gmailquickstart.MainActivity.onResume(MainActivity.java:115)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1199)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.Activity.performResume(Activity.java:5277)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2633)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2671)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2144)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread.access$700(ActivityThread.java:143)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
09-27 16:06:50.919: E/WindowManager(26644): at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 16:06:50.919: E/WindowManager(26644): at android.os.Looper.loop(Looper.java:137)
09-27 16:06:50.919: E/WindowManager(26644): at android.app.ActivityThread.main(ActivityThread.java:4960)
09-27 16:06:50.919: E/WindowManager(26644): at java.lang.reflect.Method.invokeNative(Native Method)
09-27 16:06:50.919: E/WindowManager(26644): at java.lang.reflect.Method.invoke(Method.java:511)
09-27 16:06:50.919: E/WindowManager(26644): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
09-27 16:06:50.919: E/WindowManager(26644): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
09-27 16:06:50.919: E/WindowManager(26644): at dalvik.system.NativeStart.main(Native Method)
ApiAsyncTask.java
package com.example.gmailquickstart;
import android.os.AsyncTask;
import com.google.api.client.googleapis.extensions.android.gms.auth.GooglePlayServicesAvailabilityIOException;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.services.gmail.model.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* An asynchronous task that handles the Gmail API call.
* Placing the API calls in their own task ensures the UI stays responsive.
*/
public class ApiAsyncTask extends AsyncTask<Void, Void, Void> {
private MainActivity mActivity;
/**
* Constructor.
* @param activity MainActivity that spawned this task.
*/
ApiAsyncTask(MainActivity activity) {
this.mActivity = activity;
}
/**
* Background task to call Gmail API.
* @param params no parameters needed for this task.
*/
@Override
protected Void doInBackground(Void... params) {
try {
mActivity.clearResultsText();
mActivity.updateResultsText(getDataFromApi());
} catch (final GooglePlayServicesAvailabilityIOException availabilityException) {
mActivity.showGooglePlayServicesAvailabilityErrorDialog(
availabilityException.getConnectionStatusCode());
} catch (UserRecoverableAuthIOException userRecoverableException) {
mActivity.startActivityForResult(
userRecoverableException.getIntent(),
MainActivity.REQUEST_AUTHORIZATION);
} catch (Exception e) {
mActivity.updateStatus("The following error occurred:\n" +
e.getMessage());
}
if (mActivity.mProgress.isShowing()) {
mActivity.mProgress.dismiss();
}
return null;
}
/**
* Fetch a list of Gmail labels attached to the specified account.
* @return List of Strings labels.
* @throws IOException
*/
private List<String> getDataFromApi() throws IOException {
// Get the labels in the user's account.
String user = "me";
List<String> labels = new ArrayList<String>();
ListLabelsResponse listResponse =
mActivity.mService.users().labels().list(user).execute();
for (Label label : listResponse.getLabels()) {
labels.add(label.getName());
}
return labels;
}
}
答案 0 :(得分:1)
我认为您需要在外部lib文件夹(由Google提供)中包含gson.jar来解析xml。