NativeScript / NativeScript/plugins
[@nativescript/background-http] error Context.startForegroundService() did not then call Service.startForeground()
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- TypeScript
- Star
- 206
- Fork
- 123
- Merge trung bình
- 2 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 1
Mô tả
Hello,
We are using @nativescript/background-http on NativeScript with Angular to upload photos, web API .net Core 3.1
We have this error
System.err: An uncaught Exception occurred on "main" thread.
System.err: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{6fabfc7 u0 it.openweb.next2u/net.gotev.uploadservice.UploadService}
System.err:
System.err: StackTrace:
System.err: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord{6fabfc7 u0 it.openweb.next2u/net.gotev.uploadservice.UploadService}
System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2052)
System.err: at android.os.Handler.dispatchMessage(Handler.java:107)
System.err: at android.os.Looper.loop(Looper.java:214)
System.err: at android.app.ActivityThread.main(ActivityThread.java:7710)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Version numbers:
-CLI 7.1.1
"@nativescript/android": "7.0.1",
"@nativescript/ios": "7.1.0",
"@nativescript/background-http": "^5.0.1",
package.json:
"dependencies": {
"@angular/animations": "~11.0.5",
"@angular/common": "~11.0.5",
"@angular/compiler": "~11.0.5",
"@angular/core": "~11.0.5",
"@angular/forms": "~11.0.5",
"@angular/platform-browser": "~11.0.5",
"@angular/platform-browser-dynamic": "~11.0.5",
"@angular/router": "~11.0.5",
"@nativescript/angular": "~11.0.0",
"@nativescript/background-http": "^5.0.1",
"@nativescript/core": "^7.1.0",
"@nativescript/theme": "~3.0.1",
"@nativescript/types": "^7.1.0",
"@nativescript/webpack": "^4.0.0",
"jwt-decode": "^2.2.0",
"nativescript-ui-sidedrawer": "~9.0.3",
"reflect-metadata": "~0.1.13",
"rxjs": "~6.6.3",
"zone.js": "~0.11.3"
},
"devDependencies": {
"@angular/compiler-cli": "~11.0.5",
"@nativescript/android": "7.0.1",
"@nativescript/ios": "7.1.0",
"@ngtools/webpack": "~11.0.5",
"codelyzer": "~6.0.0",
"node-sass": "^4.14.1",
"tslint": "~6.1.3",
"typescript": "~4.0.0"
}
UploadFile.ts
public _uploadFile() {
const name = this.file.substr(this.file.lastIndexOf('/') + 1);
const description = `${name}`;
const request = {
url: `${this.avatarUrl}`,
method: 'POST',
utf8: true,
headers: {
"Content-Type": "multipart/form-data",
"File-Name": name
},
description: description,
androidAutoDeleteAfterUpload: false,
androidNotificationTitle: 'Uploading Product Image',
androidDisplayNotificationProgress:true
};
let task: Task;
let lastEvent = '';
const params = [
{ name: 'test', value: 'value' },
{ name: 'testInt', value: 10 },
{ name: 'bool', value: true },
{ name: 'fileToUpload', filename: this.file, mimeType: 'image/jpeg' },
];
task = this.session.multipartUpload(params, request);
function onEvent(e) {
if (lastEvent !== e.eventName) {
// suppress all repeating progress events and only show the first one
lastEvent = e.eventName;
} else {
return;
}
this.events.push({
eventTitle: e.eventName + ' ' + e.object.description,
eventData: JSON.stringify({
error: e.error ? e.error.toString() : e.error,
currentBytes: e.currentBytes,
totalBytes: e.totalBytes,
body: e.data,
responseCode: e.responseCode,
}),
});
}
task.on('progress', onEvent.bind(this));
task.on('error', onEvent.bind(this));
task.on('responded', onEvent.bind(this));
task.on('complete', onEvent.bind(this));
lastEvent = '';
this.tasks.push(task);
}
web API .net Core 3
[HttpPost("attachement")]
public async Task<ActionResult> UploadAttachement([FromForm] IFormFile file)
{
var attachement = new modelProfile
{
ContentType = file.ContentType,
name = file.FileName
};
using (var stream = file.OpenReadStream())
{
attachement.content = new byte[file.Length];
await stream.ReadAsync(attachement.content, 0, (int)file.Length);
};
await serviceUpload.uploadProfile(attachement);
return Ok();
}
Can you please help with this error and the way to fix it?
Thank you
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với UploadFile.ts và lệnh gọi session.multipartUpload, sau đó lần theo Android UploadService được nêu trong stack trace. Tái hiện quá trình upload bằng các phiên bản NativeScript và plugin được liệt kê, đồng thời xác định vòng đời của foreground service bị lỗi ở đâu; hoàn tất có nghĩa là quá trình upload không còn phát sinh RemoteServiceException.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- android, angular, typescript
- Lĩnh vực
- mobile
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100