2011-12-16 7 views
0

プロトコルバッファーを使用してAndroidでジャージークライアントを作成したいと思います。 ジャージー-クライアント-1.8.jar ジャージーコア-1.8.jar いるProtobuf-javaの-2.4.0a.jarアンドロイドのジャージークライアントとプロトコルバッファー

私が書いたコード:

import com.sun.jersey.api.client.ClientRequest; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 
import com.sun.jersey.api.client.WebResource.Builder; 
import com.sun.jersey.api.client.filter.ClientFilter; 
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; 

BaseRestClient client = BaseRestClient.create("", ""); 

HTTPBasicAuthFilter authenticationFilter = 
    new HTTPBasicAuthFilter(username, password); 

client.addFilter(authenticationFilter); 
.......... 
.......... 
WebResource webResourceGetMea = client.resource(url); 
webResourceGetMea = webResourceGetMea.path("/accounts").path("/login"); 
ClientResponse responseGetMea = webResourceGetMea.type("application/x-protobuf").get(ClientResponse.class); 
私は、次のライブラリを使用しています

上記のコードはJava main()アプリケーションとして正常に動作していますが、Androidで実行しているときにresponseGetMea()オブジェクトはnull(コードの最後の行)です。

"application/x-protobuf"は、このようにサーバー側で定義されているためです。 Androidアプリケーションにインターネットアクセス許可を追加しました。 また、AndroidブラウザからURLを確認して、クリックすると、ユーザー名とパスワード(予想される動作)を入力するよう求められます。

本当に助けていただきありがとうございます。

よろしく、

kalgik

答えて

0

ルーカスベンチュラ、2010年8月25日で提案されているように私はで提供さ溶液、

java.lang.NullPointerException on Android

を用います。 9:15 AM

そして、それは魅力的に機能しました。

[編集] まあ、小さなコメント/修正。 HTCの携帯電話で実行すると、私は最小化(これが正常であるかどうかわからない)して再オープンしたときにアプリが破壊/作成されました。提案されたソリューションは、JerseyクライアントオブジェクトとServiceFinder設定が静的コンテキストで発生する必要があることを要求しています。これは、そうでない場合

private static final BaseRestClient client; 
static { 
    client = BaseRestClient.create("", ""); // just a helper class 
    ServiceFinder.setIteratorProvider(new Buscador()); 
} 

を手掛かりを与える必要があり、クラスローディングの修正は、むしろ奇妙な方法で文句を言います。これが誰かを助けることを願って...

乾杯!

1

追加...以前のリンクでBuscadorのバージョンでPOSTしようとすると、いくつかのエラーが表示されました。誰かがこれらの例外の理由に興味がある場合は投稿のために働くBuscadorの新バージョンは、次の、

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 

import com.sun.jersey.spi.service.ServiceFinder; 
import com.sun.jersey.spi.service.ServiceFinder.DefaultServiceIteratorProvider; 
import com.sun.jersey.spi.service.ServiceFinder.ServiceIteratorProvider; 

