2013-09-05 2 views
-2

Я новичок в scala. Я пытаюсь импортировать контакты из gmail в мое приложение. Я могу создать пример приложения в java, используя Eclipse, по ссылке https://developers.google.com/google-apps/contacts/v2/developers_guide_java?csw=1#retrieving_without_query Я могу импортировать контакты в My java application.And. Он отлично работает. Мой код java:Можем ли мы использовать плагин Google data в scala?

import com.google.gdata.client.contacts.ContactsService; 
import com.google.gdata.data.contacts.ContactEntry; 
import com.google.gdata.data.contacts.ContactFeed; 
import com.google.gdata.model.gd.Email; 
import com.google.gdata.util.AuthenticationException; 
import com.google.gdata.util.ServiceException; 

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.List; 

/** 
* This is a test template 
*/ 

    public class Contacts { 

    public static void main(String[] args) { 

     try { 

     // Create a new Contacts service 
      System.out.println("hiiii"+args[0]); 
     ContactsService myService = new ContactsService("My Application"); 
     myService.setUserCredentials(args[0],args[1]); 

     // Get a list of all entries 
     URL metafeedUrl = new URL("http://www.google.com/m8/feeds/contacts/"+args[0]+"@gmail.com/base"); 
     System.out.println("Getting Contacts entries...\n"); 
     ContactFeed resultFeed = myService.getFeed(metafeedUrl, ContactFeed.class); 
     List<ContactEntry> entries = resultFeed.getEntries(); 
     for(int i=0; i<entries.size(); i++) { 
      ContactEntry entry = entries.get(i); 
      System.out.println("\t" + entry.getTitle().getPlainText()); 
      System.out.println("\t" + entry.getEmailAddresses()); 
      for(com.google.gdata.data.extensions.Email emi:entry.getEmailAddresses()) 
       System.out.println(emi.getAddress());  
     } 
     System.out.println("\nTotal Entries: "+entries.size()); 
     } 
     catch(AuthenticationException e) { 
     e.printStackTrace(); 
     System.out.println("Authentication failed"); 
     } 
     catch(MalformedURLException e) { 
     e.printStackTrace(); 
     System.out.println("url"); 
     } 
     catch(ServiceException e) { 
     e.printStackTrace(); 
     System.out.println("Service exc"); 
     } 
     catch(IOException e) { 
     e.printStackTrace(); 
     System.out.println("IO exception"); 
     } 
    } 
    } 

Я попытался использовать те же функции библиотеки для Моей Скалы, но это не сработает. Мой код Scala:

import com.google.gdata.client.contacts.ContactsService 
import com.google.gdata.data.contacts.ContactEntry 
import com.google.gdata.data.contacts.ContactFeed 
import com.google.gdata.util.ServiceException 
import com.google.gdata.util.AuthenticationException 
import java.io.IOException 
import java.net.URL 
import java.net.MalformedURLException 

object Contacts { 
    class Test 
    { 
    def main(args:Array[String]) 
    { 
     println("hiii") 
     try { 

     // Create a new Contacts service 

     //ContactsService myService = new ContactsService("My Application"); 
     //myService.setUserCredentials(args[0],args[1]); 
     val myService= new ContactsService("My App") 
     myService.setUserCredentials("MyemailId","password") 
     val metafeedUrl = new URL("http://www.google.com/m8/feeds/contacts/"+"MyemailId"+"@gmail.com/base") 
     val resultFeed = myService.getFeed(metafeedUrl, classOf[ContactFeed]) 
     //List<ContactEntry> entries = resultFeed.getEntries(); 
       val entries = resultFeed.getEntries(); 

       for(i <-0 to entries.size()) 
       { 
       var entry=entries.get(i) 
       println(entry.getTitle().getPlainText()) 
       } 
     } 
     catch{ 
     case e:AuthenticationException=>{ 
      e.printStackTrace(); 
      } 
     case e:MalformedURLException=>{ 
      e.printStackTrace(); 
      } 
      case e:ServiceException=>{ 
      e.printStackTrace(); 
      } 
      case e:IOException=> 
      { 
       e.printStackTrace(); 
      } 
      } 


    } 

    } 
} 

Но это не работает. Могу ли я использовать java-библиотеку в Scala?

+0

Пожалуйста, объясните «Но не работает». Какая ошибка вы получаете и т. Д.? –

+0

@Buhake Sindi В eclipse он не показывает никаких ошибок при наборе текста. Но когда я пытался запустить, он показывает мне ошибку, которая возникает при запуске/отмене проекта. –

+1

Просьба представить доказательства этого. Мы не можем помочь, если мы не можем видеть или не иметь доказательств того, какую ошибку вы получаете. –

ответ

0

Проблема, вызывающая вашу ошибку, заключается в том, что объект Contacts не имеет метода main. Вместо этого он содержит внутренний класс под названием Test, который имеет основной метод. Я не верю, что это то, что вы хотите (в Scala, методы объектов являются эквивалентом статических методов Java), поэтому метод main должен быть удален в Contacts, а внутренний класс удален.

Кроме того, for(i <-0 to entries.size()), вероятно, является ошибкой. Это примерно эквивалентно for(int i=0; i<=entries.size(); i++) (обратите внимание на <=). Вероятно, вы хотите for(i <-0 until entries.size()).

Пока вы там, вы можете убить блоки try..catch, если хотите, поскольку Scala не использует проверенные исключения. Если вы import scala.collection.JavaConversions._, то вы можете использовать for (entry <- entries), что может быть менее подвержено ошибкам.

Если он по-прежнему не работает (или при отправке будущих вопросов), предоставьте как можно больше информации (сообщения об ошибках, предупреждения и т. Д.), Поскольку это делает гораздо более вероятным, что кто-то сможет помочь ,

+0

Ошибка: не удается найти основной класс в контактах в проекте. Проверить проверку конфигурации прогона. –

+0

Я обновил ее с моей лучшей догадкой о том, в чем проблема. –