android ksoap 2でデータをアップロード、ダウンロード
8892 ワード
前にandroidと書いてありますが、ksoap 2パッケージを使用してリモートコールサービスを行う場合、サービスメソッドを呼び出すときにパラメータを渡す必要がある場合があります.ファイルをアップロードしたり、データをダウンロードしたりするときは?byte、byteはこのように定義されていることはよく知られています.byteはネットワークを通じて情報を伝送する単位で、ネットワーク上のすべての情報はbit単位で伝達され、1 bitは0または1を表し、8 bitは1 byteに等しいです.携帯電話のローカルデータをxmlファイルを介してサービス側にアップロードする必要がある場合は、xmlファイルをbyteに変換してアップロードに成功する必要があります.
コードとプロシージャは次のとおりです.
まずファイルをInputStreamに変換し、ここでファイル圧縮を行いました.
圧縮後に返されるのはbyte[]で、サービス側のパラメータタイプもbyte[]で、現在biye[]配列に変換して、直接このように書くことができてアップロードすることができると思っています!
soapObject.addProperty("bytes", bytes);
このようなアップロードは成功しません.callの前にBase 64でregisterを行う必要があります.
Base 64ネットワーク上で最も一般的な8 Bitバイトコードを伝送するための符号化方式の1つであり、我々がデータ量が大きい場合、xmlのようなデータ型ファイルのように、Base 64符号化はHTTP環境下で長い識別情報を伝達するために使用することができる.Base 64符号化は、比較的短いだけでなく、符号化されたデータが肉眼で直接見られないという可読性も有する.Base 64の知識については、
http://baike.baidu.com/view/469071.htmに詳しく説明します.
前はアップロードデータで、次はダウンロードデータで、サービス側は圧縮後のxmlバイト配列に戻り、bodyIn後、転送されたbyte[]データが直接xmlと書くと文字化けしてしまいます.この場合、以下の操作が必要です.
一、Base 64の場合は、先に行う必要があります.
二、このファイルはzip圧縮ファイルのbyteであるため、zipファイルと書く必要がある
三、zipファイルを解凍する:
四、解凍して解凍したバイト配列を返すbyte[]はxmlファイルです.
五、最後にxml解析器で解析し、解析器については後で詳しく記録します.Androidにはpull解析器、javaにはSAX解析器、DOC解析器が内蔵されています.
解析が完了すると、サービス側のデータを取得できます.
コードとプロシージャは次のとおりです.
まずファイルをInputStreamに変換し、ここでファイル圧縮を行いました.
1 //
2 public static byte[] compressToByte(File file) {
3 try {
4 InputStream inputStream = new FileInputStream(file);
5 ByteArrayOutputStream out = new ByteArrayOutputStream();
6 GZIPOutputStream gzip = new GZIPOutputStream(out);
7 byte[] bytes = new byte[1024];
8 int count = 0;
9 while ((count = inputStream.read(bytes)) > -1) {
10 gzip.write(bytes, 0, count);
11 }
12 gzip.finish();
13 gzip.close();
14 inputStream.close();
15 return out.toByteArray();
16 } catch (Exception e) {
17 // TODO: handle exception
18 e.getStackTrace();
19 }
20 return null;
21 }
圧縮後に返されるのはbyte[]で、サービス側のパラメータタイプもbyte[]で、現在biye[]配列に変換して、直接このように書くことができてアップロードすることができると思っています!
soapObject.addProperty("bytes", bytes);
このようなアップロードは成功しません.callの前にBase 64でregisterを行う必要があります.
new MarshalBase64().register(envelope);
Base 64ネットワーク上で最も一般的な8 Bitバイトコードを伝送するための符号化方式の1つであり、我々がデータ量が大きい場合、xmlのようなデータ型ファイルのように、Base 64符号化はHTTP環境下で長い識別情報を伝達するために使用することができる.Base 64符号化は、比較的短いだけでなく、符号化されたデータが肉眼で直接見られないという可読性も有する.Base 64の知識については、
http://baike.baidu.com/view/469071.htmに詳しく説明します.
前はアップロードデータで、次はダウンロードデータで、サービス側は圧縮後のxmlバイト配列に戻り、bodyIn後、転送されたbyte[]データが直接xmlと書くと文字化けしてしまいます.この場合、以下の操作が必要です.
一、Base 64の場合は、先に行う必要があります.
byte[] bytes=Base64.decode(resulObject.getProperty(0).toString());
二、このファイルはzip圧縮ファイルのbyteであるため、zipファイルと書く必要がある
// zip
File files=new File(activity.getFilesDir(), "huirongassets.zip");
FileOutputStream fs=new FileOutputStream(files);
fs.write(bytes, 0, bytes.length);
fs.flush();
fs.close();
三、zipファイルを解凍する:
1 public byte[] unGZip(InputStream inputStream){
2 byte[] b=null;
3 try {
4 //Gzip
5 GZIPInputStream gzip=new GZIPInputStream(inputStream);
6 byte[] bytes=new byte[31240];
7 int num=-1;
8 ByteArrayOutputStream baos=new ByteArrayOutputStream();
9 while((num=gzip.read(bytes,0,bytes.length))>-1){
10 baos.write(bytes, 0, num);
11 }
12 b=baos.toByteArray();
13 baos.flush();
14 baos.close();
15 gzip.close();
16 return b;
17 } catch (Exception e) {
18 // TODO: handle exception
19 e.getStackTrace();
20 }
21 return null;
22 }
四、解凍して解凍したバイト配列を返すbyte[]はxmlファイルです.
1 File file=new File(activity.getFilesDir(), "dataversion.xml");
2 FileOutputStream outputStream=new FileOutputStream(file);
3 outputStream.write(bytes, 0, bytes.length);
4 outputStream.flush();
5 outputStream.close();
五、最後にxml解析器で解析し、解析器については後で詳しく記録します.Androidにはpull解析器、javaにはSAX解析器、DOC解析器が内蔵されています.
解析が完了すると、サービス側のデータを取得できます.