마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 외부 db연결 질문입니다.

0 추천

mssql 을 사용했고 ii7을 이용

xml을 파싱해서 데이터를 이용하는 방법인데 에뮬레이터에서는 실행이 잘 되는데 

실제기기에서는 사용이안되네요.

log를 찍어봐도 실제기기에선 일정 부분만 실행하다가 멈추는거같아요.

혹시 이런현상이 있었는데 해결하신분 없으신가요 ㅠ

---------------------------------소스코드----------------------------------------------

public ArrayList<Data> soapData() throws Exception {

ArrayList<Data> dataList = new ArrayList<Data>();

SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);
        Log.e("dd", "Soap Created");
        SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
        Log.e("dd", "envelope");
        envelope.dotNet=true;
        envelope.setOutputSoapObject(request);

        request.addProperty("SQL" ,SEARCHDATA);
        Log.e("dd", "request");
        
        HttpTransportSE androidHttpTransport=new HttpTransportSE(URL);
        Log.e("dd", "HttpTransportSE");
        androidHttpTransport.debug = true;
        Log.e("dd", "HttpTransportSE2");

        
        androidHttpTransport.call(SOAP_ACTION, envelope);
        Log.e("dd", "try2");
        SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
        Log.e("dd", "try3");
        dataList = xmlParsing(result.toString()); //xml파싱
        
        Log.d("data",""+dataList.get(0).getNowStandard());
        Log.d("data",""+dataList.get(1).getNowStandard());
        return dataList;

}

public ArrayList<Data> xmlParsing(String Data) throws Exception {
Log.d("dd", "Parser");
ArrayList<Data> dataList = new ArrayList<Data>();

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
InputStream input = new ByteArrayInputStream(Data.getBytes("UTF-8"));
parser.setInput(input, "utf-8"); 

boolean lineSet = false;
boolean conSet = false;
boolean standSet = false;
boolean nowSet = false;

int eventType = parser.getEventType();
   while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
    case XmlPullParser.START_DOCUMENT:
      break;
      case XmlPullParser.END_DOCUMENT:
      break;
      case XmlPullParser.START_TAG:
      
      String tag = parser.getName();
      if (tag.equals("lineName")) {
      lineSet = true;
      }
      if (tag.equals("conditionName")) {
      conSet = true;
      }
      if (tag.equals("standStatus")) {
      standSet = true;
      }
      if (tag.equals("nowStatus")) {
      nowSet = true;
      }
      break;
      case XmlPullParser.END_TAG:
      break;
      case XmlPullParser.TEXT:
      if (lineSet) {
      data = new Data();
      data.setLineName(parser.getText()); //Tag가 끝난후 Tag의 Text값을 가져옴
      lineSet = false;
      }
      if (conSet) {
      data.setConditionName(parser.getText()); //Tag가 끝난후 Tag의 Text값을 가져옴
      conSet = false;
      }
      if (standSet) {
      data.setStandard(Double.parseDouble(parser.getText())); //Tag가 끝난후 Tag의 Text값을 가져옴
      standSet = false;
      }
      if (nowSet) {
      data.setNowStandard(Double.parseDouble(parser.getText())); //Tag가 끝난후 Tag의 Text값을 가져옴
      
      boolean passSet = false;
      double compareValue = data.getStandard() - data.getNowStandard();
      if(compareValue<2 && compareValue>-2)
      passSet = true;
//        Log.e("data", data.getLineName());
//        Log.e("data", data.getConditionName());
//        Log.e("data", "" + data.getStandard());
//        Log.e("data", "" + data.getNowStandard());
      data.setPass(passSet);
      dataList.add(data);
      data = null;
      nowSet = false;
      }
      break;
     }
     eventType = parser.next();
      }
   return dataList;
}

 

-----------log---------

 

08-28 14:40:26.207: E/dd(20999): Soap Created
08-28 14:40:26.309: E/dd(20999): envelope
08-28 14:40:26.317: E/dd(20999): request
08-28 14:40:26.317: E/dd(20999): HttpTransportSE
08-28 14:40:26.317: E/dd(20999): HttpTransportSE2
 
하고 로그가 더이상 뜨지않습니다.
프릴레온 (140 포인트) 님이 2013년 8월 28일 질문

1개의 답변

0 추천
SOAP 통신방식쪽은 문외한이라 잘 모르는데..

위의 소스가 안드로이드소스?인가요 IIS 쪽 소스인가요?

자바소스인거 보면 안드로이드 내부 소스같은데.

보안상 안드로이드디바이스(실제폰) 에서 외부DB 로의 다이렉트 접근은 막혀있습니다.

CUBRID DB 같은경우는 된다는 경우도 듣긴했지만.

예) 안드로이드 소스 내 JDBC 라이브러리를 넣어 DB 바로 접근 불가능.

 

웹서버를 한개 중간에 두고. 안드로이드는 HTTP 전송 방식으로 접근하는식...이 맞을겁니다.
AND chobo (4,690 포인트) 님이 2013년 8월 28일 답변
이제 봤네요 ㅎ 소스코드 문제가 아니라 xml을 만드는 웹주소를 외부에서 못들어가는거였네요 ㅎㅎ
...