ImageView не отображает jpg, хранящийся на моем телефоне

Я большой любитель в этом, поэтому я заранее извиняюсь, если это обсуждалось раньше, и я не использовал правильные условия поиска, чтобы найти свой ответ. Любая помощь приветствуется.

Я пытаюсь сделать очень простое приложение с кнопкой «Назад», кнопкой «Далее», файлом изображения и подписью для каждого изображения, причем кнопки используются для перехода от одной пары изображение/заголовок к следующей или назад. Все изображения находятся в папке «Изображения» в главном каталоге телефона, все подписи представляют собой последовательно пронумерованные текстовые строки.

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

jpg пронумерованы от 0 до 25, простые имена файлов (0.jpg 1.jpg и т. д.). Я сделал один, который работал на Android 2.3, но не могу понять его для 4.4.4.

Я установил свой первоначальный TextView для отображения результатов Environment.getExternalStorageDirectory(), надеясь, что это позволит правильно указать путь к моему файлу. Я пробовал с этой командой и с текстом возвращаемого пути к файлу, как показано в моих // комментариях в коде. К сожалению, ни один из них не работал. Комментарии беспорядочные, потому что я новичок в этом и просто сохранял для себя возможные варианты кода.

Я использовал bitmapDrawable и путь к файлу /sdcard/ в моей версии, которая работала на моем более раннем Android. И я прочитал около 15-20 из этих вопросов imageView, пробуя разные решения, но пока безуспешно.

Я надеюсь, что этой информации достаточно. Если кто-то может мне помочь, я был бы очень признателен.

public class MainActivity extends ActionBarActivity {
ImageView image;
Button next02, back02;
TextView output01;
int test = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    output01 = (TextView) findViewById(R.id.output);
    next02 = (Button) findViewById(R.id.next);
    next02.setOnClickListener(advance01);
    back02 = (Button) findViewById(R.id.back);
    back02.setOnClickListener(retreat01);
    output01.setText("Test");
    ImageView image01 = (ImageView) findViewById(R.id.picture);

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 3;

    String myJPGPath = Environment.getExternalStorageDirectory() + "/Pictures/00.JPG";
    Bitmap d = BitmapFactory.decodeFile(myJPGPath);
    image01.setImageBitmap(d);
    output01.setText(myJPGPath);

//        String myJpgPath = Environment.getExternalStorageDirectory().toString() + "/0.jpg";
//        String myJpgPath = "/storage/emulated/0/Pictures/0.jpg";
//        File myfile = new File(myJpgPath);
//        output01.setText(myJpgPath);
//        BitmapDrawable d = new BitmapDrawable(getResources(), myJpgPath);
//        image01.setImageDrawable(d);
//        Bitmap d = BitmapFactory.decodeFile(myfile.getAbsolutePath());
//        Bitmap d = BitmapFactory.decodeFile("/storage/emulated/0/0.jpg");
//        image01.setImageBitmap(d);
}
public OnClickListener advance01 = new OnClickListener() {
    public void onClick (View v) {
        test++;
        if (test == 1) {
            output01.setText(text1);

К сожалению, вот logcat - похоже, у меня проблема с разрешениями, но изображение не настроено только для чтения. Есть еще несколько проблем - может быть, я просто начну с нуля:

01-03 10:16:55.892  16614-16614/com.test.test I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
01-03 10:16:55.892  16614-16614/com.test.test W/dalvikvm﹕ VFY: unable to resolve virtual method 11346: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
01-03 10:16:55.892  16614-16614/com.test.test D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
01-03 10:16:55.893  16614-16614/com.test.test I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
01-03 10:16:55.893  16614-16614/com.test.test W/dalvikvm﹕ VFY: unable to resolve virtual method 11352: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
01-03 10:16:55.893  16614-16614/com.test.test D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
01-03 10:16:55.894  16614-16614/com.test.test I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
01-03 10:16:55.894  16614-16614/com.test.test W/dalvikvm﹕ VFY: unable to resolve virtual method 9040: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
01-03 10:16:55.894  16614-16614/com.test.test D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e
01-03 10:16:55.899  16614-16614/com.test.test I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
01-03 10:16:55.899  16614-16614/com.test.test W/dalvikvm﹕ VFY: unable to resolve virtual method 364: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
01-03 10:16:55.900  16614-16614/com.test.test D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
01-03 10:16:55.900  16614-16614/com.test.test I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
01-03 10:16:55.900  16614-16614/com.test.test W/dalvikvm﹕ VFY: unable to resolve virtual method 386: Landroid/content/res/TypedArray;.getType (I)I
01-03 10:16:55.900  16614-16614/com.test.test D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
01-03 10:16:55.934  16614-16614/com.test.test E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/0.jpg: open failed: EACCES (Permission denied)
01-03 10:16:56.015  16614-16614/com.test.test I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:381>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_KK_2.7_RB1.04.04.04.007.066_msm8960_KK_2.7_RB1__release_AU ()
OpenGL ES Shader Compiler Version: 17.01.12.SPL
Build Date: 09/11/14 Thu
Local Branch: mybranch4451390
Remote Branch: quic/kk_2.7_rb1.43
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_KK_2.7_RB1.04.04.04.007.066 + 73685fa + 87c0666 + c4bc670 + 6154422 + 594ea9d +  NOTHING
01-03 10:16:56.062  16614-16614/com.test.test D/OpenGLRenderer﹕ Enabling debug mode 0

person MFox    schedule 03.01.2015    source источник
comment
Размер должен быть слишком большим. Уменьшите его размер, а затем отобразите его.   -  person Tushar Gogna    schedule 03.01.2015
comment
Спасибо, Генри - добавлен logcat, похоже, проблема в правах доступа к файлу (но не только для чтения). Я прочитаю об этом. Psy Duck — я уменьшил размер файла соответствующих изображений до менее 1 МБ, прежде чем избежать проблем с этим, когда я начал — думаю, мне нужно уменьшить размер?   -  person MFox    schedule 03.01.2015


Ответы (2)


Используйте этот код, чтобы получить путь к вашему JPG в папке «Изображения»:

String myJPGPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath()+"/0.jpg";

Кроме того, за исключением некоторых SD-карт, файловая система Android чувствительна к регистру. Таким образом, "0.JPG" и "0.jpg" не одно и то же. Убедитесь, что вы точно соответствуете имени файла.

person samgak    schedule 03.01.2015

Вы должны использовать Environment.getExternalStorageDirectory().getAbsolutePath(), чтобы получить полный путь к вашей SD-карте.

Попробуй это:

 String myJPGPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/00.JPG";
person max59    schedule 03.01.2015