Слайдер изображений, использующий Pager-view с растровым изображением, не работает - PullRequest
0 голосов
/ 18 сентября 2018

Уважаемые все, я использую PagerView для создания изображений слайдера, и все пошло хорошо, если я использую изображения URL и массив строк из нарисованных изображений.

Но когда я использую файл, хранящийся в каталоге моего приложения, это не такработа, вы увидите мой код здесь.java

package com.samcotec.pager2;

import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    ArrayList<Bitmap> bitmap = new ArrayList<Bitmap>();
    ViewPager viewPager;
    BitmapPagerAdapter bitmapPagerAdapter;
    String imgPath;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgPath = "/data/data/" + this.getPackageName() + "/" + "quranIMG/";

        File savefliepath = new File(imgPath);
        if(!savefliepath.exists()){
            System.out.println("file not exist: " + imgPath);
            savefliepath.mkdir();
        }else{
            //System.out.println("file exist: " + imgPath);
        }


        final AssetManager assetManager = getAssets();

        String[] list;
        InputStream f;
        String FileName;
        String URLPATH = "http://192.168.100.12/quran/";
        Integer StartFrom = 100;
        Integer EndTo = 150;

        for(int i = StartFrom; i <= EndTo; i++){
            FileName = "a-("+i+").png";
            File savefile = new File(imgPath + FileName);
            if(!savefile.exists()){
//                        tools.copyAssets(assetManager,Path);
                DownloadTask downloadTask = new DownloadTask(URLPATH,imgPath,FileName);

            }else{

            }
//            imgList.add(i);

        }

        // TODO : we must check internet connection if its ok
        for (int i = StartFrom; i<EndTo; i++){
            String b = imgPath + "a-("+i+").png";
           // System.out.println("file exists" + b);
            FileInputStream fiStream;
            File imgFile = new  File(getFilesDir(), b);

            Bitmap bit;
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 4;

            if(imgFile.exists()){
                try{
                    fiStream    = MainActivity.this.openFileInput(b);
                    bit = BitmapFactory.decodeStream(fiStream);
                    bitmap.add(bit);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

            }else{
                DownloadTask downloadTask = new DownloadTask(URLPATH,imgPath,"a-("+i+").png");
                File imgFile1 = new  File(getFilesDir(), b);
                if(imgFile1.exists()) {
                    try{
                        fiStream    = MainActivity.this.openFileInput(b);
                        bit = BitmapFactory.decodeStream(fiStream);
                        bitmap.add(bit);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }else{
                    bit = null;
                }
            }
        }

        viewPager = (ViewPager) findViewById(R.id.viewPager);

        bitmapPagerAdapter = new BitmapPagerAdapter(MainActivity.this,bitmap);

        viewPager.setAdapter(bitmapPagerAdapter);
    }
}

Я использую некоторые инструменты для загрузки файлов и их сохранения в imgPath. Изображения загружаются и сохраняются, и это не проблема, но проблема в том, что

bitmap.size();

всегда пуста, аПриложение разбилось

1 Ответ

0 голосов
/ 19 сентября 2018

Проблема в моей DownloadTask, а не в самом коде.

Я решаю ее, изменив задачу загрузки на код:

package com.samcotec.pager2;

import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class DownloadTask {

    public DownloadTask(final String url, final String savePath, final String saveName) {
        new Thread(new Runnable() {
            public void run() {
                try {

                    System.out.println(url+saveName);
                    URL sourceUrl = new URL(url+saveName);
                    URLConnection conn = sourceUrl.openConnection();
                    conn.connect();
                    InputStream inputStream = conn.getInputStream();

                    int fileSize = conn.getContentLength();

                    File savefilepath = new File(savePath);
                    if (!savefilepath.exists()) {
                        savefilepath.mkdirs();
                    }
                    File savefile = new File(savePath+saveName);
                    if (savefile.exists()) {
                        savefile.delete();
                    }
                    savefile.createNewFile();

                    FileOutputStream outputStream = new FileOutputStream(savePath+saveName, true);

                    byte[] buffer = new byte[1024];
                    int readCount = 0;
                    int readNum = 0;
                    int prevPercent = 0;

                    while (readCount < fileSize && readNum != -1) {
                        readNum = inputStream.read(buffer);
                        if (readNum > -1) {
                            outputStream.write(buffer, 0, readNum);
                            readCount = readCount + readNum;

                            int percent = (int) (readCount * 100 / fileSize);
                            if (percent > prevPercent) {
                                System.out.println(percent);
                                //Toast.makeText(LoadPage.MY_CONTEXT,percent,Toast.LENGTH_LONG);
                                prevPercent = percent;
                            }
                        }
                    }
                    outputStream.flush();
                    outputStream.close();
                    inputStream.close();
                    //Thread.sleep(50);


                } catch (Exception e) {
                    System.out.println( e);
                }
            }
        }).start();
    }



}
...