mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
http request for android reworked
This commit is contained in:
10
declarations.android.d.ts
vendored
10
declarations.android.d.ts
vendored
@@ -352,6 +352,16 @@ declare module com {
|
||||
}
|
||||
|
||||
export module async {
|
||||
|
||||
export module callback {
|
||||
export class DataCallback {
|
||||
constructor(params: any);
|
||||
}
|
||||
export class CompletedCallback {
|
||||
constructor(params: any);
|
||||
}
|
||||
}
|
||||
|
||||
export module future {
|
||||
export class FutureCallback {
|
||||
constructor(context: any);
|
||||
|
||||
@@ -12,84 +12,78 @@ export function request(options: http.HttpRequestOptions): promises.Promise<http
|
||||
|
||||
try {
|
||||
|
||||
var isImage = options.url.match(/\.(jpeg|jpg|gif|png)$/i) != null;
|
||||
|
||||
var context = require("application").android.context;
|
||||
|
||||
if (isImage && options.method && options.method.toLowerCase() == "get") {
|
||||
var request = com.koushikdutta.ion.Ion.with(context, options.url);
|
||||
request.asBitmap().setCallback(new com.koushikdutta.async.future.FutureCallback({
|
||||
onCompleted: function (error, data) {
|
||||
if (error) {
|
||||
d.reject(new Error(error.toString()));
|
||||
} else {
|
||||
d.resolve({
|
||||
content: {
|
||||
raw: data,
|
||||
toString: () => { return null },
|
||||
toJSON: () => { return null },
|
||||
toImage: () => { return require("image-source").fromNativeSource(data); }
|
||||
},
|
||||
statusCode: 0,
|
||||
headers: {}
|
||||
});
|
||||
}
|
||||
}
|
||||
}));
|
||||
var request = com.koushikdutta.ion.Ion.getDefault(context).configure().getAsyncHttpRequestFactory()
|
||||
.createAsyncHttpRequest(java.net.URI.create(options.url), options.method, null);
|
||||
|
||||
if (options.headers) {
|
||||
for (var key in options.headers) {
|
||||
request.addHeader(key, options.headers[key])
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof options.timeout == "number") {
|
||||
request.setTimeout(options.timeout);
|
||||
}
|
||||
|
||||
if (typeof options.content == "string") {
|
||||
request.setBody(new com.koushikdutta.async.http.body.StringBody(options.content));
|
||||
}
|
||||
else {
|
||||
var request = com.koushikdutta.ion.Ion.getDefault(context).configure().getAsyncHttpRequestFactory()
|
||||
.createAsyncHttpRequest(java.net.URI.create(options.url), options.method, null);
|
||||
|
||||
if (options.headers) {
|
||||
for (var key in options.headers) {
|
||||
request.addHeader(key, options.headers[key])
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof options.timeout == "number") {
|
||||
request.setTimeout(options.timeout);
|
||||
}
|
||||
|
||||
if (typeof options.content == "string") {
|
||||
request.setBody(new com.koushikdutta.async.http.body.StringBody(options.content));
|
||||
}
|
||||
else {
|
||||
// TODO: How to transfer everything else?
|
||||
}
|
||||
|
||||
var StringCallback = com.koushikdutta.async.http.AsyncHttpClient.StringCallback.extends({
|
||||
onCompleted: function (error, response, result) {
|
||||
if (error) {
|
||||
d.reject(new Error(error.toString()));
|
||||
} else {
|
||||
var headers = {};
|
||||
var rawHeaders = response.getHeaders().headers;
|
||||
|
||||
for (var i = 0, l = rawHeaders.length(); i < l; i++) {
|
||||
var key = rawHeaders.getFieldName(i);
|
||||
headers[key] = rawHeaders.getValue(i);
|
||||
}
|
||||
|
||||
d.resolve({
|
||||
content: {
|
||||
raw: result,
|
||||
toString: () => { return result },
|
||||
toJSON: () => { return JSON.parse(result) },
|
||||
toImage: () => {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
statusCode: rawHeaders.getResponseCode(),
|
||||
headers: headers
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
com.koushikdutta.async.http.AsyncHttpClient.getDefaultInstance().execute(request, new StringCallback());
|
||||
// TODO: How to transfer everything else?
|
||||
}
|
||||
|
||||
var callback = new com.koushikdutta.async.http.callback.HttpConnectCallback({
|
||||
onConnectCompleted: function (error, response) {
|
||||
if (error) {
|
||||
d.reject(new Error(error.toString()));
|
||||
} else {
|
||||
var headers = {};
|
||||
var rawHeaders = response.getHeaders().headers;
|
||||
|
||||
for (var i = 0, l = rawHeaders.length(); i < l; i++) {
|
||||
var key = rawHeaders.getFieldName(i);
|
||||
headers[key] = rawHeaders.getValue(i);
|
||||
}
|
||||
|
||||
var outputStream = new java.io.ByteArrayOutputStream();
|
||||
|
||||
var dataCallback = new com.koushikdutta.async.callback.DataCallback({
|
||||
onDataAvailable: function (emitter, byteBufferList) {
|
||||
var bb = byteBufferList.getAll();
|
||||
outputStream.write(bb.array(), bb.arrayOffset() + bb.position(), bb.remaining());
|
||||
}
|
||||
});
|
||||
|
||||
response.setDataCallback(dataCallback);
|
||||
|
||||
var endCallback = new com.koushikdutta.async.callback.CompletedCallback({
|
||||
onCompleted: function (error) {
|
||||
d.resolve({
|
||||
content: {
|
||||
raw: response,
|
||||
toString: () => { return outputStream.toString(); },
|
||||
toJSON: () => { return JSON.parse(outputStream.toString()); },
|
||||
toImage: () => {
|
||||
var bytes = outputStream.toByteArray();
|
||||
var bitmap = android.graphics.BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
|
||||
return require("image-source").fromNativeSource(bitmap);
|
||||
}
|
||||
},
|
||||
statusCode: rawHeaders.getResponseCode(),
|
||||
headers: headers
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
response.setEndCallback(endCallback);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
com.koushikdutta.async.http.AsyncHttpClient.getDefaultInstance().execute(request, callback);
|
||||
|
||||
} catch (ex) {
|
||||
d.reject(ex);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user