Bitmap aus MySQL Datenbank wird nicht runtergeladen

D

DrLiightninG

Neues Mitglied
1
Hallo zusammen,
ich habe in meiner MySQL Datenbank einige Datensätze. Diese beinhalten jeweils eine zuvor hochgeladene Bitmap in Form eines Blobs. Das Hochladen scheint demnach zu funktionieren.
Nun wollte ich die Bitmaps allerdings auch wieder runterladen und in einer ListView anzeigen lassen. Dabei hatte ich als Erstes eine NullPointerException. Diese habe ich mir dadurch begründet, dass nur zwei von fünf Items eine Bitmap in ihrem Datensatz hatten. Ich habe also eine if-Abfrage eingefügt, ob die Bitmap nicht gleich "null" ist.
Nun bleibt zwar die NullPointerException weg, jedoch werden auch die Bitmaps nicht geladen, welche eigentlich geladen werden sollten. Der Fehler muss demnach irgendwo im Download Vorgang liegen.
Ich habe mir die Ausgabe des php-Skripts mal im Browser angesehen. Dort wird die Bitmap als langer String ausgegeben. In der getPartyPic Methode ist das Ergebnis allerdings immer "null". Doch wieso? Ich denke dass genau hier der Fehler liegt.

Hier meine Codeausschnitte:

Alle Daten aus dem Datensatz wurden bereits als Strings, bzw. Integer per JSON ausgelesen. Es fehlt nur noch die Bitmap. Das Item für die ListView wird aber dennoch schon erstellt:
Code:
try {
                        jsonObject = new JSONObject(json_string);
                        jsonArray = jsonObject.getJSONArray("server_response");
                        while (count <= jsonArray.length()) {
                            JSONObject JO = jsonArray.getJSONObject(count);
                            partyName = JO.getString("party_name");
                            clubName = JO.getString("club_name");
                            veranstalter = JO.getString("veranstalter");
                            datum = JO.getString("datum");
                            zeit = JO.getString("zeit");
                            adresse = JO.getString("adresse");
                            stadt = JO.getString("stadt");
                            plz = JO.getString("plz");
                            ticketverkauf = JO.getString("ticketverkauf");
                            age = JO.getString("age");
                            id = JO.getInt("id");
                            zusagen = JO.getInt("zusagen");
                            PartyItem partyItem;
                       
                            if(favList.contains(id)) {
                                partyItem = new PartyItem(id, partyName, clubName, zeit, adresse,true,veranstalter,datum,stadt,plz,ticketverkauf,age,zusagen);
                                this.getPartyPic(partyItem, partyAdapter); //Hier wird die Bitmap runtergeladen und anschließend das Item in die ListView eingefügt
                           
                                count++;
                            }

Auslesen der Bitmap und Einfügen des Items in die ListView (getPartyPic Methode):
Code:
public void getPartyPic(final PartyItem pItem, final PartyAdapter pAdapter) {
            String id = "" + pItem.getPartyID();
            class GetImage extends AsyncTask<String,Void,Bitmap>{
                ProgressDialog loading;

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                }

                @Override
                protected void onPostExecute(Bitmap b) {
                    super.onPostExecute(b);
                    pItem.setPartyPic(b);
                    Toast.makeText(getActivity().getApplicationContext(), "Bitmap: " + b, Toast.LENGTH_SHORT).show(); //Hier ist die Ausgabe immer "Bitmap: null"
                    pAdapter.add(pItem);
                }

                @Override
                protected Bitmap doInBackground(String... params) {
                    String id = params[0];
                    String add = ".../party_bild.php?id="+id;
                    URL url = null;
                    Bitmap image = null;
                    try {
                        url = new URL(add);
                        image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return image;
                }
            }

            GetImage gi = new GetImage();
            gi.execute(id);
        }

Die Zuweisung der Bitmap im CustomAdapter:
Code:
@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row;
        row = convertView;
        final ItemHolder itemHolder;
        final PartyItem partyItem = (PartyItem) this.getItem(position);
        if(row == null) {
            LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.list_item_new,parent,false);

            itemHolder = new ItemHolder();
            itemHolder.name_tv = (TextView) row.findViewById(R.id.party_name);
            itemHolder.adresse_tv = (TextView) row.findViewById(R.id.party_adresse);
            itemHolder.zeit_tv = (TextView) row.findViewById(R.id.party_zeit);
            itemHolder.club_tv = (TextView) row.findViewById(R.id.party_club);
            itemHolder.addfav_b = (ImageView) row.findViewById(R.id.fav_b);
            itemHolder.age_pic = (ImageView) row.findViewById(R.id.age_pic);
            itemHolder.party_pic = (ImageView) row.findViewById(R.id.profile_pic);

            row.setTag(itemHolder);

        }
        else {
            itemHolder = (ItemHolder) row.getTag();

        }

        itemHolder.item = partyItem;

        Bitmap d = itemHolder.item.getPartyPic();
        if(d != null) { //Anscheinend immer null, da Toast nie ausgegeben wird und keine Bitmaps angezeigt werden
            Toast.makeText(getContext(), "Pic gefunden", Toast.LENGTH_SHORT).show();
            int nh = (int) (d.getHeight() * (512.0 / d.getWidth()));
            Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
            itemHolder.party_pic.setImageBitmap(scaled);
        }

Mein php-Skript zum Auslesen der Bitmap:
PHP:
<?php
if($_SERVER['REQUEST_METHOD']=='GET'){
$id = $_GET['id'];
$sql = "select image from partydaten where id = '$id'";
require_once('init.php'); //Vorhanden und funktionsfähig
$r = mysqli_query($con,$sql);
$result = mysqli_fetch_array($r);
header('content-type: image/jpeg');
echo base64_decode($result['image']);
mysqli_close($con);
}else{
echo "Error";
}
?>

Gruß
Jan
 
Zuletzt bearbeitet:

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
H
Antworten
2
Aufrufe
1.309
Hcman
H
B
Antworten
0
Aufrufe
688
basementmedia
B
Zurück
Oben Unten