2011-09-07 4 views
1

서버에서 HttpPost 결과를 가져와 바이트 배열로 변환하고 특정 바이트를 byte[]에서 가져 오려고합니다. 지금은이 코드를 사용하고 있습니다. 나는 내가하고 싶은대로 그것을 바꿔야한다.Android Java - HttpPost 결과를 바이트로 변환

public class UserLogin extends Activity { 

    Button cancel,login; 
    HttpClient httpclient; 
    HttpPost httppost; 
    ArrayList<NameValuePair> postParameters; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 
     httpclient = new DefaultHttpClient(); 
     httppost = new HttpPost("http://www.rpc.test.com"); 

     postParameters = new ArrayList<NameValuePair>(); 
     //postParameters.add(new BasicNameValuePair("new_auth_data","1")); 
     postParameters.add(new BasicNameValuePair("username_hash", "c34a6cf6bff9f6b61e96fdf4bf360157d522a17c")); 
     postParameters.add(new BasicNameValuePair("password_hash", "56dc55f0062cf21797637b0f8652293023f2ef22")); 

     cancel = (Button) findViewById(R.id.cancel_login_btn); 
     cancel.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 

     login = (Button) findViewById(R.id.login_btn); 
     login.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       try { 
        httppost.setEntity(new UrlEncodedFormEntity(postParameters)); 

        HttpResponse response = httpclient.execute(httppost); 
        Log.d("Login", "Response " + response.getEntity()); 

        String responseBody = EntityUtils.toString(response.getEntity()); 
        byte[] b = responseBody.getBytes(); 
        // here 




        new AlertDialog.Builder(UserLogin.this) 
        .setTitle("Warning") 
        .setMessage(responseBody) 
        .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          Log.d("AlertDialog", "Positive"); 
         } 
        }) 
        .show(); 

       } catch (Exception e) { 
        Log.d("ERROR"," Error lol - "+e); 
       } 

      } 
     }); 
    } 
} 

이 HttpPost 내가 15 요소로부터 시작하지 내가 그랬던 것처럼 바이트로 변환하고 it..Like에서 특정 바이트를 얻을 필요가 문자열을 얻고을 한 결과, 다음은 코드입니다 25 또는 이런 식으로. 어떤 제안이라도 어떻게 할 수 있습니까?

모든 제안과 도움에 미리 감사드립니다. 대신

답변

1

배열로부터 서브 어레이 추출은

arrayCopy http://developer.android.com/reference/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29로 이루어진다 요소 15 ~ 25에 대한

:

,363,210
byte[] subarray = new byte[25-15]; 
System.arrayCopy(b, 15, subarray, 0, subarray.length); 
+0

실제로이 작업을 수행 할 때 AlertDialog.Even에 결과가 표시되지 않습니다. ** setMessage (subarray.toString()) ** –

+0

이것은 바이트 []를 사용하지 않는다는 것과 관련이 있습니다 이전에 작성된 String 만. 또한 byte []. toString()은 새로운 String (byte [])과 다르며 원하는 것을 수행합니다. – njzk2

1

사용 EntityUtils.toByteArray()있어서

byte[] responseValueArray = EntityUtils.toByteArray(response.getEntity()); 

그리고 어레이의 5 비트의 제 얻을 Arrays.copyOf() 방법을 사용하려면,

byte[] fiveLengthArray = Arrays.copyOf(responseValueArray, 5); 
+0

그리고 어떻게 "responseValueArray"의 첫 번째 5 비트를 얻을 수 있습니까? –

+0

@ Android-Droid, 업데이트 된 게시물을 확인하십시오. –

+0

실제로 : ** "copyOf (byte [], int) 메소드는 배열 타입"**에 대해 정의되지 않았습니다. –

1

사용

execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler) 

대신 사용자 정의 ResponseHandler에와

execute(HttpUriRequest request) 

의. 이렇게하면 입력 스트림을 직접 처리하고 원하는 모든 작업을 수행 할 수 있습니다. EntityUtils 사용은 GC가 충분하지 않습니다. 이런 종류의 물건에 관심이 있다면.