前一陣子剛學習了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;
}
}