1

画像ギャラリーに問題があります。Dreddik の TouchImageGallery Libraryを使用しています。SDカードフォルダから画像を読み込もうとしています。インターネットの URL から画像を読み込もうとすると動作しますが、SD カードから画像パスを渡すと動作しません。

問題はファイル パスである可能性があると思いますが、これに関する情報は見つかりませんでした。私は「生ペースト」テクニックを使用していますが、それは間違っていると思います。

以下にコードを貼り付けます。

主な活動:

public class GaleriaMainActivity extends Activity {

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

        String []rutas = {"/storage/sdcard0/bola2.jpg", 
            "/storage/sdcard0/DCIM/Camera/1334835629645.jpg" };

        Intent i = new Intent(this, CargadoDesdeSd.class);
        i.putExtra("src", rutas);
        startActivity(i);

}

}

そして、これはメインから画像のパスを取得するクラスです:

public class CargadoDesdeSd extends Activity {

private String[] imgPaths;
private GalleryViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cargado_desde_sd);
imgPaths = getIntent().getExtras().getStringArray("src");
Log.d("debug", imgPaths[0]);

String []urls = getIntent().getExtras().getStringArray("src");
//  String []urls = {
//                "http://www.holafamilias.com/wp-content/uploads/2010/11/hola-11.jpg",
//                "http://cs407831.userapi.com/v4078f31207/18fe/4Tz8av5Hlvo.jpg",
//                "http://cs407831.userapi.com/v407831207/1906/oxoP6URjFtA.jpg",
//                "http://cs407831.userapi.com/v407831207/190e/2Sz9A774hUc.jpg",
//                "http://cs407831.userapi.com/v407831207/1916/Ua52RjnKqjk.jpg",
//                "http://cs407831.userapi.com/v407831207/191e/QEQE83Ok0lQ.jpg"};

    List<String> items = new ArrayList<String>();
    Collections.addAll(items, urls);

    UrlPagerAdapter pagerAdapter = new UrlPagerAdapter(this, items);
    pagerAdapter.setOnItemChangeListener(new OnItemChangeListener()
    {
        @Override
        public void onItemChange(int currentPosition)
        {
            Log.d("debug","Current item is " + currentPosition);
        }
    });

    mViewPager = (GalleryViewPager)findViewById(R.id.viewer);
    mViewPager.setOffscreenPageLimit(3);
    mViewPager.setAdapter(pagerAdapter);
}
}

なぜこれが起こるのか知っている人はいますか?

どうもありがとう!!!:)

EDIT これはlogcatが言うことです:

05-30 12:02:37.085: W/System.err(24489): java.net.MalformedURLException: Protocol not found: /storage/sdcard0/DCIM/Camera/1338473970511.jpg
05-30 12:02:37.085: W/System.err(24489):    at java.net.URL.<init>(URL.java:178)
05-30 12:02:37.085: W/System.err(24489):    at java.net.URL.<init>(URL.java:127)
05-30 12:02:37.085: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:87)
05-30 12:02:37.090: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:1)
05-30 12:02:37.100: W/System.err(24489):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 12:02:37.100: W/System.err(24489):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-30 12:02:37.100: W/System.err(24489):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-30 12:02:37.100: W/System.err(24489):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 12:02:37.100: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-30 12:02:37.100: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-30 12:02:37.100: W/System.err(24489):    at java.lang.Thread.run(Thread.java:856)
05-30 12:02:37.100: D/STATUSBAR-NotificationService(2119): enqueueToast()
05-30 12:02:37.105: W/System.err(24489): java.net.MalformedURLException: Protocol not found: /storage/sdcard0/DCIM/Camera/1334835629645.jpg
05-30 12:02:37.105: W/System.err(24489):    at java.net.URL.<init>(URL.java:178)
05-30 12:02:37.105: W/System.err(24489):    at java.net.URL.<init>(URL.java:127)
05-30 12:02:37.105: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:87)
05-30 12:02:37.105: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:1)
05-30 12:02:37.105: W/System.err(24489):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-30 12:02:37.105: W/System.err(24489):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-30 12:02:37.105: W/System.err(24489):    at java.lang.Thread.run(Thread.java:856)
05-30 12:02:37.105: W/System.err(24489): java.net.MalformedURLException: Protocol not found: /storage/sdcard0/DCIM/Camera/bola2.jpg
05-30 12:02:37.105: W/System.err(24489):    at java.net.URL.<init>(URL.java:178)
05-30 12:02:37.105: W/System.err(24489):    at java.net.URL.<init>(URL.java:127)
05-30 12:02:37.105: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:87)
05-30 12:02:37.105: W/System.err(24489):    at ru.truba.touchgallery.TouchView.UrlTouchImageView$ImageLoadTask.doInBackground(UrlTouchImageView.java:1)
05-30 12:02:37.105: W/System.err(24489):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-30 12:02:37.105: W/System.err(24489):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-30 12:02:37.105: W/System.err(24489):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-30 12:02:37.105: W/System.err(24489):    at java.lang.Thread.run(Thread.java:856)

編集: URLイメージローダークラスからSDカードイメージをロードしようとしていたことに気付きました。私はそれを再方向付けしました、そして今、これは以下の私の主な活動コードショーです:

    /*
*Fields
*/

final String TAG= "debug";
private GalleryViewPager mViewPager;
private String[] imgPaths;


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgPaths = getIntent().getExtras().getStringArray("src");
Log.d(TAG, imgPaths[0]);
List<String> items = new ArrayList<String>();
int readLimit = 16 * 1024;
try {
for (String filename : imgPaths) 
{
if (filename.matches(".+\\.jpg")) 
{
InputStream is = null;
try {
    is = new BufferedInputStream(new FileInputStream(new File(filename, "")), readLimit);
    is.mark(readLimit); 
    } catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
copy(is, new File(filename) );
items.add(filename);
}
}
} catch (IOException e) 
        {
            e.printStackTrace();
        }

FilePagerAdapter pagerAdapter = new FilePagerAdapter(this, items);
pagerAdapter.setOnItemChangeListener(new OnItemChangeListener()
{
    @Override
    public void onItemChange(int currentPosition)
    {
        Log.d(TAG, "Current item is " + currentPosition);
    }
});

mViewPager = (GalleryViewPager)findViewById(R.id.viewer);
mViewPager.setOffscreenPageLimit(3);
mViewPager.setAdapter(pagerAdapter);


public void copy(InputStream in, File dst) throws IOException 
{
    OutputStream out = new FileOutputStream(dst);
    // Transfer bytes from in to out
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();
}
}

実行時エラーはありませんが、デフォルトのエラー画像が表示され、必要な画像が表示されません:\

4

2 に答える 2