.net 웹 서비스에서 압축 된 문자열이 나타납니다. 일식에서 나는 찌르는 것을 감압하고 싶다.이클립스에서 문자열 압축 해제
웹 서비스에서 문자열 압축 :
resultJsonString = new AsyncGetProductIdResults().execute(link).get();
String temp = unZip(resultJsonString);
비동기 : 안드로이드에서
class AsyncGetProductIdResults extends AsyncTask<String, Void, String>
{
@SuppressWarnings("null")
@Override
protected String doInBackground(String... params)
{
String url = params[0];
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
try
{
HttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toString(response.getEntity());
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String idResult)
{
if (idResult == null)
public static byte[] ZipStr(string str)
{
{
return;
}
}
}
압축 해제 :
안드로이드 사용하여 비동기에서public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
MemoryStream ms = new MemoryStream();
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
{
zip.Write(buffer, 0, buffer.Length);
}
ms.Position = 0;
MemoryStream outStream = new MemoryStream();
byte[] compressed = new byte[ms.Length];
ms.Read(compressed, 0, compressed.Length);
byte[] gzBuffer = new byte[compressed.Length + 4];
System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
return Convert.ToBase64String(gzBuffer);
}
웹 서비스 응답을
로그 캣 : 나는 압축 및 압축 해제를 구현하기 위해 시작하기 전에 내 웹 서비스 및 응답했다
01-08 11:07:59.016: E/AndroidRuntime(1327): FATAL EXCEPTION: main
01-08 11:07:59.016: E/AndroidRuntime(1327): java.lang.IllegalStateException: Could not execute method of the activity
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$1.onClick(View.java:3591)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View.performClick(View.java:4084)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$PerformClick.run(View.java:16966)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Handler.handleCallback(Handler.java:615)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Handler.dispatchMessage(Handler.java:92)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.os.Looper.loop(Looper.java:137)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-08 11:07:59.016: E/AndroidRuntime(1327): at dalvik.system.NativeStart.main(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): Caused by: java.lang.reflect.InvocationTargetException
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 11:07:59.016: E/AndroidRuntime(1327): at android.view.View$1.onClick(View.java:3586)
01-08 11:07:59.016: E/AndroidRuntime(1327): ... 11 more
01-08 11:07:59.016: E/AndroidRuntime(1327): Caused by: java.util.zip.DataFormatException: data error
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflateImpl(Native Method)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflate(Inflater.java:228)
01-08 11:07:59.016: E/AndroidRuntime(1327): at java.util.zip.Inflater.inflate(Inflater.java:205)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.example.testp.SecondActivity.unZip(SecondActivity.java:184)
01-08 11:07:59.016: E/AndroidRuntime(1327): at com.example.testp.SecondActivity.JSONDataSync(SecondActivity.java:83)
01-08 11:07:59.016: E/AndroidRuntime(1327): ... 14 more
. 어떤 도움을 주시면 감사하겠습니다. 당신이 나를 물질적으로 가리킬 수 있다고해도 나는 읽을 수 있습니다. 1
편집 후 안드로이드에 https://stackoverflow.com/a/21016711/1587302
public static byte[] ZipStr(string str)
{
using (MemoryStream output = new MemoryStream())
{
using (DeflateStream gzip =
new DeflateStream(output, CompressionMode.Compress))
{
using (StreamWriter writer =
new StreamWriter(gzip, System.Text.Encoding.UTF8))
{
writer.Write(str);
}
}
return output.ToArray();
}
}
AsyncTask를에서 제안 된 변경 사항을 적용 :
class AsyncGetProductIdResultsBytes extends AsyncTask<String, Void, byte[]>
{
@SuppressWarnings("null")
@Override
protected byte[] doInBackground(String... params)
{
String url = params[0];
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
try
{
HttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toByteArray(response.getEntity());
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] idResult)
{
if (idResult == null)
{
return;
}
}
}
압축 해제를 안드로이드에서 : 압축 해제 아직도 바쁘다. 바이트
콘텐츠 [] 압축 후 웹 서비스 측 [1,97,0,0,31,139 ...]] 감압 전에 로이드 측 바이트
콘텐츠 [123,34,103,101,116, 65, ...]
웹 서비스 쪽에서 압축을 올바르게하고 있는지 알고 싶습니까? 안드로이드 측에서받은 바이트 []의 내용을 변경해야합니까?
첫 번째는 당신이 C#에서 기본 64에서 데이터를 인코딩하는하지만 적어도 당신이 게시 한 코드에서 자바를 디코딩하지 않는 것입니다 :
음, 수는 엔디안에 문제가 존재한다 : 당신이 자바에있는 데이터의 첫 번째 4 바이트를 읽으면 C#에서보다 동일? 웹 서비스에서 – Narkha
압축 된 문자열 : { "getAllProjectsByIDResult": "AWEAAB + LCAAAAAAABADsvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99"} – user3074196
일식에서 수신 된 문자열 { "getAllProjectsByIDResult": "AWEAAB + LCAAAAAAABADsvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee ++ 997o7nU4n99"} 그냥 바이트 배열을 쓴 – user3074196