2015-09-27 68 views
0

我想实现GmailQuickstartGMail API for Android 我使用了与网页中相同的代码,将代码复制到Eclipse。当我在我的三星设备上运行代码时,我可以选择Gmail身份证,允许身份验证。检索邮件时显示错误。实现Android的GMail API时的异步任务错误

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 [email protected] 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 [email protected] 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

我想你需要在你的外部lib文件夹中包含gson.jar。 (由Google提供)解析 – dex

+0

谢谢@dex。我将google-gson-stream-1.7.1包含在libs文件夹中。它正在工作。 – imthius

+0

欢迎您:) :) – dex

回答

1

我认为你需要在你的外部lib文件夹(由谷歌提供)来解析XML gson.jar。