2014-03-27

ARM med Genymotion

Om man kör den senaste versionen av Android-emulatorn Genymotion - som jag rekommenderar då den är både snabb och gratis - så kan man stöta på patrull om man försöker använda sig av bibliotek som är specifikt kompilerade för ARM-processorn (som de flesta mobila enheter använder). Detta händer på Windows, vet inte hur det är i Äpplevärlden.

Felmedelandet i Logcat lyder "Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE". Jag stötte på detta då jag använde ARM-kompilerad kod skriven i C++ i ett skanningsbibliotek, men det kan bli samma visa om man utvecklar spel.

Man fixar detta genom att ladda ner följande filer: http://www.mirrorcreator.com/files/0ZIO8PME/Genymotion-ARM-Translation_v1.1.zip_links
Sen drar man filerna till Genymotions emulatorfönster (emulatorn måste alltså vara startad) och släpper dem på emulatorns "skärm". Man får en fråga om man vill flasha sin emulator, svara OK, vänta, och starta om emulatorn. Nu skall det funka att slänga på ARM-kompilerade bibliotek på din emulator.

2014-01-10

Blob problem med MySql och Spring MVC

Jag hade problem med en bild som är lagrad i en MySql databas och var lagrad med datatypen Blob.
Problemet var att bilden vägrade visa sig på sidan. Lösningen var att importera rätt paket och att mappa rätt url i din jsp sida.

Istället för java.jdbc.sql.Blob; skulle det vara java.sql.Blob;

Hela lösningen;

1. Spara ner bilden med datatypen Blob i din domänklass :

@Column(name = "image")
@Lob
private Blob image;

2. Hämta den blob objektet genom att hämta hela objektet som den ligger i mitt fall i en Person :

@Override
public Person getPerson(int personId) {
return (Person)session.getCurrentSession().get(Person.class, personId);
}

3. Hämta den via en service och lägg upp den i din Controller.

@RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
public String viewImages(@PathVariable int id, HttpServletResponse response) throws SQLException {

Person person = service.getPerson(id);
Blob blob = person.getImage();

try {
         
            OutputStream out = response.getOutputStream();
            response.setContentType("image/JPEG");
            IOUtils.copy(person.getImage().getBinaryStream(), out);
            log.trace(person.getImage().getBytes(1, (int) blob.length()));
            out.flush();
            out.close();
       
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
       
       
        return null;
    }


Obs bilder måste ha en egen kontroller eftersom din jsp behöver en <img src="url">.

4. Lägg till den i din .jsp

<td><img src= "<%= request.getContextPath() %>/image/${person.id}.html"/></td>

Slutresultatet :