를 사용하여 호스트 API_REST_HOST의 실제 전화, 이런 식으로하게 executeRequest라는 하나의 방법 (플리커의 휴식 API에 대한 "api.flickr.com"와 같은 값이 될 수 있습니다 API_REST_HOST을.는 HTTP와 포트가 추가됩니다)
private void executeRequest(HttpGet get, ResponseHandler handler) throws IOException {
HttpEntity entity = null;
HttpHost host = new HttpHost(API_REST_HOST, 80, "http");
try {
final HttpResponse response = mClient.execute(host, get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
entity = response.getEntity();
final InputStream in = entity.getContent();
handler.handleResponse(in);
}
} catch (ConnectTimeoutException e) {
throw new ConnectTimeoutException();
} catch (ClientProtocolException e) {
throw new ClientProtocolException();
} catch (IOException e) {
e.printStackTrace();
throw new IOException();
}
finally {
if (entity != null) {
try {
entity.consumeContent();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
전화 이러한 방법으로 여기에서이 API는 :
final HttpGet get = new HttpGet(uri.build().toString());
executeRequest(get, new ResponseHandler() {
public void handleResponse(InputStream in) throws IOException {
parseResponse(in, new ResponseParser() {
public void parseResponse(XmlPullParser parser)
throws XmlPullParserException, IOException {
parseToken(parser, token, userId);
}
});
}
});
당신의 URI는 다음과 같이 구성되는 경우 :
final Uri.Builder builder = new Uri.Builder();
builder.path(ANY_PATH_AHEAD_OF_THE_BASE_URL_IF_REQD);
builder.appendQueryParameter(PARAM_KEY, PARAM_VALUE);
,
귀하의 mClient 클래스 수준 변수로이 방법
private HttpClient mClient;
그리고 마지막으로 당신의 parseResponse이 방법으로 수행 할 수 있습니다를 선언 (XML 데이터를 구문 분석하고 싶은 말은)
private void parseResponse(InputStream in, ResponseParser responseParser) throws IOException {
final XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(new InputStreamReader(in));
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG &&
type != XmlPullParser.END_DOCUMENT) {
// Empty
}
if (type != XmlPullParser.START_TAG) {
throw new InflateException(parser.getPositionDescription()
+ ": No start tag found!");
}
String name = parser.getName();
if (RESPONSE_TAG_RSP.equals(name)) {
final String value = parser.getAttributeValue(null, RESPONSE_ATTR_STAT);
if (!RESPONSE_STATUS_OK.equals(value)) {
throw new IOException("Wrong status: " + value);
}
}
responseParser.parseResponse(parser);
} catch (XmlPullParserException e) {
final IOException ioe = new IOException("Could not parse the response");
ioe.initCause(e);
throw ioe;
}
}
이 코드는 처리한다 모든 가능한 예외에 대해 설명하고 HTTP 연결에서 입력 스트림에서 오는 응답을 올바르게 구문 분석하는 방법을 보여줍니다.
이미 알고 계시 겠지만 UI 스레드가 아닌 별도의 스레드에서 사용해야합니다. That 's it :)
@blackbelt 나는이 코드를 AsyncTask에서 사용합니다. – nixan
@LalitPoptani 프록시를 사용하지 못했습니다. 안드로이드 전화에서 APN 설정에 프록시가 있으면 어떨까요? – nixan
@nixan 그 점에 대해 미안 ... : ( –