2013-01-01 2 views
0

지난 며칠 동안이 질문에 대한 변이를 물어 보았습니다. 나는 이해하지 못하거나 적당한 연결을하고 있지 않다. 그래서 나는 어느 길 위에 있어야 하는지를 이해하지 못하고 정말로 좌절감을 느끼고있다.완전히 잃어버린 웹 서비스를 호출하려고 시도합니다.

나는 XAMLX WCF 워크 플로 서비스를 개발하고 내 Windows 클라이언트는 그것과 잘 상호 작용합니다. 나는 안드로이드와 자바, 그리고 기본적으로 NOOB입니다. 내 서비스는 BasicHttpBinding을 사용하며 요청에 두 개의 문자열 값 (uid & pwd)이 필요합니다. 응답은 단순히 문자열입니다.

이제 안드로이드에서 나는 완전히 잃어버린다. AsyncTask를 사용하기 위해 읽었습니다. 중요한 문제가 있고 RoboSpice를 사용한다고 들었습니다. RoboSpice를 보면 아주 견고하지만 매우 까다로운 학습 곡선이됩니다. LoopJ를 사용하는 것이 뻣뻣한 학습 곡선이라고 들었습니다. 처음 시작할 때 더 쉬울 것입니다. JSON과 예를 사용하기를 원하는 사람들을 거기에 던져 넣으십시오. 나는 분명히 길을 잃었다.

는 그래서 서로 다른 방향을 많이 뽑아되었다. 나는 그것이 비동기 적이기 때문에 UI 스레드를 잠그지 않고 견고한 강력한 솔루션을 얻고 싶습니다.하지만 지금은 서비스와 상호 작용하는 아기 단계가 동 기적으로 고무 될 것입니다. 가 서비스에 요청을 보내기 : 여기

내 기본이다. 응용 프로그램을 일시 중지/루프 시키십시오. 진행 막대가 멋지지만 멈추지 않는 간단한 루프는 지금은 괜찮을 것입니다. 응답을 수신하고 처리를 계속합니다.

이 내가 간단 것이라고 생각 .NET에서 나를 위해 매우 간단합니다. 가을 전에 자랑 스러움이 오는 것을 보여주기 위해갑니다.

TIA JB


직접 질문

내 영업 이익 몇 가지 암시 적 질문이 주석 한 바와 같이. 왜냐하면 나는 무엇을 물어야할지 모르기 때문입니다. 이제 AsynchTask로 가보겠습니다. 그걸 내 아기 단계라고 부르 자. 여기 내 질문은 : 가 어떻게 내가 요청을 채울 값을 연결합니까? .NET에서 나는 요청이 기대하는 것과 일치하는 객체를 생성 할 것이다. 그래서 내 개체에는 UserName 속성과 Password 속성이 있습니다. obj.UserName = "Joe"와 같은 값을 할당합니다. 그런 다음 서비스 작업을 호출하고 obj를 전달합니다.

가 나는 적절한 라이브러리를 사용하고 확인하려면 어떻게

? 나는 AsyncTask가 아파치 Http 클라이언트 라이브러리를 사용한다는 것을 읽었다. OK 나는 그것이 단지를 얻는 것을 google한다. 그리고 명백하게 그것은 삶의 끝이다. 하지만 여전히 최신 버전을 다운로드하여 내 lib 폴더에 넣으십시오. 그렇지만 사용하지 않아도되는 org.apache.http.HttpResponse를 가져올 수 있기 때문에 필요하지 않았습니다. 더 오래된 것 또는 최신.

** 마지막으로 앱이 내 서비스 컴퓨터의 로그에는 표시되지 않지만 앱이 일시 중지되도록하려면 어떻게해야합니까? 내 코드가 실행되는 동안 내 코드가 계속 실행되고 도달하면 충돌합니다. 서비스에서 데이터를 필요로하는 지점 .....하지만 거기에는 없습니다. 진행률 표시 줄은 꿀벌 무릎 것입니다.

