Box のファイル/フォルダー ID をバイパスし、他の多くのサービスもサポートしようとして、Linux ボックスで WebDAV にある程度慣れているため、WebDAV を使用して実装することにしました。Android で動作するように修正された JackRabbit に基づいたライブラリを選択しました。しかし、問題が発生するまでそう長くはかかりませんでした。
Box のルート エントリを一覧表示しようとすると、multiStatus.getResponses() は空の配列を返します。別の webdav サーバーにアクセスすると、期待どおりの応答が得られます。予想どおり、両方のサーバーがステータス コード 207 を返します。
私のコードは以下のとおりです。
編集:ファイルを移動することはできますが、ディレクトリのエントリを一覧表示することはできません:/
String host = "https://www.box.com/dav/";
//String host = "http://demo.sabredav.org/";
hostConfig = new HostConfiguration();
hostConfig.setHost(host);
HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
int maxHostConnections = 20;
params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);
connectionManager.setParams(params);
client = new HttpClient(connectionManager);
Credentials creds = new UsernamePasswordCredentials("BOXEMAILADDRESS", "MYBOXPASSWORD");
//Credentials creds = new UsernamePasswordCredentials("testuser", "test");
client.getState().setCredentials(AuthScope.ANY, creds);
client.setHostConfiguration(hostConfig);
try
{
String propfindUri = host;
DavMethod method = new PropFindMethod(propfindUri, DavConstants.PROPFIND_ALL_PROP, DavConstants.DEPTH_1);
client.executeMethod(method);
Log.i("Status: " + method.getStatusCode());
MultiStatus multiStatus = method.getResponseBodyAsMultiStatus();
MultiStatusResponse[] responses = multiStatus.getResponses();
Log.i("Length: " + responses.length);
for(MultiStatusResponse response : responses)
{
Log.i("File: " + response.getHref());
}
}
catch (Exception e)
{
Log.printStackTrace(e);
}