외부 DB 연동 할려고 하는데 앞전에 질문을 올려서 소스를 다 입력하고 에뮤레이터로 실행 해보니 첫화면(입력화면)은 뜨는데 입력하고 확인을 누르면 Unfortunately, SoapExample has stypped. 오류가 뜹니다.
대체 어디가 잘못 된건지 알수가 없어요 ..
asmx 파일은 잘 작동을 하거든요 ..
아래 소스 참고 하시고 답변 좀 부탁드립니다 ..
-------------------------------------------------------------------------------------------------------------
SoapExample.java
public class SoapExample extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/Response_SearchData";
private static final String METHOD_NAME = "Response_SearchData";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://웹사이트 url/WebService.asmx";
EditText searchText;
TextView outPut;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.badfood);
searchText = ((EditText)findViewById(R.id.input));
outPut = ((TextView)findViewById(R.id.output));
Button searchbtn = ((Button)findViewById(R.id.soap_btn));
searchbtn.setOnClickListener(SearchListener);
}
Button.OnClickListener SearchListener = new Button.OnClickListener(){
public void onClick(View v){
switch(v.getId()){
case R.id.soap_btn:
String searchData = searchText.getText().toString();
soapData(searchData);
break;
}
}
};
private void soapData(String searchData){
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
request.addProperty("searchData", searchData);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try{
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
String result1 = xmlPasing(result.toString());
outPut.setText(result1);
} catch(Exception e){
e.printStackTrace();
}
}
private String xmlPasing(String data){
String parsingData = null;
try{
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
XmlPullParser parser = parserCreator.newPullParser();
InputStream input = new ByteArrayInputStream(data.getBytes("UTF-8"));
parser.setInput(input, "UTF-8");
int parserEvent = parser.getEventType();
String tag;
boolean inText = false;
while(parserEvent != XmlPullParser.END_DOCUMENT){
switch(parserEvent){
case XmlPullParser.START_TAG:
tag = parser.getName();
if (tag.compareTo("NewDataSet") == 0){
inText = false;
} else if (tag.compareTo("Table") == 0){
inText = false;
} else{
inText = true;
}
break;
case XmlPullParser.TEXT:
tag = parser.getName();
if (inText){
parsingData += parser.getText() + ",";
}
inText = false;
break;
case XmlPullParser.END_TAG:
inText = false;
break;
}
parserEvent = parser.next();
}
} catch(Exception e){
Log.e("dd", "Error in network call", e);
}
return parsingData;
}
}
--------------------------------------------------------------------------------------------
App_Code / badfood.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
/// <summary>
/// WebService의 요약 설명입니다.
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// ASP.NET AJAX를 사용하여 스크립트에서 이 웹 서비스를 호출하려면 다음 줄의 주석 처리를 제거합니다.
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {
private string connect = @"data source=(local); initial catalog=; user id=; password=";
public WebService () {
//디자인된 구성 요소를 사용하는 경우 다음 줄의 주석 처리를 제거합니다.
//InitializeComponent();
}
[WebMethod]
public string Response_SearchData(string searchData) {
String strResponse;
SqlConnection con = new SqlConnection(connect);
string sqlwhere = "Name like '%" + searchData + "%'";
string sql = "SELECT [Name], [Date], [Tel] FROM Table_Name where " + sqlwhere;
DataSet ds = new DataSet();
strResponse = "";
try
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(ds);
strResponse = ds.GetXml();
}
catch (SqlException ex)
{
strResponse = "Error:" + ex.ToString();
}
catch (Exception ex)
{
strResponse = "Error:" + ex.ToString();
}
finally
{
if (con.State == System.Data.ConnectionState.Open){
con.Close();
}
}
return strResponse;
}
}
--------------------------------------------------------------------------------------------
로그 안의 익셉션 부분입니다.
06-14 00:04:12.728: E/AndroidRuntime(664): FATAL EXCEPTION: main
06-14 00:04:12.728: E/AndroidRuntime(664): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
06-14 00:04:12.728: E/AndroidRuntime(664): at exam.SoapExample.SoapExample.soapData(SoapExample.java:49)
06-14 00:04:12.728: E/AndroidRuntime(664): at exam.SoapExample.SoapExample.access$0(SoapExample.java:48)
06-14 00:04:12.728: E/AndroidRuntime(664): at exam.SoapExample.SoapExample$1.onClick(SoapExample.java:42)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.view.View.performClick(View.java:3511)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.view.View$PerformClick.run(View.java:14105)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.os.Handler.handleCallback(Handler.java:605)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.os.Handler.dispatchMessage(Handler.java:92)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.os.Looper.loop(Looper.java:137)
06-14 00:04:12.728: E/AndroidRuntime(664): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-14 00:04:12.728: E/AndroidRuntime(664): at java.lang.reflect.Method.invokeNative(Native Method)
06-14 00:04:12.728: E/AndroidRuntime(664): at java.lang.reflect.Method.invoke(Method.java:511)
06-14 00:04:12.728: E/AndroidRuntime(664): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-14 00:04:12.728: E/AndroidRuntime(664): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-14 00:04:12.728: E/AndroidRuntime(664): at dalvik.system.NativeStart.main(Native Method)



