Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:按钮onClick在3秒后反应_Java_Android - Fatal编程技术网

Java 安卓:按钮onClick在3秒后反应

Java 安卓:按钮onClick在3秒后反应,java,android,Java,Android,我正在为UAC的一个项目编写一个小应用程序,在onClick事件后显示ProgressDialog时遇到了麻烦 基本上,当在我的活动中调用onClick时,我启动一个异步任务,在onPreExecute中启动progressDialog,在onPostExecute中再次取消它 btnSearch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v

我正在为UAC的一个项目编写一个小应用程序,在onClick事件后显示ProgressDialog时遇到了麻烦

基本上,当在我的活动中调用onClick时,我启动一个异步任务,在onPreExecute中启动progressDialog,在onPostExecute中再次取消它

btnSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ArrayList<Recipe> recipes = null;
            try {
                ParsedElement x = new ParsedElement(v.getContext());
                Object[] params = new Object[2];
                params[0] = txtSearch.getText().toString();
                params[1] = v;
                recipes = (ArrayList<Recipe>) x.execute(params).get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }

            Intent switchToDisplayPage = new Intent(SearchActivity.this, UIGenerator.class);
            Bundle params = new Bundle();
            params.putParcelableArrayList("recipes", recipes);
            switchToDisplayPage.putExtras(params);
            startActivity(switchToDisplayPage);
        }
    });
btnSearch.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ArrayList配方=空;
试一试{
ParsedElement x=新的ParsedElement(v.getContext());
Object[]params=新对象[2];
params[0]=txtSearch.getText().toString();
参数[1]=v;
recipes=(ArrayList)x.execute(params.get();
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}
Intent switchToDisplayPage=新的Intent(SearchActivity.this、UIGenerator.class);
Bundle params=新Bundle();
参数putParcelableArrayList(“配方”,配方);
切换到DisplayPage.putExtras(参数);
startActivity(切换到显示页面);
}
});
我遇到的问题是,单击“nothing”(无)按钮大约3秒钟。我已经看过安卓显示器了,当我点击这个按钮时,发现CPU的使用率最高为40%

ProgressDialog progressDialog;
Context v;

public ParsedElement(Context v) {
    this.v = v;

}

protected void onPreExecute() {
    super.onPreExecute();
    progressDialog = new ProgressDialog(v);
    progressDialog.setTitle("Downloading");
    progressDialog.setMessage("Recipes are loading...");
    progressDialog.setIndeterminate(false);
    progressDialog.show();

}


@Override
protected Object doInBackground(Object[] params) {


    String searchString = (String) params[0];
    View v = (View) params[1];

    ArrayList<Recipe> recipes = new ArrayList<>();
    try {
        System.out.println(System.currentTimeMillis());
        ArrayList<URL> single = new ArrayList<>();
        single.add(new URL(Constants.baseSearchURL + searchString));
        Document mainDocument = (Downloaders.getDocumentFromURL(single)).get(0);
        Elements mainElements = mainDocument.select("div.img_wrap img[src]");
        ArrayList<URL> urls = new ArrayList<>();


        for (int i = 1; i <= 10; i++) {
            urls.add(new URL(Constants.baseSearchURL + searchString +
                    Constants.pageString + Integer.toString(i)));
        }

        ArrayList<Document> tempDocument = Downloaders.getDocumentFromURL(urls);

        for (Document docu : tempDocument) {
            Elements tempElement = docu.select("div.img_wrap img[src]");
            for (Element a : tempElement) {
                mainElements.add(a);
            }
        }

        for (Element link : mainElements) {
            recipes.add(new Recipe(link.attr("title"), link.attr("abs:src")));
        }

    } catch (IOException ex) {
        ex.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return recipes;
}

@Override
protected void onPostExecute(Object aVoid) {

    super.onPostExecute(aVoid);
    progressDialog.dismiss();
}
ProgressDialog;
背景五;
公共语法删除(上下文v){
这个,v=v;
}
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(v);
progressDialog.setTitle(“下载”);
setMessage(“正在加载配方…”);
progressDialog.setUndeterminate(false);
progressDialog.show();
}
@凌驾
受保护对象doInBackground(对象[]参数){
字符串搜索字符串=(字符串)参数[0];
视图v=(视图)参数[1];
ArrayList recipes=新的ArrayList();
试一试{
System.out.println(System.currentTimeMillis());
ArrayList single=新的ArrayList();
添加(新URL(Constants.baseSearchURL+searchString));
documentmaindocument=(Downloaders.getDocumentFromURL(single)).get(0);
Elements mainElements=mainDocument。选择(“div.img\u wrap img[src]”;
ArrayList URL=新的ArrayList();
对于(inti=1;i我发现了问题。
是这样的:

recipes = (ArrayList<Recipe>) x.execute(params).get();
recipes=(ArrayList)x.execute(params.get();
虽然我启动了一个异步任务,但主线程正在等待任务的返回值。这就是主线程被阻塞的原因

我没有将值返回给activity,而是执行了任务并在doInBackground中继续

希望这对某人有帮助