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

正在执行的任务

淳于新
2023-03-14

我正在尝试创建一个应用程序,用于查询cat图像的站点,如果JSON ID是唯一的,则将其保存到android设备,然后从设备以幻灯片格式显示它们。尽管如此,我的AsyncTask似乎并没有实际执行。调试器确认已建立网络连接,并且不会向我反馈任何错误,所以我不知道代码出了什么问题。希望有人能帮忙!代码如下:

package com.example.lab2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.content.AsyncTaskLoader;

import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;
import android.widget.ProgressBar;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Array;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        CatImages req = new CatImages();
        req.execute();
    }

    class CatImages extends AsyncTask<String, Integer, String> {

        ArrayList<String> ids = new ArrayList<String>();

        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        Bitmap images;
        String id;
        ImageView imageView = findViewById(R.id.imageView);
        ProgressBar progressBar = findViewById(R.id.progressBar);
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
        boolean on = true;

        @Override
        protected String doInBackground(String... strings) {

            while(on == true) {
                try {
                    URL url = new URL("https://cataas.com/cat?json=true");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    InputStream response = urlConnection.getInputStream();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(response, "UTF-8"), 8);
                    StringBuilder builder = new StringBuilder();

                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        builder.append(line + "\n");
                    }
                    String result = builder.toString();
                    JSONObject image = new JSONObject(result);
                    id = image.getString("id");
                    ids.add(id);

                    for (String element : ids) {
                        if (element.contains(id)) {

                            return null;

                        } else {

                            images = BitmapFactory.decodeStream(response);
                            File path = new File(directory, id + ".jpg");
                            FileOutputStream outputStream = new FileOutputStream(path);
                            images.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
                            outputStream.flush();
                            outputStream.close();
                            ids.add(id);

                        }
                    }

                    for (int i = 0; i < 100; i++) {
                        try {
                            publishProgress(i);
                            Thread.sleep(30);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }


                } catch (IOException | JSONException e) {
                    return null;
                }

            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);

            for(String element : ids) {
                if(element.contains(id)) {

                    File openedPic = new File(directory, id + ".jpg");
                    try {
                        Bitmap opener = BitmapFactory.decodeStream(new FileInputStream(openedPic));
                        imageView.setImageBitmap(opener);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }

                }
            }
        }

        @Override
        protected void onPostExecute(String fromDoInBackground) {
            super.onPostExecute(fromDoInBackground);
        }
    }
}

共有1个答案

尤夕
2023-03-14

尝试将!=null更改为==null在您的第二个while循环中。

此外,您只需在第一个while循环中使用while(on)。

如果有什么变化,请告诉我。

 类似资料:
  • 问题内容: 我正在使用python 2.7,我有一些看起来像这样的代码: 此处唯一的依赖项如下:dependent1需要等待任务1-3,Dependent2需要等待任务4-6,而dependent3需要等待依赖项1-2 …以下是可以的:首先运行全部6个任务并行,然后是前两个从属。 我希望尽可能多的任务并行运行,我已经在Google上搜索了一些模块,但是我希望避免使用外部库,并且不确定队列线程技术如

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我正在使用gradle构建我的项目,使用以下build.gradle文件: 当我输入gradle build命令时,我希望gradle在生成后执行一个任务。 我在网上找到了一个,我尝试了多种方法都失败了。 如果你知道怎么做,请告诉我。

  • 我需要找到一种在java中并行执行任务(依赖和独立)的方法。 任务A和任务C可以独立运行 任务B取决于任务A的输出 我查了java。util。并发Future和Fork/Join,但看起来我们无法向任务添加依赖项。 有人能告诉我正确的Java API吗。

  • 在更新到3.1.2之后,我面临着很多问题,其中之一就是 任务的执行失败:应用程序:transformClassesWithShrinkResForDebug。

  • 任务被卡住了,不启动代码是在一个270M的大数据集上执行带有筛选条件的交叉联接。对于大表270M和小表(100000),我已经将分区增加到16000个,我已经将其转换为广播变量 我已经为该作业添加了spark ui, 所以我必须减少分区,增加执行器,有什么想法吗 [50per completed ui 1][4][50per completed ui 2][5][1]:https://i.stac