<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jKoeber.de &#187; Tutorials / How to do</title>
	<atom:link href="http://www.jkoeber.de/category/tutorials-how-to-do/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jkoeber.de</link>
	<description>Entwicklung, Systeme, Programmierung und Umsetzung</description>
	<lastBuildDate>Fri, 03 Feb 2012 07:21:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Migration von Textfiles zu PDF&#8217;s in der Konsole</title>
		<link>http://www.jkoeber.de/2011/11/04/migration-von-textfiles-zu-pdfs-in-der-konsole/</link>
		<comments>http://www.jkoeber.de/2011/11/04/migration-von-textfiles-zu-pdfs-in-der-konsole/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 12:50:16 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[enscript]]></category>
		<category><![CDATA[gs]]></category>
		<category><![CDATA[konsole]]></category>
		<category><![CDATA[Konvertierung]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[ps2pdf]]></category>
		<category><![CDATA[Text to Pdf]]></category>
		<category><![CDATA[text2pdf]]></category>
		<category><![CDATA[txt to pdf]]></category>
		<category><![CDATA[txt2pdf]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1173</guid>
		<description><![CDATA[Für alle die häufiger E-Mail Verläufe oder auch andere Textfiles Archivieren und Migrieren wollen für eine bessere Bestandsaufnahme oder einfach um es sauber ablegen zu können habe ich eine Möglichkeit gefunden mit Open Source Tools eine Migration von Textfiles in PDF's vorzunehmen. Und das ganze in der Konsole.

Es ist zwar nicht alltäglich eine solche ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F11%2F04%2Fmigration-von-textfiles-zu-pdfs-in-der-konsole%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Für alle die häufiger E-Mail Verläufe oder auch andere Textfiles Archivieren und Migrieren wollen für eine bessere Bestandsaufnahme oder einfach um es sauber ablegen zu können habe ich eine Möglichkeit gefunden mit Open Source Tools eine Migration von Textfiles in PDF&#8217;s vorzunehmen. Und das ganze in der Konsole.</p>
<p>Es ist zwar nicht alltäglich eine solche Aufgabenstellung aber man findet relativ wenig dazu im Netz, daher hat es jetzt ein paar Nächte gedauert bis wir einen guten Weg gefunden haben.</p>
<p>Zum einen nutzen wir, egal ob auf Windows oder Unix Systemen.</p>
<ul>
<li>enscript</li>
<li>Ghostscript</li>
</ul>
<p></p>
<div>Enscript erstellt uns aus einfachen Textdateien schöne PS Files um diese anschließend weiter zu verarbeiten.</div>
<div>Wie man enscript unter Windows zum laufen bekommt findet ihr <a href="http://www.kromwyrm.com/howtos/howto_install_gnu_enscript_onto_winxp.html">hier</a>. Es ist ein graus mit enscript. Aber sobald es läuft funktioniert es ohne Probleme.</div>
<div>Nachdem beide Programme zu unserer Zufriedenheit laufen, könnt ihr mit zwei einfachen Befehlen die PDF erzeugen.</div>
<p></p>
<div><strong>Step1</strong>: Erzeugen der PS aus einer Textfile</div>
<pre class="java" name="code"> enscript -q -p "PS-file" "TXT-file"</pre>
<p></p>
<div><strong>Step2</strong>: Erzeuge der PDF aus der PS</div>
<pre class="java" name="code"> gs -q -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=PDF-file PS-file -c quit</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F11%2F04%2Fmigration-von-textfiles-zu-pdfs-in-der-konsole%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1173&amp;md5=7c7b62b801ea626a5373c33de64e5da2" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/11/04/migration-von-textfiles-zu-pdfs-in-der-konsole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konakart auf Glassfish laufen lassen</title>
		<link>http://www.jkoeber.de/2011/09/30/konakart-auf-glassfish-laufen-lassen/</link>
		<comments>http://www.jkoeber.de/2011/09/30/konakart-auf-glassfish-laufen-lassen/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 07:11:21 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[JavaEE]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[ändern]]></category>
		<category><![CDATA[anpassen]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[ear]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[konakart]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[migrieren]]></category>
		<category><![CDATA[starten]]></category>
		<category><![CDATA[transport]]></category>
		<category><![CDATA[war]]></category>
		<category><![CDATA[webshop]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1153</guid>
		<description><![CDATA[Ich entwickle sehr gerne mit meinem Macbook, leider habe ich feststellen müssen das die Migration von einer Konakart Installation auf einen Glassfish etwas anders läuft als in der Dokumentation beschrieben.

Folgende Befehle können verwendet werden!


make_ear

In meinem zweiten Versuch mit make_ear hat es super funktioniert. Ich würde es mir fast sogar zutrauen das ich es beim ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F30%2Fkonakart-auf-glassfish-laufen-lassen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Ich entwickle sehr gerne mit meinem Macbook, leider habe ich feststellen müssen das die Migration von einer Konakart Installation auf einen Glassfish etwas anders läuft als in der Dokumentation beschrieben.</p>
<p>Folgende Befehle können verwendet werden!</p>
<p><EDIT><br />
<strong>make_ear</strong></p>
<p>In meinem zweiten Versuch mit make_ear hat es super funktioniert. Ich würde es mir fast sogar zutrauen das ich es beim ersten mal übersehen habe. make_ear erzeugt im Ordner ear/ eine konakart.ear file. Diese einfach nur auf dem glassfish deployen und viola it runs.</p>
<p>Dieser Befehlt ist ziemlich sinnfrei. Er erstellt unter dem MAC einen Ordner konakart.ear und nicht die File um es dem glassfish schmackhaft zu machen.</p>
<p>Alternative <strong>make_wars</strong></p>
<p>Um die korrekten Dateien zu erstellen, geht in den Installationsordner von konakart und in den Subordner custon also:  <strong>/konakart/custom </strong>hier drin befindet sich die <em>build.xml</em> die Konakart benötigt um alle weiteren Befehle auszuführen.</p>
<p>Anschließend führt ihr folgenden Befehl in der Konsole aus: <strong>./bin/ant make_wars</strong> Es wird einen Moment dauern aber anschließend, bei korrekter Verarbeitung werdet ihr BUILD SUCCESS am Ende erhalten.</p>
<p>Am einfachsten ist, ihr erstellt die .war Files und ladet alle 3 im Admin Interface auf den Server. Alle generierten Files werden im Ordner /konakart/custom/war/ abgelegt:</p>
<p><strong>birtviewer.war<br />
konakart.war<br />
konakartadmin.war</strong></p>
<p>Nachdem Ihr die .war Files im glassfish deployed habt, geht es an die Datenbank. Soweit noch keine vorhanden ist. Hierzu ladet euch auf den Server am besten per FTP die <strong>konakart_demo.sql.</strong> Diese findet ihr unter: <strong>/konakart/database/MySql/</strong></p>
<p>Geht in die Konsole und legt die Datenbank an:</p>
<pre name="code" class="sql" >
# &gt; mysql -u root -p
mysql &gt; CREATE DATABASE konakart;
mysql &gt; quit;
</pre>
<p>anschließend noch die konakart_demo.sql in die konakart datenbank importieren.</p>
<pre name="code" class="sql" >
# &gt; mysql -u root -p konakart &lt; ./var/tmp/konakart_demo.sql
</pre>
<p>Nachdem ihr erfolgreich die Datenbank importiert habt, müsst ihr nur noch in den Application Ordner von Konakart die properties Files anpassen:<br />
Also zurück in den domain Ordner des glassfisher z.B.</p>
<p><strong>Konakart</strong><br />
/var/glassfish/domains/domain1/applications/j2ee-modules/konakart/WEB-INF/classes/konakart.properties<br />
<strong>KonakartAdmin</strong><br />
/var/glassfish/domains/domain1/applications/j2ee-modules/konakartadmin/WEB-INF/classes/konakartadmin.properties</p>
<p>darin findet ihr schon die Einträge für die Datenbank. Einfach die Nutzer und das Passwort noch anpassen euren Glassfish neu starten und viola das System läuft.
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F30%2Fkonakart-auf-glassfish-laufen-lassen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1153&amp;md5=ee807d89d005f6739cca3457906d27ad" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/09/30/konakart-auf-glassfish-laufen-lassen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Konakart &#8211; SOAP &#8211; Kategorien lesen/anlegen</title>
		<link>http://www.jkoeber.de/2011/09/23/konakart-soap-kategorien-lesenanlegen/</link>
		<comments>http://www.jkoeber.de/2011/09/23/konakart-soap-kategorien-lesenanlegen/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 21:42:48 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[JavaEE]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[category]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[konakart]]></category>
		<category><![CDATA[read]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[synchronize]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Webservice]]></category>
		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1137</guid>
		<description><![CDATA[Arbeiten mit dem Konakart Webservice kann einige Schwierigkeiten mit sich bringen. Ich war auch erst einmal ein paar Stunden und Tage darüber die passende IDE und den richtigen Weg zu wählen. Meine Lösung:

Eclipse mit einer virtuellen Maschine auf der eine Konakartinstallation läuft.

Netbeans RPC Webservices ist leider nicht möglich da sich Netbeans dagegen sträubt und ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F23%2Fkonakart-soap-kategorien-lesenanlegen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Arbeiten mit dem Konakart Webservice kann einige Schwierigkeiten mit sich bringen. Ich war auch erst einmal ein paar Stunden und Tage darüber die passende IDE und den richtigen Weg zu wählen. Meine Lösung:</p>
<p>Eclipse mit einer virtuellen Maschine auf der eine Konakartinstallation läuft.</p>
<p>Netbeans RPC Webservices ist leider nicht möglich da sich Netbeans dagegen sträubt und scheinbar einige Teile der WSDL falsch übersetzt. Wie ich schon in ein paar Beiträgen vorher beschrieben habe wäre es sinnvoll die Serviceverbindung und Abarbeitung aller Daten in einem Eclipse Projekt durch zu führen.</p>
<p><strong>Schritt 1:</strong> Verbindung zu Konakart</p>
<pre name="code" class="java">
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.konakartadmin.ws.KKWSAdminIf;
import com.konakartadmin.ws.KKWSAdminIfServiceLocator;

/**
* KonakartService Class
* per extend in die Subklasse z.b. Kategorie einbinden und per aufruf init()
* zum webservice verbinden
**/
public class KonakartService {
    public static Log log = LogFactory.getLog(KonakartService.class);
    public static KKWSAdminIf eng;

    /** Default credentials for accessing the KonaKart Application Engine */
    private static String DEFAULT_USERNAME = "admin@konakart.com";
    private static String DEFAULT_PASSWORD = "princess";

    /** The session id returned by a successful login */
    public static String sessionId;

    /**
     * @param args
     */
    public static void init() {
        try {
            /*
             * Instantiate a KonaKart Engine instance
             */
            eng = new KKWSAdminIfServiceLocator().getKKWSAdmin();
            eng.setEndpoint("MEINEIP"); // set ip address or hostname

            sessionId = eng.login(DEFAULT_USERNAME, DEFAULT_PASSWORD); // get session id
            log.info(DEFAULT_USERNAME + " logged in successfully and got session " + sessionId);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
</pre>
<p><strong>Schritt 2:</strong> Kategorien lesen</p>
<pre name="code" class="java">
	private void synchronize() {
	   // Auslesen des Hauptmenu's
	   AdminCategory[] webShopMainMenu = getWebshopMainMenu(2);
	}

        /**
        * Laden des Hauptmenu's anhand der Language ID
        **/
	private static AdminCategory[] getWebshopMainMenu(int languageId) throws RemoteException {
		AdminCategory[] categories = eng.getCategoryTree(languageId,true);
		for(int i=0;i < categories.length;i++) {
			generateTree(categories[i]);
		}
		return categories;
	}

	private static void generateTree(AdminCategory item) {
		AdminCategory[] children = item.getChildren();
		for(int c=0;c < children.length;c++) {
			System.out.println("CHILDREN: " + children[c].getName());
			if(children[c].getChildren().length > 0) {
				generateTree(children[c]);
			}
		}
	}
</pre>
<p><strong>Schritt 3:</strong Kategorie anlegen</p>
<pre name="code" class="java">
        // Beschreibung, auch Multilanguage möglich, einfach das Array um 1 erweitern
	AdminCategoryDescription[] description = new AdminCategoryDescription[1];
	description[0].setDescription(&#8220;Testbeschreibung&#8221;);
	description[0].setName(&#8220;Beschreibung 1&#8243;);
	description[0].setLanguageId(eng.getLanguageByCode(&#8220;de_DE&#8221;).getId());
	description[0].setLanguage(eng.getLanguageByCode(&#8220;de_DE&#8221;));

	// Kategoriedaten
	AdminCategory category = new AdminCategory();
	category.setDescription(&#8220;Beschreibung&#8221;);
	category.setDescriptions(description);
	category.setInvisible(false);
	category.setName(&#8220;Kategorie 1&#8243;);

	// Kategorie anlegen
	eng.insertCategory(sessionId, category);
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F23%2Fkonakart-soap-kategorien-lesenanlegen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1137&amp;md5=3d27986db907b2d664ffc30bcee7119f" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/09/23/konakart-soap-kategorien-lesenanlegen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android: ListViews optimieren und Felder ändern</title>
		<link>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/</link>
		<comments>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 10:14:36 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[Adapter]]></category>
		<category><![CDATA[Buffer]]></category>
		<category><![CDATA[Listview]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Optimization]]></category>
		<category><![CDATA[Recycle]]></category>
		<category><![CDATA[Speichernutzung]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[ViewHolder]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1129</guid>
		<description><![CDATA[Wie schon angeschlagen im letzten Post, heute geht es um die ListView Optimierung in Android. In einem sehr interessanten Webcast von Google I/O 2010 gab es schon einiges sehr sinnvolles zu ListViews und auch wieder einiges was ich dazu gelernt habe.

Für alle die es interessiert: The World of ListView



&#160;

Hier noch das Tutorial bzw. HowTo ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F22%2Fandroid-listviews-optimieren%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Wie schon angeschlagen im letzten Post, heute geht es um die ListView Optimierung in Android. In einem sehr interessanten Webcast von Google I/O 2010 gab es schon einiges sehr sinnvolles zu ListViews und auch wieder einiges was ich dazu gelernt habe.</p>
<p>Für alle die es interessiert: <strong>The World of ListView</strong></p>
<p><iframe src="http://www.youtube.com/embed/wDBM6wVEO70" frameborder="0" width="475" height="315"></iframe></p>
<p>&nbsp;</p>
<p>Hier noch das Tutorial bzw. HowTo zu dem Video. Wozu ViewHandler gebraucht werden und wie man Speicherschonend die ListViews befüllt. Anschließend noch ein kleiner Ausschnitt wie man ListViews aktualisiert mit <strong>notifyDataSetChanged().</strong></p>
<p>Ich gehe davon aus das jeder weiß wie man eine ListView in der Layout.xml definiert, daher fangen wir sofort an mit der implementierung der View im Code.</p>
<p><strong>Step 1</strong></p>
<p>ListView in der Activity aufrufen.</p>
<p>&nbsp;</p>
<pre class="java" name="code">import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

public class ListActivity extends Activity {

	private Context ctx;
	private ListView liste;
	private ListeItemAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.liste);
		this.ctx = this;

		List<String >items = new ArrayList<String>();
		for(int i=0;i<100;i++) {
			items.add(new ListeItemAdapter().randomText);
		}

		adapter = new ListeItemAdapter(this, R.layout.liste_item, items);
		liste = (ListView) findViewById(R.id.liste);
		liste.setAdapter(adapter);
	}
}
</pre>
<p>Der Adapter und somit das Herzstück des Tutorials. Wie definiere ich einen ViewHolder zum speichern der statischen Views für eine sinnvolle Speicherwiedernutzung.</p>
<pre class="java"  name="code">import java.util.List;
import java.util.Random;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListeItemAdapter extends BaseAdapter {

	private Context ctx;
	private int rowResID;
	private List<String> itemList;
	private LayoutInflater layoutInflater;
	public String randomText = myRandomText();

	private static class ViewHolder {
		public static TextView text1;
		public static TextView text2;
		public static TextView text3;
		public static ImageView status;
	}

	public ListeItemAdapter() { }

	public ListeItemAdapter(final Context ctx, final int rowResID, final List<String> itemList) {
		this.ctx = ctx;
		this.rowResID = rowResID;
		this.itemList = itemList; 

		layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	public int getCount() {
		return this.itemList.size();
	}

	public Object getItem(int position) {
		return this.itemList.get(position);
	}

	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	public void setItemList(List<String> itemList) {
		this.itemList = itemList;
	}

	public View getView(int position, View v, ViewGroup vg) {
		ViewHolder holder;

		// prüfen ob eine view bereits existiert
		if(v == null || v.getTag() == null) {
			holder = new ViewHolder();
			v = layoutInflater.inflate(rowResID, null); // inflate the item layout!
			holder.text1 = (TextView) v.findViewById(R.id.text1);
			holder.text2 = (TextView)v.findViewById(R.id.text2);
			holder.text3 = (TextView)v.findViewById(R.id.text3);
			holder.status = (ImageView) v.findViewById(R.id.status);
			v.setTag(holder); // viewholder setzen
		} else {
		// laden der Views über den ViewHolder
			holder = (ViewHolder) v.getTag();
		}

		// get item value
		String item = itemList.get(position);

		// Views füllen
		holder.text1.setText(item);
		holder.text2.setText(myRandomText());
		holder.text3.setText(myRandomText());
		holder.status.setImageResource(myRandomImage());

        return v;
	}

	/**
	 * get random String value
	 * @return String
	 */
	public String myRandomText() {
		String[] values = new String[] { "Hase","Hund","Katze","Maus","Schwein","Pferd","Esel","Kuh","Henne","Hahn","Vogel","Affe","Giraffe","Schlange" };
		Random generator = new Random();
		return values[generator.nextInt(values.length)];
	}
	/**
	 * get random Image Resource
	 * @return int
	 */
	private int myRandomImage() {
		int[] values = new int[] { R.drawable.tick_green_00, R.drawable.tick_green_01, R.drawable.tick_green_02, R.drawable.tick_green_03 };
		Random generator = new Random();
		return values[generator.nextInt(values.length)];
	}

}</pre>
<p>Somit wäre eigentlich alles geklärt. Es ist fast selbst beschreibend für die, die sich schon mit ListViews auseinander gesetzt haben.<br />
Wir werden jetzt mit einem Handler in der MainActivity noch ein delayed Handler aufrufen indem wir die Werte der Listview ändern.<br />
Hier die veränderte Activity.</p>
<p><strong><span style="color: #339966;">PART 2</span></strong></p>
<p><strong>Step1</strong></p>
<pre class="java" name="code">
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ListView;

public class ListActivity extends Activity {

	private Context ctx;
	private ListView liste;
	private ListeItemAdapter adapter;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.liste);
		this.ctx = this;
		handler = new Handler();

		List<String >items = new ArrayList<String>();
		for(int i=0;i<100;i++) {
			items.add(new ListeItemAdapter().randomText);
		}

		adapter = new ListeItemAdapter(this, R.layout.liste_item, items);
		liste = (ListView) findViewById(R.id.liste);
		liste.setAdapter(adapter);

		Thread updateListViewThread = new Thread() {
			@Override
			public void run() {
				super.run();

				final List<String >items = new ArrayList<String>();
				for(int i=0;i<100;i++) {
					items.add(new ListeItemAdapter().randomText);
				}

				handler.postDelayed(new Runnable() {
					@Override
					public void run() {
						adapter.setItemList(items);
						adapter.notifyDataSetChanged();
					}
				}, 5000);

			}
		};
		updateListViewThread.start();

	}

}
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F09%2F22%2Fandroid-listviews-optimieren%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1129&amp;md5=87fab0ff98345a25c687d39407f49950" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/09/22/android-listviews-optimieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android AIDL Prozess erstellen</title>
		<link>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/</link>
		<comments>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 18:48:34 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[AIDL]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Einfach]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Remote Service]]></category>
		<category><![CDATA[sample]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1117</guid>
		<description><![CDATA[AIDL Prozesse oder Services sind Schnittstellen zur Kommunikation und Automatisierung außerhalb der App. Wenn deine App für Widgets oder auch für länger laufende Prozesse einiges an Ressourcen benötigt und vor allem auch nach dem schließen der Applikation weiter arbeiten soll. z.B. Streamen von Musik oder Aktualisieren von Daten bei Newsfeed's etc. sind sogenannte Remote ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-aidl-prozess-erstellen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>AIDL Prozesse oder Services sind Schnittstellen zur Kommunikation und Automatisierung außerhalb der App. Wenn deine App für Widgets oder auch für länger laufende Prozesse einiges an Ressourcen benötigt und vor allem auch nach dem schließen der Applikation weiter arbeiten soll. z.B. Streamen von Musik oder Aktualisieren von Daten bei Newsfeed&#8217;s etc. sind sogenannte Remote Services sinnvoll.</p>
<p>Remoteservices werden mit einer .aidl file spezifiziert, dieses beinhaltet eine Interfaceklasse die die Struktur des späteren Services erzeugt. Vieles zur Kommunikation mit dem System erzeugt Eclipse wieder von alleine, um das wir uns nicht kümmern müssen. Einmal verstanden ist es halb so schwer.</p>
<p>Mein Mainpackage z.B. <strong>de.jkoeber.testapp</strong> darin erstelle ich eine .aidl file mit dem Namen <strong>MyRemoteService.aidl</strong></p>
<pre name="code" class="java">package de.jkoeber.testapp;/** service interface */
interface MyRemoteService{
void startUpate();
void stopUpdate();
boolean isUpdating();
}
</pre>
<p>Aus dieser AIDL File erstellt der Builder von Eclipse in den Ordner <strong>gen</strong> die Java Klasse zur Kommunikation mit dem Systemen.</p>
<p>Im nächsten Step registrieren wir den Service in der App. Andernfalls kann das ganze Programm nicht mit der File umgehen. Also fügen wir z.B. folgendes in die <strong>AndroidManifest.xml</strong> ein.</p>
<pre name="code" class="xml">
<service android:name=".remoteservices.MyRemoteService" android:process=":remote">
  <intent-filter>
    <action android:name="de.jkoeber.testapp.MyRemoteService" />
    <action android:name="de.jkoeber.testapp.REMOTE_SERVICE" />
  </intent-filter>
</service>
</pre>
<p>Jetzt zur Erklärung. Ein Remoteservice wird über die Interfacefile erzeugt. Dem Remoteservice hängt aber eine Klasse an, die die angegebenen Funktionen im Interface ausführt. das wäre dann in der Zeile: <strong>android:name=&#8221;.remoteservices.MyRemoteService&#8221;</strong> Das heißt, ich hab ein neues Packages erstellt das .remoteservices heißt und hab darin die Klasse MyRemoteService erzeugt. Per Intent Filter wird anschließend die Interface .aidl Datei angegeben.</p>
<p>Jetzt erzeugen wir noch die Klasse zur AIDL. Es ist wie bei jedem Interface, das es einer Klasse zu Grunde liegt.</p>
<pre name="code" class="java">
package de.jkoeber.testapp.remoteservices;

import java.util.ArrayList;
import java.util.List;

import de.jkoeber.testapp.MyRemoteService;

public class MyRemoteService extends Service {
    private Handler handler = new Handler();

    @Override
    public void onCreate() {
        super.onCreate();
        ctx= this;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // Return the interface
        return mBinder;
    }

    private final MyRemoteService.Stub mBinder = new MyRemoteService.Stub() {
		@Override
		public void startUpate() throws RemoteException {
		    // start update
		}

		/**
		 * stop updating service
		 */
		@Override
		public void stopUpdate() throws RemoteException {
                    // stop service
		}

		/**
		 * check if update is running
		 */
		@Override
		public boolean isUpdating() throws RemoteException {
                   // check if service is running
                }
    };

}
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-aidl-prozess-erstellen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1117&amp;md5=95a2852670f9fd7044a813e30705eb71" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/08/01/android-aidl-prozess-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android SDK Manager Error: unknown option: -</title>
		<link>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/</link>
		<comments>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 13:07:25 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[-]]></category>
		<category><![CDATA[1&1]]></category>
		<category><![CDATA[10]]></category>
		<category><![CDATA[12]]></category>
		<category><![CDATA[13]]></category>
		<category><![CDATA[AVD]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[geht nicht mehr]]></category>
		<category><![CDATA[kein emulator]]></category>
		<category><![CDATA[lässt sich nicht starten]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[starten]]></category>
		<category><![CDATA[starting]]></category>
		<category><![CDATA[unknown option]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1119</guid>
		<description><![CDATA[Wer den Fehler: unknown option: - please use -help for a list of valid options steht erstmal vor einem Rätsel. Es ist aber ziemlich einfach. Da Android eher von Google kommt und damit auch eher die Unix und Mac Programmierer ansprechen will stellt man sich dem dummen Windows Nutzer quer und baut schnell mal ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-sdk-manager-error-unknown-option%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Wer den Fehler: unknown option: &#8211; please use -help for a list of valid options steht erstmal vor einem Rätsel. Es ist aber ziemlich einfach. Da Android eher von Google kommt und damit auch eher die Unix und Mac Programmierer ansprechen will stellt man sich dem dummen Windows Nutzer quer und baut schnell mal seinen AVD Manager um.</p>
<p>Seit der aktuelle Version des SDK und AVD Managers ist es nicht mehr gestattet mit Leerstellen im Pfad zum AVD Manager zu arbeiten.<br />
Wer voher einen ähnlichen Pfad wie ich hatte mit Leerstelle. zum Beispiel: <em>c:\Program Files\Android\SDK-Manager\</em> wird jetzt ziemlich schnell enttäuscht und man erhält den Fehler: <strong>unknown option: &#8211; please use -help for a list of valid options</strong> </p>
<p>Typischerweise gibt es kein Logging und somit beginnt eine dreitägige Tour der Suche in den endlosen Weiten der Updates und Reinstallationen um einen solch banalen Fehler zu finden. Für alle anderen die den Fehler auch haben und sich Emulatoren nicht mehr vernünftig starten lassen. Ladet euren SDK Manager in ein Verzeichnis ohne Leerstellen: <em>c:\android\sdk-manager\</em> und schon funktoiniert es wie gehabt.
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F08%2F01%2Fandroid-sdk-manager-error-unknown-option%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1119&amp;md5=93b66f8583e5ba66744da6a1f18868ed" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/08/01/android-sdk-manager-error-unknown-option/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Orientation Trick</title>
		<link>http://www.jkoeber.de/2011/07/04/android-orientation-trick/</link>
		<comments>http://www.jkoeber.de/2011/07/04/android-orientation-trick/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 12:08:26 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[anzeigen]]></category>
		<category><![CDATA[ausprobieren]]></category>
		<category><![CDATA[erkennen]]></category>
		<category><![CDATA[Erkennung]]></category>
		<category><![CDATA[Filtern]]></category>
		<category><![CDATA[Funktion]]></category>
		<category><![CDATA[herausfinden]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Landscape]]></category>
		<category><![CDATA[Modus]]></category>
		<category><![CDATA[Orientation]]></category>
		<category><![CDATA[Portrait]]></category>
		<category><![CDATA[Prüfen]]></category>
		<category><![CDATA[Selection]]></category>
		<category><![CDATA[testen]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Übergabe]]></category>
		<category><![CDATA[Verbesserung]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=1112</guid>
		<description><![CDATA[Heute geht es um die Orientation im Android. Alle oder so gut wie alle aktuellen Smartphonehandys haben einen Sensor um die Ausrichtung des Handybildschirms zu bestimmen. Landscape oder Portrait heißen diese 2 Varianten. Mit diesen beiden Möglichkeiten lässt sich viel anstellen. Man kann seine Apps den größen der Monitore etc. anpassen. Eine super Sache. ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F07%2F04%2Fandroid-orientation-trick%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Heute geht es um die Orientation im Android. Alle oder so gut wie alle aktuellen Smartphonehandys haben einen Sensor um die Ausrichtung des Handybildschirms zu bestimmen. Landscape oder Portrait heißen diese 2 Varianten. Mit diesen beiden Möglichkeiten lässt sich viel anstellen. Man kann seine Apps den größen der Monitore etc. anpassen. Eine super Sache. Aber wie stelle ich am geschicktesten die Orientation fest um vernünftig meine Programmdaten zu übergeben.</p>
<p>Eines ist mir aufgefallen. Pads und Handys sind zwei paar Schuhe, das aber auch die Hersteller an sich nicht an die Standards halten finde ich unverschämt. So gibt das Acer Iconia Tab andere Daten als das HTC Desire HD zurück um seine Orientation Punkte zu merken. Zur Erinnerung in der Google bzw. Android Dokumentation:</p>
<blockquote>
<table>
<tbody>
<tr>
<td>&#8220;<code>unspecified</code>&#8220;</td>
<td>The default value. The system chooses the orientation. The policy it uses, and therefore the choices made in specific contexts, may differ from device to device.</td>
</tr>
<tr>
<td>&#8220;<code>landscape</code>&#8220;</td>
<td>Landscape orientation (the display is wider than it is tall).</td>
</tr>
<tr>
<td>&#8220;<code>portrait</code>&#8220;</td>
<td>Portrait orientation (the display is taller than it is wide).</td>
</tr>
<tr>
<td>&#8220;<code>user</code>&#8220;</td>
<td>The user&#8217;s current preferred orientation.</td>
</tr>
<tr>
<td>&#8220;<code>behind</code>&#8220;</td>
<td>The same orientation as the activity that&#8217;s immediately beneath it in the activity stack.</td>
</tr>
<tr>
<td>&#8220;<code>sensor</code>&#8220;</td>
<td>The orientation determined by a physical orientation sensor. The orientation of the display depends on how the user is holding the device; it changes when the user rotates the device.</td>
</tr>
<tr>
<td>&#8220;<code>nosensor</code>&#8220;</td>
<td>An orientation determined without reference to a physical orientation sensor. The sensor is ignored, so the display will not rotate based on how the user moves the device. Except for this distinction, the system chooses the orientation using the same policy as for the &#8220;<code>unspecified</code>&#8221; setting.</td>
</tr>
</tbody>
</table>
</blockquote>
<p>Jeder der einzelnen Werte wird über eindeute Integer zugeordnet. Aber bei Herstellern, wie ich feststellen musste gibt es diesen Standard nicht und sie übergeben was sie wollen. Im normalen Verfahren, kann man die Position bzw. Orientierung des Displays mit diesem Befehl feststellen und dem entsprechen darauf reagieren:</p>
<pre name="code" class="java">
 Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
 int orientation = display.getOrientation();
</pre>
<p>Anschließend könnte man den übergebenen Wert per ActivityInfo verlgeichen und den dementsprechenden Content laden. Zum Beispiel so:</p>
<pre name="code" class="java">
switch (orientation) {
  case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
      ... do anything ...
  break;
  case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
      ... do anything else ...
  break;
}
</pre>
<p>Aber das funktioniert nur bedingt. Für Tablet, z.B. dem Iconia von Acer gilt der Landscape und Portrait Bereich nicht, da Acer als Tab sich den Portrait Bereich im Querformat vorstellt und somit die Variable für Landscape und Portrait vertauscht. Somit bekommt man ein 0 für Landscape und 1 für Portrait was nicht sein dürfte.<br />
Für mich ist der Landscape Modus das Querformat des Monitors und nicht die Hochkanvariante. Somit prüfe ich folgendes ab:</p>
<pre name="code" class="java">
setContentView(R.layout.demo) // Für alle Ansichten muss der selbe Name verwendet werden
LinearLayout contentLand = (LinearLayout) findViewId(R.id.content);
LinearLayout contentPortrait = (LinearLayout) findViewId(R.id.content);

if(contentLand != null) { // check if Orientation == Landscape
  ... do whatever u want ...
} else if(contentPortrait != null ) { // check if Orientation == Portrait
  ... do whatever u want ...
}
</pre>
<p>Mein Beispiel ist kurz und knapp, ich verwende keine Mühe mehr daran den Sensor zu ermitteln wie er gerade steht sondern überlass es dem System. Ich prüfe lediglich ab welche View existiert und arbeite damit weiter. Wenn die jeweilige View ansprechbar ist bzw. in meinem Fall <strong>not null</strong> erhalte ich das selbe, für mich sogar bessere Ergebnis als wenn ich umständlich mit den Orientation Funktionen arbeite.</p>
<p>Ich hoffe es hilf einigen von euch die sich damit erst beschäftigen werden.</p>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2011%2F07%2F04%2Fandroid-orientation-trick%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p> <p><a href="http://www.jkoeber.de/?flattrss_redirect&amp;id=1112&amp;md5=f8a6aed32f741daefc207d49a04306da" title="Flattr" target="_blank"><img src="http://www.jkoeber.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2011/07/04/android-orientation-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac Softwareupdate und Eclipse Probleme</title>
		<link>http://www.jkoeber.de/2010/06/18/mac-softwareupdate-und-eclipse-probleme/</link>
		<comments>http://www.jkoeber.de/2010/06/18/mac-softwareupdate-und-eclipse-probleme/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 22:16:57 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[JavaEE]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Clean]]></category>
		<category><![CDATA[Combo]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Field]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Macbook]]></category>
		<category><![CDATA[Snow Leopard]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=910</guid>
		<description><![CDATA[Es ist schon sehr kuios, eigentlich sollte ein Update der Software Fehler verhindern oder gar einige neue Features beinhalten nicht jedoch wenn man ein Macupdate macht. Habe heute meine neue Software installiert und muss sagen, Eclipse geht nicht mehr. Gleichauf mit dem Neustart des Rechners wollte ich Eclipse laden um sofort wieder an mein ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F06%2F18%2Fmac-softwareupdate-und-eclipse-probleme%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Es ist schon sehr kuios, eigentlich sollte ein Update der Software Fehler verhindern oder gar einige neue Features beinhalten nicht jedoch wenn man ein Macupdate macht. Habe heute meine neue Software installiert und muss sagen, Eclipse geht nicht mehr. Gleichauf mit dem Neustart des Rechners wollte ich Eclipse laden um sofort wieder an mein kleines Projekt zu gehen und ein paar Kleinigkeiten auszuprobieren. Nix wars! Eclipse wollte einfach nicht, und ließ mich mit einem kleinen Hinweis einfach liegen. Aber für euch die Lösung in ein paar Sekunden. Falls ihr in der Log folgendes findet:</p>
<pre class="java" name="code">!SESSION 2010-06-17 23:10:59.850 -----------------------------------------------
eclipse.buildId=
java.version=1.6.0_20
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86, WS=cocoa, NL=de_DE
Framework arguments:  -product org.eclipse.epp.package.jee.product -keyring /Users/lyrixx/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86 -product org.eclipse.epp.package.jee.product -keyring /Users/lyrixx/.eclipse_keyring -showlocation

!ENTRY org.eclipse.osgi 4 0 2010-06-17 23:11:01.568
!MESSAGE Application error
!STACK 1
java.lang.NullPointerException
	at org.eclipse.swt.graphics.Device.getFontList(Device.java:369)
	at org.eclipse.jface.resource.FontRegistry.filterData(FontRegistry.java:465)
	at org.eclipse.jface.resource.FontRegistry.createFont(FontRegistry.java:499)
	at org.eclipse.jface.resource.FontRegistry.defaultFontRecord(FontRegistry.java:563)
	at org.eclipse.jface.resource.FontRegistry.getFontRecord(FontRegistry.java:673)
	at org.eclipse.jface.resource.FontRegistry.get(FontRegistry.java:613)
	at org.eclipse.jface.resource.JFaceResources.getDialogFont(JFaceResources.java:273)
	at org.eclipse.jface.dialogs.Dialog.initializeDialogUnits(Dialog.java:925)
	at org.eclipse.jface.dialogs.TitleAreaDialog.createContents(TitleAreaDialog.java:131)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1089)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at org.eclipse.ui.internal.ide.ChooseWorkspaceDialog.prompt(ChooseWorkspaceDialog.java:91)
	at org.eclipse.ui.internal.ide.application.IDEApplication.promptForWorkspace(IDEApplication.java:275)
	at org.eclipse.ui.internal.ide.application.IDEApplication.checkInstanceLocation(IDEApplication.java:223)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:103)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1311)</pre>
<p>Jetzt zur Lösung. Zwar haben einige mit einem Clean in der Config.ini versucht das Problem zu beheben. Aber bei viele wird das einfach scheitern da die Fenster nicht richtig geladen werden. Meines erachtens geht da bei der Erstinstallation des Updates was schief. Also was tun? Richtig, das Update erneut herunter laden. <a href="http://support.apple.com/kb/DL1048?viewlocale=de_DE">Hier zum Combo Update für Snow Leopard</a>. Wenn das Update erfolgreich installiert wurde und der Rechner neu gestartet wurde könnt ihr gerne euer Eclipse erneut starten und siehe da, es geht wieder. Dann weiterhin viel Spaß beim Entwicklen.
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F06%2F18%2Fmac-softwareupdate-und-eclipse-probleme%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2010/06/18/mac-softwareupdate-und-eclipse-probleme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ext JS 3.1 Example / Beispiel &#8211; Values aus Textfield lesen</title>
		<link>http://www.jkoeber.de/2010/03/26/ext-js-3-1-example-beispiel-values-aus-textfield-lesen/</link>
		<comments>http://www.jkoeber.de/2010/03/26/ext-js-3-1-example-beispiel-values-aus-textfield-lesen/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 16:39:13 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[3.1]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Eingabefeld]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript Framework]]></category>
		<category><![CDATA[lesen]]></category>
		<category><![CDATA[Textfeld]]></category>
		<category><![CDATA[Value]]></category>
		<category><![CDATA[Wert]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=840</guid>
		<description><![CDATA[Kurzes HowTo wie man mit ExtJS bequem aus vordefinierten HTML TextFields die Werte entnimmt. Nachdem ich selbst ein paar Stunden suchen konnte, und ausprobieren musste. Hier die schnelle Lösung.


 
  
  
  
  
 
 

Ext.onReady(function() {
	Ext.get('button1').on('click',function() {
		var demoItem = Ext.get('textField1').getValue();
		alert(demoItem);
	});
});


 
  Sample
  
  
 

]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F03%2F26%2Fext-js-3-1-example-beispiel-values-aus-textfield-lesen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Kurzes HowTo wie man mit ExtJS bequem aus vordefinierten HTML TextFields die Werte entnimmt. Nachdem ich selbst ein paar Stunden suchen konnte, und ausprobieren musste. Hier die schnelle Lösung.</p>
<pre class="html:collapse" name="code">
<html>
 <head>
  <script src="/ext/adapter/ext/ext-base.js"></script>
  <script src="/ext/ext-all.js"></script>
  <script src="/ext/src/locale/ext-lang-de.js?" type="text/javascript"></script>
  <script type="text/javascript"></script>
 </head>

<script type="text/javascript">
Ext.onReady(function() {
	Ext.get('button1').on('click',function() {
		var demoItem = Ext.get('textField1').getValue();
		alert(demoItem);
	});
});
</script>

 <body>
<h2>Sample</h2>
<input id="textField1" name="textField1" type="text" value="TestValue" />
<input id="button1" name="Button1" type="button" value="Alert Beispiel" />
 </body>
</html>
</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2010%2F03%2F26%2Fext-js-3-1-example-beispiel-values-aus-textfield-lesen%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2010/03/26/ext-js-3-1-example-beispiel-values-aus-textfield-lesen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android mit setOnKeyListener</title>
		<link>http://www.jkoeber.de/2009/12/01/android-mit-setonkeylistener/</link>
		<comments>http://www.jkoeber.de/2009/12/01/android-mit-setonkeylistener/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 08:14:43 +0000</pubDate>
		<dc:creator>lyrixx</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutorials / How to do]]></category>
		<category><![CDATA[Action]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[KeyListener]]></category>
		<category><![CDATA[onClick]]></category>
		<category><![CDATA[onKey]]></category>
		<category><![CDATA[setOnClickListener]]></category>
		<category><![CDATA[setOnKeyListener]]></category>

		<guid isPermaLink="false">http://www.jkoeber.de/?p=701</guid>
		<description><![CDATA[Ein neuer Eintrag für die Developer auf meiner Seite. Es dreht sich mal wieder um Android und dessen neue Möglichkeiten. Dank der virtuellen Tastatur kann man nun eingaben direkt auf dem Display tätigen und muss nicht jedesmal in die nervige Queransicht wechseln. Find ich mal ganz praktisch vorallem bei kleineren Anwendungen.

Aber die, die sich ...]]></description>
			<content:encoded><![CDATA[<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2009%2F12%2F01%2Fandroid-mit-setonkeylistener%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p>Ein neuer Eintrag für die Developer auf meiner Seite. Es dreht sich mal wieder um Android und dessen neue Möglichkeiten. Dank der virtuellen Tastatur kann man nun eingaben direkt auf dem Display tätigen und muss nicht jedesmal in die nervige Queransicht wechseln. Find ich mal ganz praktisch vorallem bei kleineren Anwendungen.</p>
<p>Aber die, die sich mit der &#8220;<span style="color: #3366ff;">setOnKeyListener</span>&#8220;  &#8211; Methode rumstreiten müssen und jedes mal zwei Actions ausgeführt bekommen wenn man z.b. auf <span style="color: #3366ff;">KEYCODE_ENTER</span> wartet. Hier die Lösung:</p>
<pre name="code" class="java">
EditText textBox = (EditText) findViewById(R.id.textBox);
textBox .setOnKeyListener(new OnKeyListener() {
     public boolean onKey(View v, int key, KeyEvent event) {
          if(key == event.KEYCODE_ENTER &amp;&amp; event.getAction() == 1) {
            Log.d("KEY_PRESSED","ENTER");
            startSearch(v);
          }
      return false;
     }
});
</pre>
<p>Ganz kurz und knapp:</p>
<p>Beim einfachen onKey Event werden jedesmal 3 Events ausgelöst. Einmal die Action der Taste und dann für &#8220;pressed&#8221; und &#8220;released&#8221; somit müsst ihr auch diese Events abfangen und auf eine gelöste oder gedrückte taste reagieren.</p>
<p>Das wäre dann dieser Part:</p>
<pre><span style="color: #ff0000;">event.getAction() == 1</span>

ich warte solange bis derjenige die Tase wieder los lässt.</pre>
<div class="fblike_button" style="margin: 10px 0;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.jkoeber.de%2F2009%2F12%2F01%2Fandroid-mit-setonkeylistener%2F&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:25px"></iframe></div>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.jkoeber.de/2009/12/01/android-mit-setonkeylistener/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

