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:
Auslesen der Bitmap und Einfügen des Items in die ListView (getPartyPic Methode):
Die Zuweisung der Bitmap im CustomAdapter:
Mein php-Skript zum Auslesen der Bitmap:
Gruß
Jan
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: