当前位置: 首页 > 知识库问答 >
问题:

Android/Java-异步任务完成时执行警报?

裴兴言
2023-03-14

当用户无法登录他们的帐户时,我正在尝试执行警报。也就是说,当我尝试使用下面的代码完成此操作时,我会抛出以下错误:

原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程[AsyncTask#1,5,main]内创建处理程序

我怎样才能解决这个问题?请参阅下面的代码。

登录活动

 private class MyNetwork extends AsyncTask<Void, Void, Void> {
       
      @Override
            protected Void doInBackground(Void... voids) {
    
                JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("username", "admin");
                    jsonObject.put("password", "test#5Q");
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
    
                OkHttpClient client = new OkHttpClient();
                MediaType JSON = MediaType.parse("application/json; charset=utf-8");
                // put your json here
                RequestBody body = RequestBody.create(JSON, jsonObject.toString());
                Request request = new Request.Builder()
                        .url("http://myurl.com/wp-json/wp/v2/custom-plugin/login")
                        .post(body)
                        .build();
    
                Response response = null;
                try {
                    response = client.newCall(request).execute();
                    String resStr = response.body().string();
                    Log.i("The response is", String.valueOf(response));
                    int responseCode = response.code();
                    Log.i("Check response code", String.valueOf(responseCode));
    
                    if (responseCode == 200) {
    
    
                        Log.i("We're logged in!", String.valueOf(responseCode));
    
                        Intent i = new Intent(LoginActivity.this, DashboardActivity.class);
                        startActivity(i);
    
    
                }
    
                    if (responseCode == 500) {
    
    
                        Log.i("User or pass incorrect.", String.valueOf(responseCode));
    
    
                        AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this).create();
                        alertDialog.setTitle("Oops!");
                        alertDialog.setMessage("Your username or password is incorrect. Please check your credentials and try again.");
                       
                        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                Toast.makeText(getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show();
                            }
                        });
    
    
                    }
    
                } catch (IOException e) {
                    e.printStackTrace();
    
                }
    
                return null;
            }

}

    public void launchDashboard (View v) {

       new MyNetwork().execute();

    }

共有1个答案

越昊穹
2023-03-14

我能够通过将我的AlertDialog包装在以下内容来修复上述错误:

 runOnUiThread(new Runnable() {
                        public void run() {

}
 类似资料:
  • 这是在一次Android采访中被问到的。有人问我是否可以从异步任务 1 的 doInBackground() 方法(让它成为 Task1)启动另一个异步任务(让它成为 Task2)。我浏览了文档,其中说了以下内容: 必须在UI线程上创建任务实例。 必须在 UI 线程上调用 execute(Params...)。 根据这些陈述,我认为从另一个任务的后台方法启动一个任务是不可能的。此外,async任务

  • 在Server程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web服务器中发送邮件。如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢。 Swoole提供了异步任务处理的功能,可以投递一个异步任务到TaskWorker进程池中执行,不影响当前请求的处理速度。 程序代码 基于第一个TCP服务器,只需要增加onTask和onFinish 2个事件回调函数即可。另外需要设置task

  • 我正在试验Python 3.4的asyncio模块。由于没有使用asyncio的MongoDB生产就绪包,我编写了一个小包装类,在执行器中执行所有mongo查询。这是包装: 我想异步执行插入,这意味着执行它们的协程不想等待执行完成。asyncio手册声明,所以我构造了这个测试脚本: 当我运行脚本时,我得到以下结果: 应该有一行指示mongo查询已完成。当我从这个协程而不是使用异步IO运行它时,我可

  • 有没有一种方法可以让发出数据,并且当它发出数据时(或者当它完成时)以异步方式使用该数据触发? 我的问题与此非常相似,但我试图异步调用Completable。 这是我试图实现的一个微不足道的例子: 我看到订阅映射中的Completable允许我以某种方式完成这项任务,但我不知道如何以正确的方式处理它(因为在活动中不调用此方法)。 非常感谢您的帮助,谢谢!

  • 本文向大家介绍C#异步执行任务的方法,包括了C#异步执行任务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#异步执行任务的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 这可能是一个更巧妙的问题,但我在ViewComponent类中有以下方法 所以我的问题是我应该采取什么方法?让异步在那里与警告无关,还是有一个解决方案/修复这个警告?它对我的项目有那么大的影响吗? 谢了!