簡體   English   中英

AsyncTask/doInBackground 未執行

[英]AsyncTask/doInBackground not executing

我正在嘗試創建一個查詢貓圖像站點的應用程序,如果 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);
        }
    }
}

嘗試在第二個 while 循環中將!=null更改為==null

此外,您只需要在第一個 while 循環中while(on)

讓我知道是否有任何變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM