前一陣子剛學習了Android,在手機運作較複雜的功能時速可能會比較慢

所以希望改使用Webservice的方式來解決,因此上網搜尋了許多資料 終於自己成功了!!

所以跟大家分享一下:)  我的Android版本為2.2版

 

<KSOAP2前置作業>

STEP 1:官網下載套件 KSOAP 2.4版

STEP 2:加入Eclipse 專案中 

            (1)在專案底下新增一個 libs 資料夾, 放入下載的套件 .jar檔

 

STEP 3:在專案前匯入以下

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.MarshalBase64;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

 

<Android 程式部分>

STEP 1:必要參數宣告

private static final String SOAP_ACTION = "http://tempuri.org/imageupload";                                      //可至Webservice程式執行後觀看   http://tempuri.org/服務名稱
private static final String METHOD_NAME = "imageupload";                                                                  //服務名稱
private static final String NAMESPACE = "http://tempuri.org/";                                                             //可至Webservice程式執行後觀看 
private static final String URL = "http://140.***.***.***/WebService1/Service1.asmx";                    //Webservice的連結

 

STEP 2:主程式

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

         //預先設置一張圖片給myBitmap 讀取sdcard中的圖片
   myBitmap= BitmapFactory.decodeFile("mnt/sdcard/robbit.jpg");                                                  

}

public void updateImage() {

   ByteArrayOutputStream baos=new ByteArrayOutputStream();
   myBitmap.compress(CompressFormat.JPEG,100, baos);
   byte [] b=baos.toByteArray();

         //將圖片以Base64編碼轉成String 
   String imagebyte=Base64.encodeToString(b, Base64.DEFAULT);                                                                      

   // Log.e("debug_log",imagebyte);

   SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);


      //傳遞一個參數給Webservice    Request.addProperty("參數名稱",變數名稱);   參數名稱須和Webservice端接收名稱相同   
   Request.addProperty("in_image",imagebyte);                                                                  

         

   SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
   soapEnvelope.dotNet=true;

   soapEnvelope.setOutputSoapObject(Request);
   HttpTransportSE aht=new HttpTransportSE(URL);

   try
   {
     Log.e("debug_log","3");
     aht.call(SOAP_ACTION, soapEnvelope);
     SoapPrimitive response = (SoapPrimitive)soapEnvelope.getResponse();
     TextView1.setText("Message:"+response.toString());
     Log.e("debug_log",response.toString());
   }
   catch(Exception e)
   {
     e.printStackTrace();
   }

}

 

<Webvice 程式部分>

STEP1:主程式

[WebMethod]
public string imageupload(String in_image)
{

   byte[] bt = Convert.FromBase64String(in_image);
   System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);
   Bitmap bitmap = new Bitmap(stream);

   string fileName = "uploadImage.jpg";
   try
   {

     MemoryStream memoryStream = new MemoryStream(bt);

     FileStream fileStream = new FileStream(Server.MapPath(@"~\upload\" + fileName), FileMode.Create);

     memoryStream.WriteTo(fileStream);

     memoryStream.Close();

     fileStream.Close();

     fileStream = null;

     memoryStream = null;
     return "上傳成功";

   }

   catch (Exception ex)
   {

     return ex.Message;

   }
}

 

arrow
arrow
    全站熱搜

    Patlis 發表在 痞客邦 留言(0) 人氣()