Download image from mysql

N

newperson

Neues Mitglied
1
Hallo, ich übe gerade die ListView mit php und mysql.
Ich habe eine ListView mit TextView und ImageView.
Meine Frage: Wie kann ich Bilder von der Datenbank(mysql) auf ein Int-Array schreiben und die dann auf eine Listview anzeigen lassen.
Zurzeit funktioniert: Die Texte werden auf der ListView angezeigt, bzw. die Bilder die im Array sind. Leider sind das nur Standard Bilder die im R.drawable. gespeichert sind und nicht von der Datenbank die jeweils zum Text gehören. Das heißt es fehlt noch, dass die Bilder noch downloadet werden müssen.

Leider weiß ich nicht wie man so etwas umsetzt.
Danke für die HILFE

Source-Code:
Code:
private String id;

private ListView listView;

int[] flags = new int[]{
        R.drawable.hose,
        R.drawable.leiberl
};

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

    Intent intent = getIntent();
    id = intent.getStringExtra(Config.EMP_ID);

    listView = (ListView) findViewById(R.id.lvDetails);
    listView.setOnItemClickListener(this);
    getJSON();
}

private void getJSON() {
    class GetEmployee extends AsyncTask<String, Void, String> {
        ProgressDialog loading;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(PersonActivity.this, "Fetching...", "Wait...", false, false);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            showThings(s);
        }

        @Override
        protected String doInBackground(String... params) {
            RequestHandler rh = new RequestHandler();
            String s = rh.sendGetRequestParam(Config.URL_GET_DETAILS, id);
            return s;
        }
    }
    GetEmployee ge = new GetEmployee();
    ge.execute();
}

private void showThings(String json) {
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY_DETAILS);

        for (int i = 0; i < result.length(); i++) {
            JSONObject jo = result.getJSONObject(i);
            String id = jo.getString(Config.TAG_ID);
            String name = jo.getString(Config.TAG_NAME);       
            //String image = jo.getString(Config.TAG_IMAGE);

            HashMap<String, String> employees = new HashMap<>();
            employees.put(Config.TAG_ID, id);
            employees.put(Config.TAG_NAME, name);

            employees.put("flag", Integer.toString(flags[i]));

            list.add(employees);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    ListAdapter adapter = new SimpleAdapter(
            PersonActivity.this, list, R.layout.list_star,
            new String[]{Config.TAG_ID, Config.TAG_NAME, "flag"},
            new int[]{R.id.id, R.id.tvName, R.id.ivSache});

    listView.setAdapter(adapter);
}
 
Bilder sind in einer Datenbank als Byte-Arrays (nicht int Arrays) in irgendeinem Format (jpg,png,gif,whatever) irgendwie codiert (base64,wwwurl,...) hinterlegt. Du holst die Daten aus einem JSON Objekt als String ab? Dann wird dieser String wohl erst dekodiert werden müssen. Das Byte-Array, was da rauskommt, kannst du mittels BitmapFactory.decodeByteArray() in eine Bitmap umwandeln.
 
ok danke für die Info, ich werde es probieren. Wenn ich eine Frage hab, darf ich mich melden? #DieGoldeneMitte
 
Wenn du eine Folgefrage hast, ist sie in diesem Thread gut aufgehoben.
 
Noch eine Anmerkung zu Performance der Datenbank.
Wenn es möglich ist, sollte man Bilder in einer Datenbank nicht speichern. Bilder sind relativ große Objekte, weshalb Datenbankoperationen mit den Bildern sehr langsam sind.
Die bessere Variante ist, dass man die Bilder einfach in einem Verzeichnis speichert, und in die Datenbank nur den Pfad zu den Bildern.
 
Danke für die Antwort #markus.tullius
Ich hab in meiner Datenbank nur die Verzeichnisse angeben. Hatte gar nicht auf was anderes gedacht. :)
 
  • Danke
Reaktionen: markus.tullius

Ähnliche Themen

M
Antworten
4
Aufrufe
1.171
swa00
swa00
5
Antworten
0
Aufrufe
1.143
586920
5
B
Antworten
4
Aufrufe
486
bb321
B
Zurück
Oben Unten