-2

私はscalaが初めてです。Gmail から自分のアプリケーションに連絡先をインポートしようとしています。リンク https://developers.google.com/google-apps/contacts/v2/developers_guide_java?csw=1#retrifying_without_queryに従って、Eclipse を使用して Java でサンプル アプリケーションを作成できます。 私のJavaアプリケーションで連絡先をインポートできます.そして、それは正常に動作します. 私のJavaコードは

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");
      }
    }
  }

My Scala で同じライブラリ関数を使用しようとしましたが、機能しません。私の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();
            }
          }


    }

   }
}

しかし、それは機能しません。Scala で Java ライブラリを使用できますか?

4

1 に答える 1

0

エラーの原因となっている問題は、オブジェクトにメソッドContactsがないことです。代わりに、main メソッドを持つ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..catchScala はチェック例外を使用しないため、そこにいる間、必要に応じてブロックを強制終了できます。の場合は、エラーが発生しにくい をimport scala.collection.JavaConversions._使用できます。for (entry <- entries)

それでもうまくいかない場合 (または今後の質問を投稿するとき) は、できる限り多くの情報 (エラー メッセージ、警告など) を提供してください。

于 2013-09-05T15:56:22.103 に答える