AsyncTask 完成工作后如何删除警报对话框

2024-01-28

我相信我做得正确,在我调用执行的活动类中,出现警报对话框,然后加载数据,但警报对话框永远不会消失。这是我的 AsyncTask 代码:

接下来是我的活动代码。

public class Worker extends AsyncTask<URL, Integer, Long>{
private Activity ne;
private ProgressDialog progressDialog;
private Handler handler;


public Worker(Handler handler, Activity ne){
this.handler = handler;
this.ne = ne;

}

protected void onPreExecute() {
    progressDialog = ProgressDialog.show(ne,"", "Retrieving News Events", true);
}

protected void onProgressUpdate(Void... progress) {

}

protected void onPostExecute(Void result) {

    progressDialog.dismiss();
}

/* (non-Javadoc)
 * @see android.os.AsyncTask#doInBackground(Params[])
 */
@Override
protected Long doInBackground(URL... urls) {
HttpClient client = new DefaultHttpClient();
HttpGet get;

    try {
            get = new HttpGet(urls[0].toURI());
        ResponseHandler<String> response = new BasicResponseHandler();
        String responseBody = client.execute(get, response);


        String page = responseBody;

        Bundle data = new Bundle();

        data.putString("page",page);
        Message msg = new Message();
        msg.setData(data);

        handler.sendMessage(msg);

    }
    catch (Throwable t) {
        Log.d("UpdateNews", "PROBLEMS");
    }
return null;
}

}

public class NewsEvents extends ListActivity{
private URL JSONNewsEvents;
private ArrayList<NewsEvent> neList;
private ArrayList<String> keyWordList;
private Worker worker;
private TextView selection;
private ProgressDialog progressDialog;
static final int PROGRESS_DIALOG = 0;
public static final String KEYWORDS = "keywords";
private NewsEvents ne;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.newsevents);
    ne = this;
    neList = new ArrayList<NewsEvent>();
selection=(TextView)findViewById(R.id.selection);

    try {
    JSONNewsEvents = new URL(getString(R.string.jsonnewsevents));
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

    worker = new Worker(handler, this);

    setListAdapter(new IconicAdapter());
    getKeywords(); 
    worker.execute(JSONNewsEvents);


}

/**
 * @return
 */

public ArrayList<String> getKeywords(){
try {
    InputStream fi = openFileInput(KEYWORDS);

    if (fi!=null) {
        ObjectInputStream in = new ObjectInputStream(fi);
                keyWordList = (ArrayList<String>) in.readObject();
                in.close();
    }
}
catch (java.io.FileNotFoundException e) {
    // that's OK, we probably haven't created it yet
}
catch (Throwable t) {
    Toast
        .makeText(this, "Exception: "+t.toString(), Toast.LENGTH_LONG)
        .show();
}
if(keyWordList == null){
    keyWordList = new ArrayList<String>();
    return keyWordList;
}

return keyWordList;
}

public void onListItemClick(ListView parent, View v,
    int position, long id) {
startFullNewsEvent(neList.get(position));
}

/**
 * @param newsEvent
 */
public void startFullNewsEvent(NewsEvent ne) {
Intent intent = new Intent(this, FullNewsEvent.class);
intent.putExtra("ne", ne);
this.startActivity(intent);
finish();
}



private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        String page = msg.getData().getString("page");



        try {  
           JSONArray parseArray = new JSONArray(page);  

           for (int i = 0; i < parseArray.length(); i++) {  
               JSONObject jo = parseArray.getJSONObject(i);  

               String title = jo.getString("title");  

               String body =jo.getString("body");

               String pd = jo.getString("postDate");  

               String id = jo.getString("id");


               NewsEvent ne = new NewsEvent(title, pd , body, id);

               boolean unique = true;
               for(NewsEvent ne0 : neList){
               if(ne.getId().equals(ne0.getId())){
                  unique = false;
               }else{
                   unique = true;
               }
               }

               if(unique == true){
               neList.add(ne);
               }
           }  
          } catch (JSONException e) {  
           // TODO Auto-generated catch block  
           e.printStackTrace();  
          }
          ne.setListAdapter(new IconicAdapter());

    }
};

public class IconicAdapter extends ArrayAdapter<NewsEvent> {
IconicAdapter() {
    super(NewsEvents.this, R.layout.rownews, neList);
}

public View getView(int position, View convertView,ViewGroup parent) {
    LayoutInflater inflater=getLayoutInflater();

    View row=inflater.inflate(R.layout.rownews, parent, false);
    TextView label=(TextView)row.findViewById(R.id.label);
    ImageView image= (ImageView)row.findViewById(R.id.icon);

    String body = neList.get(position).getBody();
    body.replaceAll("\\<.*?>", "");
    String title = neList.get(position).getTitle();
    for(String s : keyWordList){
        if(body.contains(s) || body.contains(s.toLowerCase()) ||
            title.contains(s) || title.contains(s.toLowerCase())){
        neList.get(position).setInterested(true);
        }
    }

    if(neList.get(position).isInterested() == true){
        image.setImageResource(R.drawable.star);
    }


    label.setText(neList.get(position).getTitle());

    return(row);
}
}

}


首先更改您的 onPostExecute 以包含 @Override:

@Override
protected void onPostExecute(Void result) { 
  progressDialog.dismiss();
}

在您的类定义中包括:

public class Worker extends AsyncTask<Void, Void, Void>

第一个参数是 doInBackground 方法的输入类型,第二个参数是 onProgressUpdate 的输入类型,第三个参数是 onPostExecute 的输入类型和 doInBackground 的结果。

看起来您没有使用 doInBackground 方法的输入参数,因此只需将其更改为 Void... 并更改返回类型:

protected Void doInBackground(Void... paramArrayOfParams) { ... }

这有帮助吗?

Edit:

我看到您已更改代码以使用 doInBackground 的参数,因此类定义中的第一个参数是正确的。但是,尝试将 Void 作为最后两个参数。并将 doInBackground 的返回类型也更改为 Void。

像这样:

public class Worker extends AsyncTask<URL, Void, Void>{
private Activity ne;
private ProgressDialog progressDialog;
private Handler handler;

public Worker(Handler handler, Activity ne){
  this.handler = handler;
  this.ne = ne;

}

@Override
protected void onPreExecute() {
  progressDialog = ProgressDialog.show(ne,"", "Retrieving News Events", true);
}

protected void onProgressUpdate(Void... progress) {
}

@Override
protected void onPostExecute(Void result) {
  progressDialog.dismiss();
}

/* (non-Javadoc)
 * @see android.os.AsyncTask#doInBackground(Params[])
 */
@Override
protected Void doInBackground(URL... urls) {
  HttpClient client = new DefaultHttpClient();
  HttpGet get;

  try {
        get = new HttpGet(urls[0].toURI());
    ResponseHandler<String> response = new BasicResponseHandler();
    String responseBody = client.execute(get, response);


    String page = responseBody;

    Bundle data = new Bundle();

    data.putString("page",page);
    Message msg = new Message();
    msg.setData(data);

    handler.sendMessage(msg);

  }
  catch (Throwable t) {
    Log.d("UpdateNews", "PROBLEMS");
  }
  return null;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AsyncTask 完成工作后如何删除警报对话框 的相关文章

  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • 如何将安卓手机从睡眠状态唤醒?

    如何以编程方式将 Android 手机从睡眠状态唤醒 挂起至内存 我不想获取任何唤醒锁 这意味着手机在禁用 CPU 的情况下进入 真正的 睡眠状态 我想我可以使用某种RTC 实时时钟 机制 有人有例子吗 Thanks 为了让Activity
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来

随机推荐