2013-04-29 73 views
2

我试图使用GestureOverlayView来捕获签名,并根据请求发送签名。这工作正常,如果只有一个签名被发送,现在我想要发送多个签名,为此我试图在arraylist中存储签名。是否有其他可能性发送签名而不是使用NameValuePair如何使用android发送arraylsit作为请求参数?

这是我的代码:

public class MainActivity extends Activity { 

String response; 
WebView webView; 
String loanCode; 

ArrayList<String> arrayList = new ArrayList<String>(); 
@SuppressLint("SetJavaScriptEnabled") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Intent intent = getIntent(); 
    String url = intent.getExtras().getString("url"); 
    loanCode = intent.getExtras().getString("loanCode"); 
    webView = (WebView) findViewById(R.id.pdfDisplay); 
    webView.setWebViewClient(new WebViewClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebChromeClient(new WebChromeClient()); 
    webView.loadUrl("https://docs.google.com/gview?embedded=true&url="+url); 
    //webView.loadUrl(url); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 

    return true; 
} 

@SuppressLint("ShowToast") 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 

    case R.id.save: 

     try { 

      GestureOverlayView gestureView = (GestureOverlayView) findViewById(R.id.signaturePad); 

      Bitmap bm = Bitmap.createBitmap(gestureView.getGesture().toBitmap(100, 100, 10, Color.BLACK)); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(2056); 
      //FileOutputStream fos = openFileOutput("signature.png", Context.MODE_PRIVATE); 
      bm.compress(Bitmap.CompressFormat.PNG, 100, stream); 

      byte[] image_byte = stream.toByteArray(); // stream.toString().getBytes();//Base64.encode(fos.toString().getBytes(), 0); 

      String strImage = Base64.encodeToString(image_byte, Base64.DEFAULT); 

      if(arrayList.size()<3){ 
      arrayList.add(strImage); 
      } 
      String serverUrl = "http://192.168.3.139:8001/ql/acceptCustomerSignature.do"; 
      //String serverUrl = "http://192.168.3.139:8001/APDWebTest/ImageRetrieve"; 
      String[] signatureImage = {serverUrl,strImage,loanCode}; 

      ArrayList params = new ArrayList(); 
      params.add(serverUrl); 
      params.add(arrayList); 
      params.add(loanCode); 
      System.out.println("String is "+strImage); 

      stream.flush(); 
      stream.close(); 

      APDWebApp apd = new APDWebApp(); 
      apd.execute(params); 

     } catch (Exception e) { 

      Log.v("Gestures", e.getMessage()); 

      e.printStackTrace(); 

     } 
     System.out.println("Size of array list "+arrayList.size()); 
     break; 

    case R.id.logout: 
     Intent logout = new Intent(this, LoginActivity.class); 
     startActivity(logout); 
     finish(); 
     break; 
    } 
    return false; 
    } 


private class APDWebApp extends AsyncTask<ArrayList, Void, String>{ 

    String response = null; 
    @Override 
    protected String doInBackground(ArrayList... params) { 

     try{ 
      ArrayList parameters = params[0]; 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(parameters.get(0).toString()); 

      ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 

      nameValuePair.add(new BasicNameValuePair("signture", (String)parameters.get(1))); 
      nameValuePair.add(new BasicNameValuePair("loanCode", (String) parameters.get(2))); 

      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8")); 
      //httpPost.setHeader(name, value) 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      response = EntityUtils.toString(httpEntity); 
      System.out.println("Response is "+response); 

     } 
     catch(Exception ex){ 

      ex.printStackTrace(); 

     } 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT); 
     response = result; 
     super.onPostExecute(result); 



    } 


} 

我尝试添加签名在这一步arrayList.add(strImage);

传递此ArrayList来的AsyncTask类params.add(arrayList);

添加此使用的NameValuePair以下内容的ArrayList步骤

ArrayList parameters = params[0]; nameValuePair.add(new BasicNameValuePair("signture", (String)parameters.get(1)));

我不确定这是否只是发送arraylist作为请求参数的方法。请让我知道是否有其他可能性。

+0

你是什么意思发送?将我们指向您想要更改的代码部分。 – tbkn23 2013-04-29 05:18:01

+0

@tbkn编辑我的问题 – 2013-04-29 05:28:07

回答

0

NameValuePair是使用参数创建HTTP GET请求的标准方法。 你可以改变你发送信息到你的AsyncTask尽管这样,因为对于异步任务的参数是Params... params,您可以发送两个String代替ArrayList

apd.execute(serverUrl, signature, loancode); 

,然后只需在doInBackground()使用它们:

HttpPost httpPost = new HttpPost(params.get(0)); 

ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 
nameValuePair.add(new BasicNameValuePair("signture", params.get(1))); 
nameValuePair.add(new BasicNameValuePair("loanCode", params.get(2))); 
相关问题