2016-04-27 14 views
0

Ich arbeite an einem Android-Projekt, wo ich eine benutzerdefinierte ListView mit einem Bild auf der linken Seite verwenden.
Ich benutze Genymotion Emulator, der gut funktioniert. Das Bild wird perfekt dargestellt: Screenshot from Genymotion emulatorBild zeigt auf Emulator aber nicht auf echtem Gerät

Allerdings, wenn ich die App auf meinem Gerät (Huawei P8 Lite) verwende, wird nichts gezeigt: Screenshot from device

Ich habe versucht, die App auf meinem Gerät zu debuggen, der Bildpfad vorhanden ist (sonst würde sie die „kein Bild vorhanden“ statt sein) am ist: /storage/emulated/0/Pictures/JPEG_20160415_134349_-350854394.jpg
ich den Android-Gerät Monitor ging und das Bild vorhanden ist, aber auf einem etwas anderen Weg (mnt/shell/statt/storage /, aber ich glaube nicht, dass das das eigentliche Problem ist, oder?)
Ich habe keine "OutOfMemory" -Fehler oder einen anderen Fehler in der StackTrace.
Dies ist der Code verwende ich das Bild zeigen:

if(values.get(position).getImgList().size()==0){ 
     imageView.setImageResource(R.drawable.nopics); 
    } 
    else { 
    //getImg() return the path (string) of the first image in a ArrayList of path 
     imageView.setImageBitmap(values.get(position).getImg()); 
    } 

Ich bin mir ziemlich sicher, dass getImg() ein Bild zurück, wie ich die gleiche Methode verwenden, wenn ich das Bild zu einem Webservice senden. Der Webservice empfängt das Bild korrekt.
Ich habe auch den internen/externen Speicher in meinem Android Manifest lesen/schreiben.

EDIT: Ich habe das Layout-Code vergessen haben:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="horizontal"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="200px" 
    android:layout_height="200px" 
    android:layout_marginLeft="40px" 
    android:layout_marginRight="10px" 
    android:layout_marginTop="4px"> 
</ImageView> 
</RelativeLayout> 
<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
<TextView 
    android:id="@+id/label" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="70px" 
    android:layout_marginLeft="10px" 
    android:text="@+id/label" 
    android:layout_marginRight="@dimen/activity_horizontal_margin" 
    android:textSize="48px" > 
</TextView> 

<ImageButton 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:id="@+id/croixrouge" 
    android:src="@drawable/croixrouge" 
    android:layout_alignBottom="@+id/label" 
    android:layout_marginBottom="50px" 
    android:layout_alignEnd="@+id/label" /> 

    <ImageButton 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:id="@+id/option" 
     android:src="@drawable/modif" 
     android:layout_alignTop="@+id/croixrouge" 
     android:layout_toStartOf="@+id/croixrouge" 
     android:layout_marginRight="5px"/> 

    <ImageButton 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:id="@+id/refresh" 
     android:src="@drawable/refreshpurple" 
     android:layout_alignTop="@+id/option" 
     android:layout_toStartOf="@+id/option" 
     android:layout_marginRight="5px" /> 
</RelativeLayout> 
<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="10px" 
    android:id="@+id/sublabel" 
    android:text="@+id/sublabel" 
    android:layout_marginRight="@dimen/activity_horizontal_margin" 
    android:textSize="32px"/> 

</LinearLayout> 

</LinearLayout> 

getImg() Code:

public Bitmap getImg() { 
    if(imgList.size() !=0) { 
     Bitmap bmp = BitmapFactory.decodeFile(imgList.get(0)); 
     return bmp; 
    } 
    return null; 
} 

EDIT: Wie kann ich die Bildaufnahme: protected void onActivityResult (int requestCode, int Result, Absicht imageData) { super.onActivityResult (requestCode, resultCode, imageData);

switch (requestCode) { 
     case Define.ALBUM_REQUEST_CODE: 
      if (resultCode == RESULT_OK) { 
       path = imageData.getStringArrayListExtra(Define.INTENT_PATH); 
... 
      } 
    } 
} 

Und später:

r.setImgList(path); 

Könnte jemand bitte helfen Sie mir zu verstehen, warum das Bild nicht auf einem realen Gerät angezeigt wird?

+0

es nicht vielleicht diese Android passt versuchen: Scaletype = „fitXY“ in Imageview –

+0

Was sind die api Ebenen des Emulators und dem Gerät? – nvi9

+0

Das scaleType-Zeug hat nicht funktioniert, danke aber. Emulator und Gerät sind beide API 21, Gerät läuft auf Android 5.0.1 und Emulator auf 5.0.0 – Nevi

Antwort

0

Dies geschieht, wenn Sie versuchen, das Bild mit höheren Auflösungen in ImageView zu laden. Sie müssen es auf mehrere Größen skalieren (ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), um mehrere Bildschirmauflösungen und -abmessungen zu unterstützen.

Bitte auf diesen link

0

Sie diese Hilfsmethode verwenden, um den tatsächlichen Pfad des Bildes zu erhalten. Übergeben Sie in Ihrer Methode getImg() den mit der Hilfsmethode erstellten Pfad:

public Bitmap getImg() { 
    if(imgList.size() != 0) { 
     Uri uri = Uri.parse(imgList.get(0)); 
     String path = getRealPathFromUri(getActivity(), uri) 
     Bitmap bmp = BitmapFactory.decodeFile(path); 
     return bmp; 
    } 
    return null; 
} 

public String getRealPathFromURI(Context context, Uri uri) { 
    String path; 
    if ("content".equals(uri.getScheme())) { 
     path = getRealPathFromContentURI(context, uri); 
    } else if ("file".equals(uri.getScheme())) { 
     path = uri.getPath(); 
    } else { 
     path = uri.toString(); 
    } 
    return path; 
} 

private String getRealPathFromContentURI(Context context, Uri contentUri) { 
    if (contentUri == null) { 
     return null; 
    } 

    String[] proj = { MediaStore.Images.Media.DATA }; 
    CursorLoader loader = new CursorLoader(context, contentUri, proj, null, null, null); 
    Cursor cursor = loader.loadInBackground(); 

    if (cursor == null) { 
     return null; 
    } 

    int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
    if (column_index == -1) { 
     cursor.close(); 
     return null; 
    } 

    String path; 
    if (cursor.moveToFirst()) { 
     path = cursor.getString(column_index); 
    } else { 
     path = null; 
    } 

    cursor.close(); 
    return path; 
} 
+0

Danke für deine Antwort, aber das hat das Problem nicht gelöst. Auf dem Emulator funktioniert es (aber es rezise mein Bild, weiß nicht, warum) aber immer noch das gleiche Problem auf meinem Android-Gerät – Nevi

+0

Wie erhalten Sie den Bildpfad, der in Werte-Array gespeichert wird? – muazhud

+0

Verwenden Sie für Ihren Layout-Code immer dp-Wert nicht px, um die Größe konsistent zu machen in verschiedenen Android-Geräten. – muazhud

0

Das Problem wurde behoben!
Ich skalierte die Bitmap. Es scheint, als könnte es nicht auf den Bildschirm passen oder so ...

public Bitmap getImg() { 
    if(imgList.size() !=0) { 
     Bitmap bmp = BitmapFactory.decodeFile(imgList.get(0)); 
     int nh = (int) (bmp.getHeight() * (800.0/bmp.getWidth())); 
     Bitmap scaled = Bitmap.createScaledBitmap(bmp, 600, nh, true); 
     return scaled; 
    } 
    return null; 
} 

Vielen Dank für Ihre Hilfe

Verwandte Themen