2013-04-28 97 views
1

我試圖採用了android到C#Web服務來上傳圖片值<java.lang.String類型的XML無法轉換到Android的JSONObject的

Web服務需要這些參數:

byte[] data, string strFileName 

但每次運行應用程序!它給了我這個錯誤:

Value <?xml of type java.lang.String cannot be converted to JSONObject 

這是代碼:

class ImageUploadTask extends AsyncTask<Void, Void, String> { 
    @Override 
    protected String doInBackground(Void... unsued) { 
     try { 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(
        "http://192.168.1.100:8080/ScanFiles.asmx?op=vFileUpload"); 
      MultipartEntity entity = new MultipartEntity(
        HttpMultipartMode.BROWSER_COMPATIBLE); 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      bmp.compress(CompressFormat.JPEG, 80, bos); 

      byte[] data = bos.toByteArray(); 

      entity.addPart("fileName", new StringBody(fnameglob)); 
      entity.addPart("data", new ByteArrayBody(data, "image/jpeg", fnameglob)); 

      httpPost.setEntity(entity); 
      HttpResponse response = httpClient.execute(httpPost, 
        localContext); 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(
          response.getEntity().getContent(), "iso-8859-1")); 

      String sResponse = reader.readLine(); 
      return sResponse; 

     } catch (Exception e) { 
      if (dialog.isShowing()) 
       dialog.dismiss(); 
      Toast.makeText(getApplicationContext(), e.getMessage(), 
        Toast.LENGTH_LONG).show(); 
      Log.e(e.getClass().getName(), e.getMessage(), e); 
      return null; 
     } 

     // (null); 
    } 

有什麼建議?任何幫助非常可觀。

回答

0

我已經用下面的代碼解決了我的情況:

protected String doInBackground(Void... unsued) { 
     try { 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      bmp.compress(CompressFormat.JPEG, 80, bos); 

      byte[] byte_arr = bos.toByteArray(); 
      String image_str = Base64.encodeBytes(byte_arr); 

      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      nameValuePairs.add(new BasicNameValuePair("data", image_str)); 
      nameValuePairs.add(new BasicNameValuePair("strFileName", 
        fnameglob)); 

      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(
         "http://192.168.1.100:1234/ScanFiles.asmx/vFileUpload"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 

       BufferedReader reader = new BufferedReader(
         new InputStreamReader(response.getEntity() 
           .getContent(), "UTF-8")); 

       String sResponse = reader.readLine(); 
       return sResponse; 

      } catch (Exception e) { 
       Log.e("HTTP", "Error in http connection " + e.toString()); 
      } finally { 

      } 
     } finally { 

     } 
     return "done"; 

     // (null); 
    } 

,這是Web服務代碼

[WebMethod] 
    public void vFileUpload(string data, string strFileName) 
    { 
     try 
     { 
      string str = data.Length.ToString(); 
      string sDestinationScannedFiles = ConfigurationManager.AppSettings["DestinationScannedFiles"].ToString(); 
      //string filePath = Server.MapPath(sDestinationScannedFiles + strFileName); 
      string filePath = sDestinationScannedFiles + strFileName; 

      File.WriteAllBytes(filePath, Convert.FromBase64String(data)); 
     } 

,如果你想找到的base64類,你會發現它here

謝謝。

相關問題