public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> 
{ 
private static final String serviceUrl = "http://www.serviceurl.com/service.xamlx"; 

@Override 
protected String doInBackground(String... params) 
{ 

    try 
    { 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpPut putRequest = new HttpPut(serviceUrl); 
     putRequest.setHeader("Content-type", "text/plain"); 
     putRequest.setHeader("Accept", "text/plain"); 
      putRequest.setEntity(new StringEntity(params[0])); //This one is connected to my first question. How do I get the proper associations for the operations contract. 
      HttpResponse response = client.execute(putRequest); 
      InputStream content = response.getEntity().getContent(); 
     BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
     String result = ""; 
     String s = ""; 
     while ((s = buffer.readLine()) != null) 
     { 
      result += s; 
     } 
     return result; 

    } 
    catch (UnsupportedEncodingException e) 
    { 
     Log.e("AsyncOperationFailed", e.getMessage()); 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) 
    { 
     Log.e("AsyncOperationFailed", e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) 
    { 
     Log.e("AsyncOperationFailed", e.getMessage()); 
     e.printStackTrace(); 
    } 
    return null; 

} 

protected void onPostExecute(String result) 
{ 
    Log.d("MESSAGE", result); 
} 

}

내가 같이이 전화 : 더 많은 정보가 필요하면

new AsyncHttpRequestManager().execute("joe","asdf"); 

나는 기꺼이 게시 할 예정입니다

다음은 구현을위한 내 코드입니다.

+0

네트워크 작업은 다른 스레드에서 수행해야합니다. 그래서 asynctask를 사용하는 것이 가능합니다. 나는 주로 자신의 쓰레드를 사용하여 네트워크 작업을 handdlle하고 broadcast receiverbto를 사용하여 UI를 업데이트한다. – Tobrun

+0

"AsyncTask를 사용하기 위해 읽었습니다. 중요한 문제가 있다고 들었습니다."중요한 문제는 무엇입니까? AsyncTask는 UI를 업데이트하려고하지만 HTTP 바인딩에 사용하는 경우 까다로울 수 있습니다. 그런 다음 콜백 또는 브로드 캐스트를 사용하여 UI를로드하는 것이 표준 방법입니다. 그 외에, 당신의 구체적인 질문은 무엇입니까? 귀하의 게시물에 많은 암묵적인 질문이있는 것 같습니다. – Simon

+1

방금 ​​다른 질문을 읽었습니다. 나의 개인적인 충고는 모든 것을 "선반에서"벗어나려고 노력하는 것이다. 기본적인 프레임 워크가 당신이 뭔가를 성취 할 수 없을 때 써드 파티 라이브러리에만 의존하십시오. 이 질문은 도움이 될 수 있습니다. http://stackoverflow.com/questions/3505930/make-an-http-request-with-android – Simon

답변

0

한 번에 한 가지 질문 만하면됩니다. SO가 설계되고 작동되는 방식입니다. HTTP 인증

http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html

일예를 들어

HttpClient client = new HttpClient(); 
client.getParams().setAuthenticationPreemptive(true); 
Credentials defaultcreds = new UsernamePasswordCredentials("username", "password"); 
client.getState().setCredentials(new AuthScope("myhost", 80, AuthScope.ANY_REALM), defaultcreds); 

Asynctask에는 Android 라이브러리의 일부인 외부 라이브러리가 필요하지 않습니다. HTTPClient와 Asynctask에 대해 혼동하지 마십시오. Asyntask는 일반 클래스로, 블로킹을 피하기 위해 기본 UI 스레드와는 별도의 스레드에서 백그라운드 처리를 호출하기위한 클래스입니다. Asynctask를 사용하여 웹 요청을 처리하는 것을 고려하고 있지만 어떤 방식 으로든 연결되어 있지는 않습니다.

"내 앱에 데이터를 반환하는 방법"에 대한 질문은 개별적으로 제기하는 것이 가장 좋지만 본질적으로 순차적으로 생각하고 있습니다. 앱이 일시 중지되어서는 안됩니다. 이 방법을 적절하게 처리하기 위해 진행 대화 상자가 여러 가지 방법이 있습니다.

+0

한 가지 충분한 질문. 어디에?????? 서비스 요청 계약에 필요한 값을 전달합니까? 예를 들어, 내 OP에서 어떤 라인을/어떤 서비스가 검색하고 되돌려 보낼 데이터를 알 수 있도록 내 요청 parms가 전송 되는가 ?? – GPGVM

+0

... 아니면 AsyncTask로 처리 할 수 ​​없습니까? – GPGVM

관련 문제