public class Buscador<T> extends ServiceIteratorProvider<T> 
{ 
private static final HashMap<String, String[]> SERVICES = new HashMap<String, String[]>(); 

private static final String[] com_sun_jersey_spi_HeaderDelegateProvider = new String[] { 
     "com.sun.jersey.core.impl.provider.header.LocaleProvider", 
     "com.sun.jersey.core.impl.provider.header.EntityTagProvider", 
     "com.sun.jersey.core.impl.provider.header.MediaTypeProvider", 
     "com.sun.jersey.core.impl.provider.header.CacheControlProvider", 
     "com.sun.jersey.core.impl.provider.header.NewCookieProvider", 
     "com.sun.jersey.core.impl.provider.header.CookieProvider", 
     "com.sun.jersey.core.impl.provider.header.URIProvider", 
     "com.sun.jersey.core.impl.provider.header.DateProvider", 
     "com.sun.jersey.core.impl.provider.header.StringProvider" 

}; 
private static final String[] com_sun_jersey_spi_inject_InjectableProvider = new String[] { 
     "com.sun.jersey.core.impl.provider.xml.SAXParserContextProvider", 
     "com.sun.jersey.core.impl.provider.xml.XMLStreamReaderContextProvider", 
     "com.sun.jersey.core.impl.provider.xml.DocumentBuilderFactoryProvider", 
     "com.sun.jersey.core.impl.provider.xml.TransformerFactoryProvider" 
}; 
private static final String[] javax_ws_rs_ext_MessageBodyReader = new String[] { 
     "com.sun.jersey.core.impl.provider.entity.StringProvider", 
     "com.sun.jersey.core.impl.provider.entity.ByteArrayProvider", 
     "com.sun.jersey.core.impl.provider.entity.FileProvider", 
     "com.sun.jersey.core.impl.provider.entity.InputStreamProvider", 
     "com.sun.jersey.core.impl.provider.entity.DataSourceProvider", 
     "com.sun.jersey.core.impl.provider.entity.RenderedImageProvider", 
     "com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider", 
     "com.sun.jersey.core.impl.provider.entity.FormProvider", 
     "com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.ReaderProvider", 
     "com.sun.jersey.core.impl.provider.entity.DocumentProvider", 
     "com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader", 
     "com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader", 
     "com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.EntityHolderReader" 
}; 
private static final String[] javax_ws_rs_ext_MessageBodyWriter = new String[] { 
     "com.sun.jersey.core.impl.provider.entity.StringProvider", 
     "com.sun.jersey.core.impl.provider.entity.ByteArrayProvider", 
     "com.sun.jersey.core.impl.provider.entity.FileProvider", 
     "com.sun.jersey.core.impl.provider.entity.InputStreamProvider", 
     "com.sun.jersey.core.impl.provider.entity.DataSourceProvider", 
     "com.sun.jersey.core.impl.provider.entity.RenderedImageProvider", 
     "com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider", 
     "com.sun.jersey.core.impl.provider.entity.FormProvider", 
     "com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text", 
     "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General", 
     "com.sun.jersey.core.impl.provider.entity.ReaderProvider", 
     "com.sun.jersey.core.impl.provider.entity.DocumentProvider", 
     "com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider", 
     "com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter" 
}; 

static 
{ 
    SERVICES.put("com.sun.jersey.spi.HeaderDelegateProvider", 
     com_sun_jersey_spi_HeaderDelegateProvider); 
    SERVICES.put("com.sun.jersey.spi.inject.InjectableProvider", 
     com_sun_jersey_spi_inject_InjectableProvider); 
    SERVICES.put("javax.ws.rs.ext.MessageBodyReader", javax_ws_rs_ext_MessageBodyReader); 
    SERVICES.put("javax.ws.rs.ext.MessageBodyWriter", javax_ws_rs_ext_MessageBodyWriter); 
} 

DefaultServiceIteratorProvider defaultServiceIteratorProvider = new ServiceFinder.DefaultServiceIteratorProvider(); 

@SuppressWarnings("unchecked") 
@Override 
public Iterator<Class<T>> createClassIterator(Class<T> service, String serviceName, 
    ClassLoader loader, boolean ignoreOnClassNotFound) 
{ 
    String[] classesNames = SERVICES.get(serviceName); 

    System.out.println("!!!!!!!!!!!! serviceName: " + serviceName + " !!!!!!!!!!!!!!!!!!!"); 

    if(classesNames==null) 
    { 
     return defaultServiceIteratorProvider.createClassIterator(service, serviceName, loader, ignoreOnClassNotFound); 
    } 

    int length = classesNames.length; 
    ArrayList<Class<T>> classes = new ArrayList<Class<T>>(length); 
    for (int i = 0; i < length; i++) 
    { 
     try 
     { 
      classes.add((Class<T>) Class.forName(classesNames[i])); 
     } catch (ClassNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    //return null; 
    return classes.iterator(); 
} 

@Override 
public Iterator<T> createIterator(Class<T> service, String serviceName, ClassLoader loader, 
    boolean ignoreOnClassNotFound) 
{ 
    String[] classesNames = SERVICES.get(serviceName); 
    int length = classesNames.length; 
    ArrayList<T> classes = new ArrayList<T>(length); 
    for (int i = 0; i < length; i++) 
    { 
     try 
     { 
      classes.add(service.cast(Class.forName(classesNames[i]).newInstance())); 
     } catch (IllegalAccessException e) 
     { 
      e.printStackTrace(); 
     } catch (InstantiationException e) 
     { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    return classes.iterator(); 
} 

}

関連する問題