gpt4 book ai didi

java - Android:在 Asynctask 中发送通知 -> 崩溃

转载 作者:行者123 更新时间:2023-12-01 08:54:07 26 4
gpt4 key购买 nike

我希望扩展 BroadcastReceiver 的类首先使用 jsoup 读取网站,然后(检查某些内容,然后)发送通知。因为 jsoup 部分需要 AsyncTask,所以我猜通知代码需要位于 AsyncTask onPostExecute 部分,但应用程序在 给出的时间崩溃闹钟日历代码。

如果通知代码不在扩展 AsyncTask 的类中,扩展BroadcastReceiver 的类中的代码将起作用。

现在这是NotificationClass的代码:

public class NotificationClass extends BroadcastReceiver{

Context specialContext;
int MID = 1;
long when = System.currentTimeMillis();
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

new loadText().execute();
}
public class loadText extends AsyncTask<Void, Void, Void>
{
String siteText;

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

Connection.Response res = null;
try {
res = Jsoup.connect("http://www.hpg-speyer.de/vertretungsplan/") // Link der Hauptseite, wo auch der Login ist
.data("authid", "22101999AzaKur", "authpw", "451d28") // Hier wären dann die Daten eingetragen
.method(Connection.Method.POST)
.execute();
} catch (Exception e) {
e.printStackTrace();
}

try {
Document doc = res.parse();
} catch (Exception e) {
e.printStackTrace();
}
String sessionId = res.cookie("PHPSESSID"); // Name des Cookies


Document doc2 = null;
try {
doc2 = Jsoup.connect("http://www.hpg-speyer.de/vertretungsplan/") // das wäre der Link zu den Feldern
.cookie("PHPSESSID", sessionId)
.get();
siteText = doc2.text();
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);

NotificationManager notificationManager = (NotificationManager) specialContext
.getSystemService(Context.NOTIFICATION_SERVICE);

Intent notificationIntent = new Intent(specialContext, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(specialContext, 0,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder mNotifyBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(
specialContext).setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Alarm Fired")
.setContentText("Events To be PErformed").setSound(alarmSound)
.setAutoCancel(true).setWhen(when)
.setContentIntent(pendingIntent)
.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});

if (siteText.contains("something")) {
notificationManager.notify(MID, mNotifyBuilder.build());
MID++;
}
}
}}

来自 logcat:

02-11 12:47:40.626 5413-5413/? I/art: Not late-enabling -Xcheck:jni (already on)
02-11 12:47:40.626 5413-5413/? W/art: Unexpected CPU variant for X86 using defaults: x86
02-11 12:47:40.708 5413-5413/de.kurt.vertretungsplan W/System: ClassLoader referenced unknown path: /data/app/de.kurt.vertretungsplan-1/lib/x86
02-11 12:47:40.711 5413-5413/de.kurt.vertretungsplan I/InstantRun: Instant Run Runtime started. Android package is de.kurt.vertretungsplan, real application class is null.
02-11 12:47:40.988 5413-5413/de.kurt.vertretungsplan W/System: ClassLoader referenced unknown path: /data/app/de.kurt.vertretungsplan-1/lib/x86
02-11 12:47:41.061 5413-5413/de.kurt.vertretungsplan W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
02-11 12:47:41.125 5413-5445/de.kurt.vertretungsplan D/NetworkSecurityConfig: No Network Security Config specified, using platform default
02-11 12:47:41.218 5413-5447/de.kurt.vertretungsplan I/OpenGLRenderer: Initialized EGL, version 1.4
02-11 12:47:41.218 5413-5447/de.kurt.vertretungsplan D/OpenGLRenderer: Swap behavior 1
02-11 12:47:41.248 5413-5447/de.kurt.vertretungsplan E/EGL_emulation: tid 5447: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
02-11 12:47:41.248 5413-5447/de.kurt.vertretungsplan W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x9c73fe80, error=EGL_BAD_MATCH

我如何注意到崩溃:

我将日历的时间设置为相对接近的时间,然后运行该应用程序,并在它在虚拟设备上弹出并观察后将其关闭。此方法在没有 AsyncTask 的情况下工作,也没有显示消息:“HPG Vertretungsplan 已停止”,但有通知。

提前致谢。

最佳答案

您的specialContext尚未分配。在onReceive中将specialContext分配给传入上下文

public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

specialContext=context;
new loadText().execute();}

关于java - Android:在 Asynctask 中发送通知 -> 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42175336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com