X10 mini pro er ikke gode venner med Logcat

2011-05-31 15:56
Den X10 mini pro jeg tester på nægter at give mig output i Logcat'en i Eclipse. Af samme grund har jeg aldrig rigtigt brugt telefonen til test. Det eneste man ser er:
logcat read: Invalid argument
Men nu havde jeg en bug, som kun gjaldt for X10 mini pro.
Jeg har opgivet at få log via Eclipse, men kan (for det meste) få logdata ved at bruge følgende kommandoer:
adb logcat -c
adb logcat -d
-c tømmer logcat'en, -d "dumper" loggen.

Underlig bug i java.util.Date på Android 1.6

2011-05-30 10:33
Jeg har lavet en Android app, som fungerer perfekt på Android 2.1 og 2.2. Men da jeg testede på en HTC Magic (Andrid 1.6) virkede intet og appen så ud til at fryse for til sidst at komme med "Force Close/Wait" dialogen.

Tager man et kig i Logcat'en, ser man dette:
05-30 10:06:29.359: INFO/Resources(1272): Loaded time zone names for en_US in 1147ms.
05-30 10:06:30.519: INFO/Resources(1272): Loaded time zone names for en_US in 1152ms.
05-30 10:06:30.959: DEBUG/dalvikvm(1272): GC freed 11832 objects / 630224 bytes in 113ms
05-30 10:06:31.799: INFO/Resources(1272): Loaded time zone names for en_US in 1254ms.
05-30 10:06:32.909: INFO/Resources(1272): Loaded time zone names for en_US in 1103ms.
05-30 10:06:34.029: INFO/Resources(1272): Loaded time zone names for en_US in 1092ms.
05-30 10:06:34.429: DEBUG/dalvikvm(1272): GC freed 16045 objects / 698584 bytes in 112ms
05-30 10:06:35.189: DEBUG/dalvikvm(531): GC freed 117 objects / 5152 bytes in 1638ms
05-30 10:06:35.249: INFO/Resources(1272): Loaded time zone names for en_US in 1203ms.
05-30 10:06:36.359: INFO/Resources(1272): Loaded time zone names for en_US in 1088ms.
05-30 10:06:37.479: INFO/Resources(1272): Loaded time zone names for en_US in 1105ms.
05-30 10:06:37.869: DEBUG/dalvikvm(1272): GC freed 16038 objects / 694744 bytes in 106ms
05-30 10:06:38.699: INFO/Resources(1272): Loaded time zone names for en_US in 1205ms.
Der er mange spildte sekunder der. Det ser ud til at java.util.Date's toString() er årsagen (link: http://stackoverflow.com/quest...en-us or http://code.google.com/p/and...=1188.

Løsningen skulle være at bruge android.text.format.DateFormat. I mit har jeg Date i et JSONArray (kommer fra et API kald) og det ser ud til toString() bliver kaldt når Date bliver tilføjet JSONArray'et.
Opdatering 2011-05-31 14:44:
Her er min endelige løsning:
public class Date extends java.util.Date {

	private static final long serialVersionUID = -8661761295050677789L;
	
	public Date(){
		super();
	}
	
	public Date(long l){
		super(l);
	}
	
	@Override
	public String toString() {
		return "";
	}
	
	@Override
	public String toGMTString() {
		return "";
	}
	
	@Override
	public String toLocaleString() {
		return "";
	}
}
Ja, det er ikke nogen god løsning.

Husk Uri.encode() ved brug af loadData på android.webkit.WebView

2011-05-30 10:00
Følgende kode kan give en fejl, hvis html indeholder #, %, \ eller ?.
WebView webView = (WebView)findViewById(R.id.webview);
webView.loadData(html, "text/html", "utf-8");
I Android dokumentationen står der:
A String of data in the given encoding. The date must be URI-escaped -- '#', '%', '\', '?' should be replaced by %23, %25, %27, %3f respectively.
Et quickfix kunne se således ud:
WebView webView = (WebView)findViewById(R.id.webview);
webView.loadData(Uri.encode(html), "text/html", "utf-8");
Til at starte med troede jeg det var en bug ( http://code.google.com/p/and...=4401) indtil jeg læste dokumentationen.