Hirdetés

Új hozzászólás Aktív témák

  • thon73
    tag

    Én erre libet használok, konkrétan a UniversalImageLoader-t. De a Picasso is rohadt jó.

    Na Karma megelőzött. :) Egy másodperccel! :D

    thon73: ha meghívódik a notifydatasetchanged, akkor firssítenie kéne a listát. A probléma ott lehet, hogy rossz entries-t kap be másodszorra, nem?

    Az entries értékét leellenőriztem, az mindig megfelelő.
    Egy kicsit előrébb jutottam - néha ugyanis feldobja a listát, néha nem - és azt találtam, hogy elindítja a filtert, mégpedig mindenképp. A filter viszont kiveszi a még üres (null) értéket az adatokból, majd PÁRHUZAMOSAN fut a performFiltering és a Loader. A Loader előbb végez, és onLoadFinished-ben beállítja az adatokat. Majd jön a Filter (ami még az üres adatokat szűrte!), és átállítja az egész történetet üresre, hiszen -szerinte - nincsenek is adatok.
    Erre nem is gondoltam, mert 1. ekkor még elvileg nem is létezik a filter. 2. ha a filter-szöveg üres, akkor nem is szűr. Csakhogy ilyenkor is beállítja a teljes adatmennyiséget - ami szerinte: üres.

    Namost. Hogyan bogozom ezt ki?
    Az onCreateView-ben állítom be a filtert, így:

    filter = (EditText) view.findViewById(R.id.filter);
    filter.addTextChangedListener(new TextWatcher()
    {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
    ((MainListAdapter)getListAdapter()).getFilter().filter(s);
    }

    Ezt nem tudom nagyon máshova tenni, mert csak egyszer indíthatom el.

    Tegyek be egy flag-et az adapterbe, ami figyeli, hogy vannak-e már beállított adatok??
    Vagy ne engedjem meg, hogy az adatok értéke null legyen? Hanem az üres adatot egy üres (de létező) ArrayList jelentse?
    Vagy mit érdemes ilyenkor csinálni?

    ((Az ArrayAdapter is alternatíva lenne, de annak majd minden részét módosítottam volna, ezért használtam BaseAdapter alapot. Sztem. a probléma ettől független. ))

    Be is bizonyítottam, hogy ez a probléma, itt:

    protected void publishResults(CharSequence constraint, FilterResults filterResults)
    {
    ------------------>if (filterResults.values != null)
    {
    filteredEntries = (List<SampleEntry>) filterResults.values;
    notifyDataSetChanged();
    }
    }

    No, így működik. Órákat játszottam vele, de erre nem gondoltam volna...
    Most már csak arra kell rájönnöm, hogy a.) mi a nyavaja indítja a filtert b.) ezt a tákolt ellenőrzést hogyan tudom szépen megcsinálni...

  • eastsider
    nagyúr

    Az adapterednél kell használni. Megkapja az urlt és egyből lehúzza, cacheli, kijrajzolja, nagyítja stb. a képet ahogy kell. Nagyon okos. :)

    Pl. az éppen futó projektemben egy getView() metódusban:

    ImageLoader.getInstance().displayImage(imageUrl, (ImageView) choiceView);

    Természetesen a DisplayImageOptions és az ImageLoaderConfiguration tetszés szerint be tudod állítani, ez részletesen dokumentálva van.

    jah szóval loadermanagernél ne is foglalkozzak a képpel, mert ez majd külön behúzza a képeket? (kb) a listám mellé?
    (nagy vonalakban). szóvel ez az adapterbe épül be

  • WonderCSabo
    félisten

    köszi
    én is csodálkoztam, hogy kirajzolja :O
    genymotionbe még fel se tűnt, hogy milyen lagos (bár azzal foglalkoztam, h mi a szarnak rajzolja ki? :D) de telón eléggé durva volt

    Csabo Neked is köszi!

    content Providerrel tudom használni? (belenéztem a példába, de nem volt egyértelmű)

    Az adapterednél kell használni. Megkapja az urlt és egyből lehúzza, cacheli, kijrajzolja, nagyítja stb. a képet ahogy kell. Nagyon okos. :)

    Pl. az éppen futó projektemben egy getView() metódusban:

    ImageLoader.getInstance().displayImage(imageUrl, (ImageView) choiceView);

    Természetesen a DisplayImageOptions és az ImageLoaderConfiguration tetszés szerint be tudod állítani, ez részletesen dokumentálva van.

  • eastsider
    nagyúr

    Az érdekes, nem szabadna kirajzolnia elvileg... Én mindenesetre az UIL-t használom mindig.

    köszi
    én is csodálkoztam, hogy kirajzolja :O
    genymotionbe még fel se tűnt, hogy milyen lagos (bár azzal foglalkoztam, h mi a szarnak rajzolja ki? :D) de telón eléggé durva volt

    Csabo Neked is köszi!

    content Providerrel tudom használni? (belenéztem a példába, de nem volt egyértelmű)

  • WonderCSabo
    félisten

    Sziasztok!

    ListFragmentbe jelenítek meg adatokat, Loadermanagerrel
    hogy tudom szépen megoldani, hogy egy képet meg tudjak jeleníteni a listában?
    ha simán megkapja az ImageView a kép Uri-ját, akkor is kirajzolja, csak uge ezt nem így kellene megoldani (full size image kirajzolása eszi a hw-t)

    Én erre libet használok, konkrétan a UniversalImageLoader-t. De a Picasso is rohadt jó.

    Na Karma megelőzött. :) Egy másodperccel! :D

    thon73: ha meghívódik a notifydatasetchanged, akkor firssítenie kéne a listát. A probléma ott lehet, hogy rossz entries-t kap be másodszorra, nem?

  • Karma
    félisten

    Sziasztok!

    ListFragmentbe jelenítek meg adatokat, Loadermanagerrel
    hogy tudom szépen megoldani, hogy egy képet meg tudjak jeleníteni a listában?
    ha simán megkapja az ImageView a kép Uri-ját, akkor is kirajzolja, csak uge ezt nem így kellene megoldani (full size image kirajzolása eszi a hw-t)

    Az érdekes, nem szabadna kirajzolnia elvileg... Én mindenesetre az UIL-t használom mindig.

  • eastsider
    nagyúr

    Sziasztok!

    ListFragmentbe jelenítek meg adatokat, Loadermanagerrel
    hogy tudom szépen megoldani, hogy egy képet meg tudjak jeleníteni a listában?
    ha simán megkapja az ImageView a kép Uri-ját, akkor is kirajzolja, csak uge ezt nem így kellene megoldani (full size image kirajzolása eszi a hw-t)

  • thon73
    tag

    Sziasztok! Elakadtam egy BaseAdapter bővítésnél. Az adapter egy ArrayList-et használ, amit egy setData() metódus állít be:

    public void setData( List<SampleEntry> entries )
    {
    this.originalEntries = entries;
    this.filteredEntries = entries;

    notifyDataSetChanged();
    }

    A setData()-t egy ListFragment-ben hívom meg, egy Loader részeként:

    public void onLoadFinished(Loader<List<SampleEntry>> loader, List<SampleEntry> data)
    {
    ((MainListAdapter)getListAdapter()).setData(data);
    }

    Az első végrehajtáskor ez tökéletesen működik. Ha elfordítom a készüléket, akkor is lefutnak a fenti metódusok, de - a notifyDataSetChanged() - hívás ellenére NEM jelenik meg semmi.
    Ha ekkor frissítem a listát (pl. még egy elemet hozzáadok), akkor az EGÉSZ lista megjelenik, vagyis az összes elemet tartalmazza.
    Ha az elemet (próbaként) a setData() részben adom hozzá, akkor sem jelenik meg a lista.

    Rengeteget olvastam a notifyDataSetChanged()-ről, de nem jutottam eredményre. Az a gyanúm, hogy nincs még ListView, amikor az első setData() lefut, ezért nem tud még mit frissíteni.

    Hogyan tudnám ezt megoldani??

  • h1ght3chzor
    őstag

    A Calendaros varázslatra semmi szükség nincs, az egészet irtsd ki. Fogd meg a Date objektumot, amit a parse visszaadott, és használd a getTime() metódusát a milliszekundumok megszerzéséhez.

    Köszönöm! :) :R

  • Karma
    félisten

    Calendar calendarBeginTime = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date beginTimeDate = (Date) format.parse(beginTime);
    calendarBeginTime.set(beginTimeDate.getYear(), beginTimeDate.getMonth(), beginTimeDate.getDay(),
    beginTimeDate.getHours(), beginTimeDate.getMinutes(), beginTimeDate.getSeconds());
    calEvent.put(CalendarContract.Events.DTSTART,calendarBeginTime.getTimeInMillis());

    Így mindet áthúzza, és azt írja, hogy "The method get****() from the type Date is deprecated". Vagy nem így kellene használni?

    A Calendaros varázslatra semmi szükség nincs, az egészet irtsd ki. Fogd meg a Date objektumot, amit a parse visszaadott, és használd a getTime() metódusát a milliszekundumok megszerzéséhez.

  • h1ght3chzor
    őstag

    Nem teszteltem és csak fejből írtam, de elvileg:

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Date date = format.parse(endTime);

    Calendar calendarBeginTime = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date beginTimeDate = (Date) format.parse(beginTime);
    calendarBeginTime.set(beginTimeDate.getYear(), beginTimeDate.getMonth(), beginTimeDate.getDay(),
    beginTimeDate.getHours(), beginTimeDate.getMinutes(), beginTimeDate.getSeconds());
    calEvent.put(CalendarContract.Events.DTSTART,calendarBeginTime.getTimeInMillis());

    Így mindet áthúzza, és azt írja, hogy "The method get****() from the type Date is deprecated". Vagy nem így kellene használni?

  • Karma
    félisten

    Hogyan tudom átalakítani a String endTime="11/08/2011 09:00:00"; adatomat, hogy úgy tudjam használni, mint az alábbi kódban:

    Calendar endTime = Calendar.getInstance();
    endTime.set(2012, 9, 14, 8, 45);
    calEvent.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis());

    Nem teszteltem és csak fejből írtam, de elvileg:

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Date date = format.parse(endTime);

  • h1ght3chzor
    őstag

    Hogyan tudom átalakítani a String endTime="11/08/2011 09:00:00"; adatomat, hogy úgy tudjam használni, mint az alábbi kódban:

    Calendar endTime = Calendar.getInstance();
    endTime.set(2012, 9, 14, 8, 45);
    calEvent.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis());

  • Egy játékon dolgozom... a service-ra már én is gondoltam de nem tűnt a legjobb megoldásnak...

    Megoldás: Thread-ben invalidate() helyett postInvalidate() hivogatása.... :D

  • Milyen jellegű munka miatt kell frissíteni? Erre vannak megoldások: Thread, AsyncTask, Service, IntentService, Looper, stb...

    Egy játékon dolgozom... a service-ra már én is gondoltam de nem tűnt a legjobb megoldásnak...

  • WonderCSabo
    félisten

    Na egy másik kérdés.... folyamatosan frissítenem kellene a View-t viszont nem tudom, hogy ezt hol tegyem.... nem akaszthatom meg ezzel a főszálat de másik szálból meg nem "nyúlkálhatok" másik szálból létrehozott View-khoz ... Arra is gondoltam hogy a View maga indítson egy szálat ami frissíti de csak nem tetszik neki...

    Milyen jellegű munka miatt kell frissíteni? Erre vannak megoldások: Thread, AsyncTask, Service, IntentService, Looper, stb...

  • Na egy másik kérdés.... folyamatosan frissítenem kellene a View-t viszont nem tudom, hogy ezt hol tegyem.... nem akaszthatom meg ezzel a főszálat de másik szálból meg nem "nyúlkálhatok" másik szálból létrehozott View-khoz ... Arra is gondoltam hogy a View maga indítson egy szálat ami frissíti de csak nem tetszik neki...

  • WonderCSabo
    félisten

    Sziasztok, kódból próbálok hozzáadni egy view-t egy LinearLazout-hoz de mikor meghívom a setLayoutParams metódust nullPointerException-t kapok..... valami ötlet? lehet azért mert egy "saját" view-ról van szó?

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
    LinearLayout.LayoutParams.FILL_PARENT);
    lv.setLayoutParams(params);

    Az lv biztos nem null?

  • Sziasztok, kódból próbálok hozzáadni egy view-t egy LinearLazout-hoz de mikor meghívom a setLayoutParams metódust nullPointerException-t kapok..... valami ötlet? lehet azért mert egy "saját" view-ról van szó?

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
    LinearLayout.LayoutParams.FILL_PARENT);
    lv.setLayoutParams(params);

  • Benex
    senior tag

    Sziasztok!

    Egy nagyon egyszerü prograot csinálok. A vak irás jeleit rendes betük mellé szeretném tenni. 3 osztályom lenne fő osztály (itt ki lehet választani hogy a magyar ill. angol brille jelek legyenek ).
    Ez a kód a hun_braille.xml
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- Elso elem a görgetősávban -->

    <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
    android:id="@+id/txtview1"
    android:layout_width="wrap_content"
    android:layout_height="234dp"
    android:layout_alignParentLeft="true"
    android:gravity="center"
    android:text="A" />

    <ImageView
    android:id="@+id/imageViewA"
    android:layout_width="wrap_content"
    android:layout_height="234dp"
    android:layout_alignParentRight="true"
    android:src="@drawable/Braille_A1" />
    </RelativeLayout>

    <!-- Második elem -->

    <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
    android:id="@+id/txtviewB"
    android:layout_width="wrap_content"
    android:layout_height="234dp"
    android:layout_alignParentLeft="true"
    android:gravity="center"
    android:text="B" />

    <ImageView
    android:id="@+id/imageViewB"
    android:layout_width="wrap_content"
    android:layout_height="234dp"
    android:layout_alignParentRight="true"
    android:src="@drawable/Braille_B2" />
    </RelativeLayout>
    </LinearLayout>
    </ScrollView>

    </RelativeLayout>

    És valamiért nem fut le , hibát sem ír és nem tudom mi a gond.
    (Kép furmátumnak milyennek kell lennie? Jelengleg *.png és drawable mappában van)

    Előre nagyon köszönöm a segítséget!

  • Karma
    félisten

    Ez a cucc már eléggé outdated, most már PreferenceFragmentet illik használni.

    Már ha az ember 14-es API felett dolgozik...

  • WonderCSabo
    félisten

    köszönöm :R nem is gondoltam hogy erre van külön megvalósítás egyből lista jutott eszembe arra keresgéltem :)

    Ez a cucc már eléggé outdated, most már PreferenceFragmentet illik használni.

  • bAtt001
    addikt

    Nem feltétlenül: [link]

    Sianis

    köszönöm :R nem is gondoltam hogy erre van külön megvalósítás egyből lista jutott eszembe arra keresgéltem :)

  • Sianis
    addikt

    jól gondolom hogy ha akarok egy settings menüt csinálni a gyári droid settings menü mintájára akkor nekem ehhez listviewt kell használnom? elsőre elég bonyolultnak tűnik ez a lista :(

    Nem feltétlenül: [link]

    Sianis

  • bAtt001
    addikt

    jól gondolom hogy ha akarok egy settings menüt csinálni a gyári droid settings menü mintájára akkor nekem ehhez listviewt kell használnom? elsőre elég bonyolultnak tűnik ez a lista :(

  • moriak
    tag

    közben rendezgettem a kódon valamit, és megjavult, de még mindig nem értem h miért működik amikor tegnap nem ment :)

    így szedem ki am az intentből, key-ek jók azokat másoltam, nincs elgépelés

    protected void onHandleIntent(Intent intent) {

    urlCurrent = intent.getStringExtra("urlCurrent");
    urlTomorrow = intent.getStringExtra("urlTomorrow");
    ...

    a service-t a fenti alarm indítja, azzal nincs gond indította rendesen csak mindig nullpointert kaptam a kér urlt tároló stringre, de most gond nélkül átmegy az extra és helyes a működés ahogy látom :)

    Javaslom, hogy használj konstansokat public static final String ... = "...";, illetve az osztályok nevének a konvencióit tartsd be, hogy szép legyen a forrásod. Örülök, hogy működik.

  • bAtt001
    addikt

    Hol szeded ki a Service-ben az Intentből az adatot? Key 100%, hogy jó? Illetve hogy indítod a Service-t?

    közben rendezgettem a kódon valamit, és megjavult, de még mindig nem értem h miért működik amikor tegnap nem ment :)

    így szedem ki am az intentből, key-ek jók azokat másoltam, nincs elgépelés

    protected void onHandleIntent(Intent intent) {

    urlCurrent = intent.getStringExtra("urlCurrent");
    urlTomorrow = intent.getStringExtra("urlTomorrow");
    ...

    a service-t a fenti alarm indítja, azzal nincs gond indította rendesen csak mindig nullpointert kaptam a kér urlt tároló stringre, de most gond nélkül átmegy az extra és helyes a működés ahogy látom :)

  • moriak
    tag

    jövök megint kérdéssel, van egy service-em ezt szeretném alarm managerrel bizonyos időközönként indítani, eddig oké minden indítja is, DE ennek a service-nek tovább kellene adnom 2 string paramétert, belerakom szépen intent-be a 2 cuccot aztán pendingintent majd időzítem az alarm managerrel. de amikor átér a service-be az intent már nincs benne valamiért a 2 extra, kb 2 órája bújom a stackoverflowt, minden javaslatot kipróbáltam onnan de még mindig nem tudom átküldeni a 2 extrát. itt a kódrészletem:

    Intent intent = new Intent(this, httpService.class);
    intent.putExtra("urlCurrent", currentWeatherURL);
    intent.putExtra("urlTomorrow", tomorrowWeatherURL);
    intent.setAction("getData");
    PendingIntent pIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),6000, pIntent);

    van valami ötletetek? azt olvastam intentnek adni kell egy dummy actiont hogy elküldje az extrákat, ezt meg is tettem de még mindig amikor lekérem a service-ben az extrát simán nullt ad vissza :(

    Hol szeded ki a Service-ben az Intentből az adatot? Key 100%, hogy jó? Illetve hogy indítod a Service-t?

  • bAtt001
    addikt

    jövök megint kérdéssel, van egy service-em ezt szeretném alarm managerrel bizonyos időközönként indítani, eddig oké minden indítja is, DE ennek a service-nek tovább kellene adnom 2 string paramétert, belerakom szépen intent-be a 2 cuccot aztán pendingintent majd időzítem az alarm managerrel. de amikor átér a service-be az intent már nincs benne valamiért a 2 extra, kb 2 órája bújom a stackoverflowt, minden javaslatot kipróbáltam onnan de még mindig nem tudom átküldeni a 2 extrát. itt a kódrészletem:

    Intent intent = new Intent(this, httpService.class);
    intent.putExtra("urlCurrent", currentWeatherURL);
    intent.putExtra("urlTomorrow", tomorrowWeatherURL);
    intent.setAction("getData");
    PendingIntent pIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),6000, pIntent);

    van valami ötletetek? azt olvastam intentnek adni kell egy dummy actiont hogy elküldje az extrákat, ezt meg is tettem de még mindig amikor lekérem a service-ben az extrát simán nullt ad vissza :(

  • eastsider
    nagyúr

    Sziasztok!

    képeket szeretnék tárolni úgy db-ben, hogy filepath-al hivatkozok rájuk..
    magyarul db-ben eltárolom valahogy a filepath-t (szóval nem BLOB-ként) és visszakérésnél, szintén filepathra hivatkozva jelenítem meg egy fragmenten a képet.(vagyíis csak egy thumbnailt)
    szóval DB-ben csak a filepatht tárolom egy mezőben

    foglalkozott valaki mmár ilyesmivel? hogy leehtséges ez?

    ezt találtam

    nah arra rájöttem, hogy media URI kell nekem, és azt simán textként tárolni db-ben

  • bAtt001
    addikt

    Rakd bele az elérést a manifest-be és startservice.

    köszi közben megoldottam, dobtam az egész asynctask-ot és service-be raktam a működést, mára a service alarm-okkal való időzítését tervezem megvalósítani :)

  • eastsider
    nagyúr

    Sziasztok!

    képeket szeretnék tárolni úgy db-ben, hogy filepath-al hivatkozok rájuk..
    magyarul db-ben eltárolom valahogy a filepath-t (szóval nem BLOB-ként) és visszakérésnél, szintén filepathra hivatkozva jelenítem meg egy fragmenten a képet.(vagyíis csak egy thumbnailt)
    szóval DB-ben csak a filepatht tárolom egy mezőben

    foglalkozott valaki mmár ilyesmivel? hogy leehtséges ez?

    ezt találtam

  • moriak
    tag

    sziasztok

    megint én :D akarok saját Service-t csinálni hogy azon belül kérdezzek le adatokat szerverről, na lekérdezés meg is van az Asynctask-ban a service is lassan összejön csak nem tudom hogy kellene elindítani :) elég buta kérdés gondolom de sehol se látom hogyan indítják el azt a konkrét Intentservice-t :) ötlet?

    jaj lehet megvan, az intentbe kell megmondani hogy azt akarom elindítani, asszem ennyi lesz :D

    Rakd bele az elérést a manifest-be és startservice.

  • bAtt001
    addikt

    sziasztok

    megint én :D akarok saját Service-t csinálni hogy azon belül kérdezzek le adatokat szerverről, na lekérdezés meg is van az Asynctask-ban a service is lassan összejön csak nem tudom hogy kellene elindítani :) elég buta kérdés gondolom de sehol se látom hogyan indítják el azt a konkrét Intentservice-t :) ötlet?

    jaj lehet megvan, az intentbe kell megmondani hogy azt akarom elindítani, asszem ennyi lesz :D

  • avassavas
    csendes tag

    Helló helló
    Egy olyan kérdésem lenne, hogy valaki esetleg nem használ titániumot? :C Pár napja eldöntöttem hogy kipróbálom mert elég jó alternativának tűnik, de már a kezdetben elvérzett.
    Problémám a következő:
    Feltelepítettem annak módja és rendje szerint (Win XP 32bit SP3), minden SDK verzio pipa titaniumon belül is, és sdk managerben is, beállítva az sdk eléri útja. Alloy próba project létrehozva, hozzá adva ADVben az emulator, és az eszközeim is( TAB, TELEFON) és akkor futtatás>

    Titanium Command-Line Interface, CLI version 3.2.1, Titanium SDK version 3.2.2.GA
    Copyright (c) 2012-2014, Appcelerator, Inc. All Rights Reserved.
    Please report bugs to http://jira.appcelerator.org/
    [INFO] : Found Titanium plugin id=ti.alloy version=1.0
    [INFO] : Deploy type: development
    [INFO] : Building for target: emulator
    [INFO] : Building for emulator: Nexus 4
    [INFO] : Targeting Android SDK: 19
    [INFO] : Building for the following architectures: armeabi, armeabi-v7a, x86
    [INFO] : Signing with keystore: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\dev_keystore (tidev)
    [INFO] : Debugging disabled
    [INFO] : Profiler disabled
    [INFO] : Forcing rebuild: C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\build-manifest.json does not exist
    [INFO] : Found Alloy app in C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app
    [INFO] : Executing Alloy compile: alloy.cmd compile C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app --config platform=android,version=0,simtype=none,devicefamily=none,deploytype=development
    [INFO] : ----- MVC GENERATION -----
    [INFO] : [global style] writing to cache...
    [INFO] : [index.xml] view processing...
    [INFO] : style: "index.tss"
    [INFO] : view: "index.xml"
    [INFO] : controller: "index.js"
    [INFO] : created: "Resources\android\alloy\controllers\index.js"
    [INFO] : created: "Resources\android\alloy\styles\index.js"
    [INFO] :
    [INFO] : [app.js] Titanium entry point processing...
    [INFO] : created: "Resources\android\app.js"
    [INFO] :
    [INFO] : ----- OPTIMIZING -----
    [INFO] : - android\alloy.js
    [INFO] : - android\alloy\sync\localStorage.js
    [INFO] : - android\alloy\sync\properties.js
    [INFO] : - android\alloy\sync\sql.js
    [INFO] :
    [INFO] : Alloy compiled in 5.05037s
    [INFO] : Alloy compiler completed successfully
    [INFO] : Launching emulator: Nexus 4
    [INFO] : Running: C:\Android\sdk\tools\emulator.exe "-avd" "Nexus 4" "-port" "5554" "-no-boot-anim" "-partition-size" "128"
    [ERROR] Application Installer abnormal process termination. Process exit value was 1

    Ha pedig eszközön futtatom>

    Titanium Command-Line Interface, CLI version 3.2.1, Titanium SDK version 3.2.2.GA
    Copyright (c) 2012-2014, Appcelerator, Inc. All Rights Reserved.
    Please report bugs to http://jira.appcelerator.org/
    [INFO] : Found Titanium plugin id=ti.alloy version=1.0
    [INFO] : Deploy type: test
    [INFO] : Building for target: device
    [INFO] : Building for device: 20080411
    [INFO] : Targeting Android SDK: 19
    [INFO] : Building for the following architectures: armeabi, armeabi-v7a, x86
    [INFO] : Signing with keystore: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\dev_keystore (tidev)
    [INFO] : Debugging disabled
    [INFO] : Profiler disabled
    [INFO] : Forcing rebuild: C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\build-manifest.json does not exist
    [INFO] : Found Alloy app in C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app
    [INFO] : Executing Alloy compile: alloy.cmd compile C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app --config platform=android,version=0,simtype=none,devicefamily=none,deploytype=test
    [INFO] : ----- MVC GENERATION -----
    [INFO] : [global style] loading from cache...
    [INFO] : [index.xml] view processing...
    [INFO] : style: "index.tss"
    [INFO] : view: "index.xml"
    [INFO] : controller: "index.js"
    [INFO] : created: "Resources\android\alloy\controllers\index.js"
    [INFO] : created: "Resources\android\alloy\styles\index.js"
    [INFO] :
    [INFO] : [app.js] using cached app.js...
    [INFO] :
    [INFO] : ----- OPTIMIZING -----
    [INFO] : - android\alloy.js
    [INFO] : - android\alloy\sync\localStorage.js
    [INFO] : - android\alloy\sync\properties.js
    [INFO] : - android\alloy\sync\sql.js
    [INFO] :
    [INFO] : Alloy compiled in 5.38633s
    [INFO] : Alloy compiler completed successfully
    [INFO] : Processing JavaScript files
    [INFO] : Encrypting JavaScript files: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\titanium_prep.win32.exe "com.test.project" "C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\assets" "app.js" "alloy/backbone.js" "alloy/CFG.js" "alloy/constants.js" "alloy/controllers/BaseController.js" "alloy/controllers/index.js" "alloy/styles/index.js" "alloy/sync/localStorage.js" "alloy/sync/properties.js" "alloy/sync/sql.js" "alloy/underscore.js" "alloy/widget.js" "alloy.js" "_app_props_.json"
    events.js:72
    throw er; // Unhandled 'error' event
    ^
    Error: spawn Unknown system errno 193
    at errnoException (child_process.js:980:11)
    at ChildProcess._handle.onexit (child_process.js:771:34)
    [ERROR] Application Installer abnormal process termination. Process exit value was 8

    Két napja olvasgatok utána neten, és kérdeztem appcelerator-n is de nulla válasz (nem a lesegítő készebb közösség..) elolvastam a témában ott található javaslatokat ki is próbáltam őket, de sajnos a dolog változatlan.. :U Igazából sejtésem szerint én rontottam el valamit telepítésnél, környezeti változók is be vannak pedig állítva, és használok Eclipse-t és MoSync-et is, és azok tökéletesen működnek..Valaki nem tudna segiteni esetleg hogy mit nem állítottam be vagy rontottam el? Köszönöm előre a válaszokat :R

    Sikerült végre megoldanom :C :C :C
    igaziból a miért-et még mindig nem nagyon értem de ha valakinek felmerült ugyan ez a probléma akkor annyi hogy a titanium SDK-t be kell updatelni http://builds.appcelerator.com/#3.2.3 -vel, és nincs hiba üzenet és indítja emulatorban is :) :C :R

  • avassavas
    csendes tag

    Helló helló
    Egy olyan kérdésem lenne, hogy valaki esetleg nem használ titániumot? :C Pár napja eldöntöttem hogy kipróbálom mert elég jó alternativának tűnik, de már a kezdetben elvérzett.
    Problémám a következő:
    Feltelepítettem annak módja és rendje szerint (Win XP 32bit SP3), minden SDK verzio pipa titaniumon belül is, és sdk managerben is, beállítva az sdk eléri útja. Alloy próba project létrehozva, hozzá adva ADVben az emulator, és az eszközeim is( TAB, TELEFON) és akkor futtatás>

    Titanium Command-Line Interface, CLI version 3.2.1, Titanium SDK version 3.2.2.GA
    Copyright (c) 2012-2014, Appcelerator, Inc. All Rights Reserved.
    Please report bugs to http://jira.appcelerator.org/
    [INFO] : Found Titanium plugin id=ti.alloy version=1.0
    [INFO] : Deploy type: development
    [INFO] : Building for target: emulator
    [INFO] : Building for emulator: Nexus 4
    [INFO] : Targeting Android SDK: 19
    [INFO] : Building for the following architectures: armeabi, armeabi-v7a, x86
    [INFO] : Signing with keystore: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\dev_keystore (tidev)
    [INFO] : Debugging disabled
    [INFO] : Profiler disabled
    [INFO] : Forcing rebuild: C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\build-manifest.json does not exist
    [INFO] : Found Alloy app in C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app
    [INFO] : Executing Alloy compile: alloy.cmd compile C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app --config platform=android,version=0,simtype=none,devicefamily=none,deploytype=development
    [INFO] : ----- MVC GENERATION -----
    [INFO] : [global style] writing to cache...
    [INFO] : [index.xml] view processing...
    [INFO] : style: "index.tss"
    [INFO] : view: "index.xml"
    [INFO] : controller: "index.js"
    [INFO] : created: "Resources\android\alloy\controllers\index.js"
    [INFO] : created: "Resources\android\alloy\styles\index.js"
    [INFO] :
    [INFO] : [app.js] Titanium entry point processing...
    [INFO] : created: "Resources\android\app.js"
    [INFO] :
    [INFO] : ----- OPTIMIZING -----
    [INFO] : - android\alloy.js
    [INFO] : - android\alloy\sync\localStorage.js
    [INFO] : - android\alloy\sync\properties.js
    [INFO] : - android\alloy\sync\sql.js
    [INFO] :
    [INFO] : Alloy compiled in 5.05037s
    [INFO] : Alloy compiler completed successfully
    [INFO] : Launching emulator: Nexus 4
    [INFO] : Running: C:\Android\sdk\tools\emulator.exe "-avd" "Nexus 4" "-port" "5554" "-no-boot-anim" "-partition-size" "128"
    [ERROR] Application Installer abnormal process termination. Process exit value was 1

    Ha pedig eszközön futtatom>

    Titanium Command-Line Interface, CLI version 3.2.1, Titanium SDK version 3.2.2.GA
    Copyright (c) 2012-2014, Appcelerator, Inc. All Rights Reserved.
    Please report bugs to http://jira.appcelerator.org/
    [INFO] : Found Titanium plugin id=ti.alloy version=1.0
    [INFO] : Deploy type: test
    [INFO] : Building for target: device
    [INFO] : Building for device: 20080411
    [INFO] : Targeting Android SDK: 19
    [INFO] : Building for the following architectures: armeabi, armeabi-v7a, x86
    [INFO] : Signing with keystore: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\dev_keystore (tidev)
    [INFO] : Debugging disabled
    [INFO] : Profiler disabled
    [INFO] : Forcing rebuild: C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\build-manifest.json does not exist
    [INFO] : Found Alloy app in C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app
    [INFO] : Executing Alloy compile: alloy.cmd compile C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\app --config platform=android,version=0,simtype=none,devicefamily=none,deploytype=test
    [INFO] : ----- MVC GENERATION -----
    [INFO] : [global style] loading from cache...
    [INFO] : [index.xml] view processing...
    [INFO] : style: "index.tss"
    [INFO] : view: "index.xml"
    [INFO] : controller: "index.js"
    [INFO] : created: "Resources\android\alloy\controllers\index.js"
    [INFO] : created: "Resources\android\alloy\styles\index.js"
    [INFO] :
    [INFO] : [app.js] using cached app.js...
    [INFO] :
    [INFO] : ----- OPTIMIZING -----
    [INFO] : - android\alloy.js
    [INFO] : - android\alloy\sync\localStorage.js
    [INFO] : - android\alloy\sync\properties.js
    [INFO] : - android\alloy\sync\sql.js
    [INFO] :
    [INFO] : Alloy compiled in 5.38633s
    [INFO] : Alloy compiler completed successfully
    [INFO] : Processing JavaScript files
    [INFO] : Encrypting JavaScript files: C:\Documents and Settings\Rendszergazda\Application Data\Titanium\mobilesdk\win32\3.2.2.GA\android\titanium_prep.win32.exe "com.test.project" "C:\Documents and Settings\Rendszergazda\Documents\Titanium_Studio_Workspace\Demo Project\build\android\assets" "app.js" "alloy/backbone.js" "alloy/CFG.js" "alloy/constants.js" "alloy/controllers/BaseController.js" "alloy/controllers/index.js" "alloy/styles/index.js" "alloy/sync/localStorage.js" "alloy/sync/properties.js" "alloy/sync/sql.js" "alloy/underscore.js" "alloy/widget.js" "alloy.js" "_app_props_.json"
    events.js:72
    throw er; // Unhandled 'error' event
    ^
    Error: spawn Unknown system errno 193
    at errnoException (child_process.js:980:11)
    at ChildProcess._handle.onexit (child_process.js:771:34)
    [ERROR] Application Installer abnormal process termination. Process exit value was 8

    Két napja olvasgatok utána neten, és kérdeztem appcelerator-n is de nulla válasz (nem a lesegítő készebb közösség..) elolvastam a témában ott található javaslatokat ki is próbáltam őket, de sajnos a dolog változatlan.. :U Igazából sejtésem szerint én rontottam el valamit telepítésnél, környezeti változók is be vannak pedig állítva, és használok Eclipse-t és MoSync-et is, és azok tökéletesen működnek..Valaki nem tudna segiteni esetleg hogy mit nem állítottam be vagy rontottam el? Köszönöm előre a válaszokat :R

  • WonderCSabo
    félisten

    A folyamatos fájlnyitás-flush-zárás miatti teljesítménycsökkenésen kívül semmi gond nincs vele.

    Ja értem. Executorral is meg tudod oldani ugyanúgy, hogy csak egyszer tegye meg ezeket. :) Egyébként szerintem is jobb a békesség, és zárjuk le a fájlt amint csak lehet.

  • Karma
    félisten

    Nem értem az hol okozhat gondot, ha a run() metódus elején nyitom és a végén zárom a fájlt. Mitől lenne jobb a BlockingQueue-val?

    A folyamatos fájlnyitás-flush-zárás miatti teljesítménycsökkenésen kívül semmi gond nincs vele.

  • thon73
    tag

    Nem értem az hol okozhat gondot, ha a run() metódus elején nyitom és a végén zárom a fájlt. Mitől lenne jobb a BlockingQueue-val?

    Köszönöm a sok ötletet és útmutatót! :R
    Lehet, hogy egy esős délutánt már illene azzal töltenem, hogy végigolvasom a Java-t, nem mindig csak azt, ami éppen kell.

    Én még nem látom át teljes mélységében, hogy melyik megoldás a jobb/ideálisabb, de azt már látom, hogy a probléma bármelyikkel megoldható. A nyitás/zárást én speciel eddig is minden kiírt blokk köré raktam, nem hiszem, hogy jelentős gyorsulás érhető el egy hosszútávon nyitott file-lal. Viszont egy esetleges adatvesztés jobban zavarna, ha pl. zárás és flush nélkül lépek ki véletlenül a programból.

    Annyit viszont már átláttam, hogy ez a worker-thread file-kezelés tud elég csapdás lenni... na ezek a kész megoldások ebben biztosan segítenek.

  • WonderCSabo
    félisten

    sziasztok

    ott tartok az időjárásos alkalmazásomban hogy adatokat szerverről lekérem megjelenítem eddig ez működik alkalmazás indításra és gombnyomásra. na itt jön az a rész ami számomra még ismeretlen hogy háttérben mondjuk óránként hogy lehet elvégezni ezt a frissítést :) alarm manager környékén nézelődtem de eléggé sok infót találtam egyszerre nem tudom mi kellene nekem legelőször és hogy működik ez az egész. milyen jogok kellenek manifestben, ki indítja el az időzítést, hogy hívom meg egy időzítéskor az adat lekérést és frissítést? van erre valami egyszerűbb leírás egy helyen? :) vagy egyáltalán jó felé kezdem el nézelődni? előre is köszi

    Szerintem a hivatalos tutorialnál nem lehet szebben leírni. Még sample is van.

  • bAtt001
    addikt

    sziasztok

    ott tartok az időjárásos alkalmazásomban hogy adatokat szerverről lekérem megjelenítem eddig ez működik alkalmazás indításra és gombnyomásra. na itt jön az a rész ami számomra még ismeretlen hogy háttérben mondjuk óránként hogy lehet elvégezni ezt a frissítést :) alarm manager környékén nézelődtem de eléggé sok infót találtam egyszerre nem tudom mi kellene nekem legelőször és hogy működik ez az egész. milyen jogok kellenek manifestben, ki indítja el az időzítést, hogy hívom meg egy időzítéskor az adat lekérést és frissítést? van erre valami egyszerűbb leírás egy helyen? :) vagy egyáltalán jó felé kezdem el nézelődni? előre is köszi

  • WonderCSabo
    félisten

    Jogos, igazad van. A ThreadPoolExecutorok (köztük a single thread is) pont azt az infrastruktúrát adják meg a BlockingQueue köré, amit egyébként kézzel is meg kéne írni.

    Bár azért a fájlírós példánál maradva, egy kicsit körülményesíti a dolgot, hogy a fájlt valamikor nyitni és zárni is kell. Nehezebben összeilleszthető a Runnable-ökkel talán, mint alacsonyszinten építkezve.

    Nem értem az hol okozhat gondot, ha a run() metódus elején nyitom és a végén zárom a fájlt. Mitől lenne jobb a BlockingQueue-val?

  • Karma
    félisten

    Nem voltam pontos, konkrétan erre gondoltam. Ha csak simán egy BlockingQueue-d van, akkor köré még csomó mindent kell írni, hogy menjen a feladatot végzése (pl. egy ciklust), ami már teljesen implementálva van az Executorban.

    Jogos, igazad van. A ThreadPoolExecutorok (köztük a single thread is) pont azt az infrastruktúrát adják meg a BlockingQueue köré, amit egyébként kézzel is meg kéne írni.

    Bár azért a fájlírós példánál maradva, egy kicsit körülményesíti a dolgot, hogy a fájlt valamikor nyitni és zárni is kell. Nehezebben összeilleszthető a Runnable-ökkel talán, mint alacsonyszinten építkezve.

  • WonderCSabo
    félisten

    Szerintem (és ez most tényleg csak vélemény) a kettő másra való. A BlockingQueue-val egy fajta feladatot lehet termelőkre-fogyasztókra bontani és skálázni, az Executorok meg inkább eltérő feladatok ütemezésére több szálon.

    Nem voltam pontos, konkrétan erre gondoltam. Ha csak simán egy BlockingQueue-d van, akkor köré még csomó mindent kell írni, hogy menjen a feladatot végzése (pl. egy ciklust), ami már teljesen implementálva van az Executorban.

  • Karma
    félisten

    Egyébként miért BlockingQueue? Nem inkább egy Executor?

    Szerintem (és ez most tényleg csak vélemény) a kettő másra való. A BlockingQueue-val egy fajta feladatot lehet termelőkre-fogyasztókra bontani és skálázni, az Executorok meg inkább eltérő feladatok ütemezésére több szálon.

  • eastsider
    nagyúr

    Nem teljesen értem mit akarsz csinálni. Ha miért nem a fragment oncreateben inicializálod a loadert?

    első fragmentről szeretném átadni egy ID-t a másiknak, és így új feltételt megadni a loadernek, ami szerint szelektáljon

    az a baj, hogy valamiért nem kapja meg az ID-t a második fragment... csak nullt

  • WonderCSabo
    félisten

    Ehhez miért kell Looper? Az ilyen sorosított adathoz a BlockingQueue továbbra is a tiszta, gyári eszköz erre.

    Egyébként miért BlockingQueue? Nem inkább egy Executor?

  • thon73
    tag

    Ehhez miért kell Looper? Az ilyen sorosított adathoz a BlockingQueue továbbra is a tiszta, gyári eszköz erre.

    Úgy tűnik, gyártottam volna egy BlockingQueuet-t...
    Egyszerű (inkább kisebb) threadeket használtam, mégis ez az egyik rész, ahol még nagyon nem vagyok otthon. Köszönöm az okítást, erre olvasgatok tovább.

  • WonderCSabo
    félisten

    az Activityben nem kell semmi pluszt implementálni?

    itt adnám át az értéket (PicFragment)
    PicFragment fragment = new PicFragment();
    Bundle bundle = new Bundle();
    bundle.putLong("f_id",getListAdapter().getItemId(position) );
    fragment.setArguments(bundle);
    Log.i(TAG,"f_id"+bundle);

    ((FilmActivity) getActivity()).switchFragment(2);

    (onitemclick), logCAT ki is írja

    ide küldeném: FilmFragment
    Bundle bundle = getArguments();
    long i=0;
    Log.i(TAG,getArguments()+"");
    if(bundle != null){
    i = bundle.getLong("f_id");
    Log.i(TAG,getArguments()+"");
    }

    if (i>=0) {
    select = "("+DbConstants.Pic_db.KEY_FILM_ID+" ="+i+")";

    }else
    select=null;

    (ez onCreateLoaderbeb van), és a loader inicializálásához kell a select feltétel..(adatváltozás)
    hol kellene inicializálnom a loadert, hogy megkapja getArguments()-el az adatot?

    Nem teljesen értem mit akarsz csinálni. Ha miért nem a fragment oncreateben inicializálod a loadert?

  • Karma
    félisten

    Ja, nem erre használnék Loopert, attól függetlenül tűnt fel. Looperrel egy lineáris file írást akartam kitenni, hogy a számítások meg az írás külön szálon fusson. És csak küldözgetné a háttérszálra, ami kész van és ki kell írni...
    Olymódon semmi gond, hogy le tudom állítani, csak nem is gondoltam rá idáig. Ha életben hagyom, akkor nem fog újabb és újabb szálakat indítani minden egyes Activity újraindítás? Vagy nem érdekes, mert eltakarítja, amelyikre nincs élő hivatkozás?

    A cikkekért köszönet, megint csak megvilágosodott egy-két dolog. Minél többet ismerek meg az androidból, annál nagyobb a rálátásom a saját tudatlanságomra...

    Ehhez miért kell Looper? Az ilyen sorosított adathoz a BlockingQueue továbbra is a tiszta, gyári eszköz erre.

  • eastsider
    nagyúr

    Ezzel én már nagyon sokat szívtam. :)

    Felül kell definiálni a következő metódust:

    @Override
    public int getItemPosition(Object object) {
    return POSITION_NONE;
    }

    Ekkor mindig meghívja a getItem()-et lapozáskor, ahol pedig visszadsz egy új Fragmentet.

    thon73: Nyilván ha van mondjuk egy thread.start() hívás az onCreate()-ben, akkor minden egyes Activity kreáláskor az le fog futni. Erre vagy figyelsz, vagy megoldod máshogy.
    Ha küldözgetni akarsz kiíráshoz feladatokat, akkor erre való az IntentService.

    Közhely, de minél többet tud az ember, annál jobban rájön, hogy mennyire nem tud semmit. :)

    az Activityben nem kell semmi pluszt implementálni?

    itt adnám át az értéket (PicFragment)
    PicFragment fragment = new PicFragment();
    Bundle bundle = new Bundle();
    bundle.putLong("f_id",getListAdapter().getItemId(position) );
    fragment.setArguments(bundle);
    Log.i(TAG,"f_id"+bundle);

    ((FilmActivity) getActivity()).switchFragment(2);

    (onitemclick), logCAT ki is írja

    ide küldeném: FilmFragment
    Bundle bundle = getArguments();
    long i=0;
    Log.i(TAG,getArguments()+"");
    if(bundle != null){
    i = bundle.getLong("f_id");
    Log.i(TAG,getArguments()+"");
    }

    if (i>=0) {
    select = "("+DbConstants.Pic_db.KEY_FILM_ID+" ="+i+")";

    }else
    select=null;

    (ez onCreateLoaderbeb van), és a loader inicializálásához kell a select feltétel..(adatváltozás)
    hol kellene inicializálnom a loadert, hogy megkapja getArguments()-el az adatot?

  • WonderCSabo
    félisten

    Sziasztok!

    valaki nem járatos véletlenül a viewpagerekben, FragmentStatePagerAdapter -ben?

    konkrétan arra lennék kíváncsi, hogy tudná minden egyes lapozásnál újra létrehozni a fragmentet (adatváltozás miatt)

    Ezzel én már nagyon sokat szívtam. :)

    Felül kell definiálni a következő metódust:

    @Override
    public int getItemPosition(Object object) {
    return POSITION_NONE;
    }

    Ekkor mindig meghívja a getItem()-et lapozáskor, ahol pedig visszadsz egy új Fragmentet.

    thon73: Nyilván ha van mondjuk egy thread.start() hívás az onCreate()-ben, akkor minden egyes Activity kreáláskor az le fog futni. Erre vagy figyelsz, vagy megoldod máshogy.
    Ha küldözgetni akarsz kiíráshoz feladatokat, akkor erre való az IntentService.

    Közhely, de minél többet tud az ember, annál jobban rájön, hogy mennyire nem tud semmit. :)

  • eastsider
    nagyúr

    Sziasztok!

    valaki nem járatos véletlenül a viewpagerekben, FragmentStatePagerAdapter -ben?

    konkrétan arra lennék kíváncsi, hogy tudná minden egyes lapozásnál újra létrehozni a fragmentet (adatváltozás miatt)

  • thon73
    tag

    Akkor állítsd le onPause-ban, ha szükséges leállítani. Nem baj, ha tovább futnak. Ha hosszú folyamat kell, akkor tényleg érdemes Service-t használni.

    A Looper-ekről itt és itt olvashatsz. Nem értem teljesen, hogy miért használnál ehhez Loopert.

    Ja, nem erre használnék Loopert, attól függetlenül tűnt fel. Looperrel egy lineáris file írást akartam kitenni, hogy a számítások meg az írás külön szálon fusson. És csak küldözgetné a háttérszálra, ami kész van és ki kell írni...
    Olymódon semmi gond, hogy le tudom állítani, csak nem is gondoltam rá idáig. Ha életben hagyom, akkor nem fog újabb és újabb szálakat indítani minden egyes Activity újraindítás? Vagy nem érdekes, mert eltakarítja, amelyikre nincs élő hivatkozás?

    A cikkekért köszönet, megint csak megvilágosodott egy-két dolog. Minél többet ismerek meg az androidból, annál nagyobb a rálátásom a saját tudatlanságomra...

  • WonderCSabo
    félisten

    Bocs, átmenetileg net-mentes lettem...

    Tehát, ha az elindított thread-ek tovább futhatnak, akkor azokat is illik leállítani onPause-ban? Ami meg hosszan kell azt indítsam service-ként? Eddig nem használtam Looper-t (vagy legalábbis nem tudtam róla), ez meg most elbizonytalanított...

    Akkor állítsd le onPause-ban, ha szükséges leállítani. Nem baj, ha tovább futnak. Ha hosszú folyamat kell, akkor tényleg érdemes Service-t használni.

    A Looper-ekről itt és itt olvashatsz. Nem értem teljesen, hogy miért használnál ehhez Loopert.

  • thon73
    tag

    Így van, a process megmarad, és a threadek is futnak tovább.

    Bocs, átmenetileg net-mentes lettem...

    Tehát, ha az elindított thread-ek tovább futhatnak, akkor azokat is illik leállítani onPause-ban? Ami meg hosszan kell azt indítsam service-ként? Eddig nem használtam Looper-t (vagy legalábbis nem tudtam róla), ez meg most elbizonytalanított...

  • Karma
    félisten

    Hogyan készítsük variánsokat Gradle segítségével. [link]

    Kipróbáltam, tök jól működik. Egyik projektbe kellett tennem most olyat, hogy más legyen az alap URL az API hívásoknál. És lehet futtatni 2 külön verziót, kódbázis ugyanaz, megférnek együtt egy eszközön, mégis más címre küldenek.

    Szóljatok, ha zavaró, hogy az érdekesebb dolgokat így direktbe belököm.

    Sianis

    Még nem váltottunk Studiora, úgyhogy legutoljára amikor ilyen kellett, a lib project + három manifest+ikon+strings.xml-ből álló app projekt felállást csináltam végig. Ez a flavorosdi nagy erő az új build rendszerben.

    És ne hagyd abba a linkelést :)

  • WonderCSabo
    félisten

    Hogyan készítsük variánsokat Gradle segítségével. [link]

    Kipróbáltam, tök jól működik. Egyik projektbe kellett tennem most olyat, hogy más legyen az alap URL az API hívásoknál. És lehet futtatni 2 külön verziót, kódbázis ugyanaz, megférnek együtt egy eszközön, mégis más címre küldenek.

    Szóljatok, ha zavaró, hogy az érdekesebb dolgokat így direktbe belököm.

    Sianis

    Nem zavaró, sőt, nagyon hasznos!

    Mondjuk én maven párti vagyok, de ezt már asszem régebben kifejtettem. :)

  • Sianis
    addikt

    Hogyan készítsük variánsokat Gradle segítségével. [link]

    Kipróbáltam, tök jól működik. Egyik projektbe kellett tennem most olyat, hogy más legyen az alap URL az API hívásoknál. És lehet futtatni 2 külön verziót, kódbázis ugyanaz, megférnek együtt egy eszközön, mégis más címre küldenek.

    Szóljatok, ha zavaró, hogy az érdekesebb dolgokat így direktbe belököm.

    Sianis

  • WonderCSabo
    félisten

    Aha. Pont erre jutottam, hogy az app sokkal ellenállóbb, mint az activity.
    Azt hittem pedig, hogy amikor memóriára van szükség, akkor nem csak az Activity-t, hanem a teljes App-ot leállítja. (A kilövés az világos, az FC is logikus, de arra nem gondoltam)

    Csakhogy ez újabb gondolatokat is ébreszt bennem: Ha az app megmarad, akkor a teljes process megmarad, nem? Akkor viszont az elindított thread-ek sem fognak megállni? Vagy hogyan van ez? Én azt gondoltam, hogy a BACK-kel (v. pl. finish-sel) való kilépéskor, ill. ha elfogy a hely, akkor ez leáll - de ezek szerint tévedtem.

    Így van, a process megmarad, és a threadek is futnak tovább.

  • thon73
    tag

    Ameddig a rendszer ki nem lövi, ami nem determinisztikus általában. Ha a task managerrel megölöd, vagy force close-olod az appot, az például ezt eredményezi.

    Az activity indítás launcherből nem garantálja viszont, hogy új app is létrejön.

    Aha. Pont erre jutottam, hogy az app sokkal ellenállóbb, mint az activity.
    Azt hittem pedig, hogy amikor memóriára van szükség, akkor nem csak az Activity-t, hanem a teljes App-ot leállítja. (A kilövés az világos, az FC is logikus, de arra nem gondoltam)

    Csakhogy ez újabb gondolatokat is ébreszt bennem: Ha az app megmarad, akkor a teljes process megmarad, nem? Akkor viszont az elindított thread-ek sem fognak megállni? Vagy hogyan van ez? Én azt gondoltam, hogy a BACK-kel (v. pl. finish-sel) való kilépéskor, ill. ha elfogy a hely, akkor ez leáll - de ezek szerint tévedtem.

  • Karma
    félisten

    Meg tudja valaki mondani, hogy elméletben meddig él az Application példány?

    Globális változókat tettem Application szintre, és véletlenül vettem észre, hogy ezek a - hiába indítottam el ezeregy programot - nem szűnnek meg soha. (Mondjuk, újratalapítésig pl.)

    Erre lehet számítani, vagy az Application osztály is eltűnik egyszercsak, és újra létrehozásra kerül egy következő indításkor?

    Ameddig a rendszer ki nem lövi, ami nem determinisztikus általában. Ha a task managerrel megölöd, vagy force close-olod az appot, az például ezt eredményezi.

    Az activity indítás launcherből nem garantálja viszont, hogy új app is létrejön.

  • thon73
    tag

    Meg tudja valaki mondani, hogy elméletben meddig él az Application példány?

    Globális változókat tettem Application szintre, és véletlenül vettem észre, hogy ezek a - hiába indítottam el ezeregy programot - nem szűnnek meg soha. (Mondjuk, újratalapítésig pl.)

    Erre lehet számítani, vagy az Application osztály is eltűnik egyszercsak, és újra létrehozásra kerül egy következő indításkor?

  • tboy93
    nagyúr

    Miből gondolod, hogy öt másodperc kéne hozzá? StackOverflown is egyébként ezt az ötletet láttam.

    Másrészt van egy ilyen projekt is, hátha hasznos: [link]

    Köszönöm a segítséget, utánanézek! :R

  • Karma
    félisten

    (mármint az utasok)

    Miből gondolod, hogy öt másodperc kéne hozzá? StackOverflown is egyébként ezt az ötletet láttam.

    Másrészt van egy ilyen projekt is, hátha hasznos: [link]

  • tboy93
    nagyúr

    Erre gondoltunk már mi is. Egyetlen bibi, hogy bizonyos esetekben nincs erre idő. A rendszer egy buszon lesz, a busz belép egy zónába ahol azonnal indulnia kell a videóknak, lehet hogy 5 mp-es késés múlva már késő lesz és nem is látják amit kéne.

    (mármint az utasok)

  • tboy93
    nagyúr

    Sehogy, mert erre nem alkalmas. Valamilyen lokális megoldásra lesz szükséged... Algoritmikusan elég nehéz lenne biztosítani hogy mindenki ugyanakkor induljon...

    Egy huszárvágás jellegű ötletem azért van: az eszközök NTP-vel megszerzik a pontos időt, a szerver meg olyan üzenetet küld ki, hogy "14:35:20-kor indítsátok el a lejátszást".

    Erre gondoltunk már mi is. Egyetlen bibi, hogy bizonyos esetekben nincs erre idő. A rendszer egy buszon lesz, a busz belép egy zónába ahol azonnal indulnia kell a videóknak, lehet hogy 5 mp-es késés múlva már késő lesz és nem is látják amit kéne.

  • Karma
    félisten

    Ránéztem, de pontosan nem vágom, hogy ezzel hogyan küldhetek egy szerver tabletről adatot 50 kliensre :(

    Sehogy, mert erre nem alkalmas. Valamilyen lokális megoldásra lesz szükséged... Algoritmikusan elég nehéz lenne biztosítani hogy mindenki ugyanakkor induljon...

    Egy huszárvágás jellegű ötletem azért van: az eszközök NTP-vel megszerzik a pontos időt, a szerver meg olyan üzenetet küld ki, hogy "14:35:20-kor indítsátok el a lejátszást".

  • tboy93
    nagyúr

    Push notification? Pl: Parse?

    Ezzel lehet oda-vissza küldözgetni a parancsokat. Mondjuk a visszafelé kommunikációra talán már érdemesebb lenne TCP/IP kapcsolatot nyitni.

    Sianis

    Ránéztem, de pontosan nem vágom, hogy ezzel hogyan küldhetek egy szerver tabletről adatot 50 kliensre :(

  • WonderCSabo
    félisten

    ButterKnife pehelysúlyúbb. Én is Annotations párti voltam, de mivel ez jóval kevésbé terhes dolog így inkább ezt szoktam már használni. Inkább olvashatóságot ad ez a kódnak, mint keretrendszert.

    Sianis

    Háát, a ButterKnife azért némi reflectiont használ. Illetve sokkal-de sokkal kevesebbet tud mint az AA. De valóban pehelysúlyúbb.

  • Sianis
    addikt

    Splitteled a : és a ; mentén, végigmész és szépen hozzáadod a JSONObject-hez. Ez utóbbihoz itt van tutorial.

    (#2023) Sianis: Én ButterKnife helyett AndroidAnnotationst használok. :)

    ButterKnife pehelysúlyúbb. Én is Annotations párti voltam, de mivel ez jóval kevésbé terhes dolog így inkább ezt szoktam már használni. Inkább olvashatóságot ad ez a kódnak, mint keretrendszert.

    Sianis

  • WonderCSabo
    félisten

    Az alábbi sorokból van x db enterrel elválasztva, hogyan tudok JSON Objektumot csinálni belőlük?

    Subject: VMI; StartDateTime: 11/08/2011 09:00:00 AM;12/13/2011 09:00:00 AM; EndDateTime: 11/08/2011 10:00:00 AM;12/13/2011 10:00:00 AM; Chair: LastName Firstname; Room: null

    Splitteled a : és a ; mentén, végigmész és szépen hozzáadod a JSONObject-hez. Ez utóbbihoz itt van tutorial.

    (#2023) Sianis: Én ButterKnife helyett AndroidAnnotationst használok. :)

  • tboy93
    nagyúr

    Push notification? Pl: Parse?

    Ezzel lehet oda-vissza küldözgetni a parancsokat. Mondjuk a visszafelé kommunikációra talán már érdemesebb lenne TCP/IP kapcsolatot nyitni.

    Sianis

    Erről még nem hallottam, utánanézek. :R

  • Sianis
    addikt

    Sziasztok!

    Van egy feladat amit meg kell oldanom, de nem találom rá a megfelelő megoldást.

    Röviden: Android készülékekről van szó, de a kérdés inkább JAVA-s. A feladat a következő. Van egy szerver tablet, ami irányít 30-50 kliens tabletet. A szervernek parancsokat (pl. videó indítása) kell küldenie a klienseknek, és ezeknek a parancsoknak egyszerre kell megérkezniük a tabletekre, ez nagyon fontos! Illetve visszafele is kell működjön az adatküldés, némely esetben a kliensek is küldenek a szervernek adatokat (statisztika).

    Szóval egy ilyen hálózatot kell felépítenem. Bevallom őszintén nem vagyok a toppon hálózat témában. Utánanéztem a TCP illetve UDP kapcsolatoknak. UDP példaprogramot csináltam is, de sajnos csomagvesztés lép fel, nem minden készülék kapja meg az adatokat. A TCP 30-50 tabletnél nem tudom mennyire működhet.

    Ti mit gondoltok erről? Hogyan kéne megvalósítani? Előre is köszönöm a tippeket! :R

    Üdv
    Gergő

    Push notification? Pl: Parse?

    Ezzel lehet oda-vissza küldözgetni a parancsokat. Mondjuk a visszafelé kommunikációra talán már érdemesebb lenne TCP/IP kapcsolatot nyitni.

    Sianis

  • tboy93
    nagyúr

    Sziasztok!

    Van egy feladat amit meg kell oldanom, de nem találom rá a megfelelő megoldást.

    Röviden: Android készülékekről van szó, de a kérdés inkább JAVA-s. A feladat a következő. Van egy szerver tablet, ami irányít 30-50 kliens tabletet. A szervernek parancsokat (pl. videó indítása) kell küldenie a klienseknek, és ezeknek a parancsoknak egyszerre kell megérkezniük a tabletekre, ez nagyon fontos! Illetve visszafele is kell működjön az adatküldés, némely esetben a kliensek is küldenek a szervernek adatokat (statisztika).

    Szóval egy ilyen hálózatot kell felépítenem. Bevallom őszintén nem vagyok a toppon hálózat témában. Utánanéztem a TCP illetve UDP kapcsolatoknak. UDP példaprogramot csináltam is, de sajnos csomagvesztés lép fel, nem minden készülék kapja meg az adatokat. A TCP 30-50 tabletnél nem tudom mennyire működhet.

    Ti mit gondoltok erről? Hogyan kéne megvalósítani? Előre is köszönöm a tippeket! :R

    Üdv
    Gergő

  • h1ght3chzor
    őstag

    Az alábbi sorokból van x db enterrel elválasztva, hogyan tudok JSON Objektumot csinálni belőlük?

    Subject: VMI; StartDateTime: 11/08/2011 09:00:00 AM;12/13/2011 09:00:00 AM; EndDateTime: 11/08/2011 10:00:00 AM;12/13/2011 10:00:00 AM; Chair: LastName Firstname; Room: null

  • eastsider
    nagyúr

    Aha. Két malomban őrlünk. Háromban.

    Tehát: a program elkészítésének a folyamatára értem, hogy először egy vagy két, de független táblával próbálkozz, az is elég izgalmat ad. Csak ha ez már jól működik, akkor próbáld beletenni a join-t táblát. Egyszerre kivitelezni az egészet annyi hibalehetőséget ad az első próbáig, hogy nagyon nehéz kilábalni belőle. Szerintem jobb, ha egy egyszerűbb része biztonságosan működik, és utána lépsz tovább.

    A végső elrendezéshez:
    Két megközelítés létezik (sztem.): én egyesével viszem be az adatokat. Vagyis: EGY kép/könyv/adat felvételekor választom ki hozzá a megfelelő kapcsolt adatot (tekercs/író stb.)
    Te sztem. KÖTEGELT felvitelt szeretnél: kiválasztod a tekercset, aztán hozzárendelsz - gondolom egy hatalmas poolból - egy csomó képet. Ez is járható út.

    A lényeg nem változik:
    Egyszerre egy rekordot tudsz létrehozni. Annak a mezőit kell kitöltened. A TEKERCSEK mező értékét kiválaszthatod a létrehozáskor (egyszeres módszer), vagy már tudod előre, és ezt az ismert tekercs _id-t teszed az összes létrehozandó rekordba (kötegelt mód).

    Mind a két módszernek megvan a létjogosultsága. Pl. van 3000 képem, kijelölök 250-t, és egyszerre (kötegben) hozzárendelem egy tekercshez. Ennek ellenére nem fogod tudni megkerülni az egyszeres módszert sem, két okból: 1. a képek más adatokat is tartalmaznak ISO, hely stb. Ezt honnan veszik? Minden tekercsen egyforma? Akkor uis a tekercs táblába tartozik. EXIF adatot importál? Az egy külön funkció, és kézzel is meg kell tudnod változtatni. 2. mi van, ha egy képet rossz helyre raktál?

    Sztem. is hasznos, sőt a legfontosabb egy program felépítését megbeszélni; kételyem csak abban van, hogy mennyire érdekes ez másoknak, akik itt esetleg rövid android praktikákat akarnak megtudni. De éppen át is vonulhatunk valami semleges területre, ha untatjuk az itt olvasókat. Én speciel hasznosnak tartanám, ha nálamnál tapasztaltabbak is hozzátennék a tudásukat; azt azért átérzem, hogy ez a projekt mennyire fontos neked.

    Amúgy én azt tenném, hogy egyszerűen, magyarul és képekkel leírnám, hogy mit is akarok, hogy tegyen a program, végiglogikáznám, aztán ahhoz alkotnám meg a hátteret.

    most ment PÜ inkább, nem lenne OFF, de szerintem jobb ott

  • thon73
    tag

    lehet nem jól fogalmaztam. telórol írtam..

    szóval Te azt mondod, hogy először úgy csináljam meg, hogy egy listFragment, amin csak a képek tábla jelenik meg. szóvel úgymond "független" a másiktól (nem az adatbázisra gondolok).
    és itt cisnálok egy dialogot, amin kiválasztom, melyik tekercshez tartozzon a felvivendő kép?
    és így már listázni simán tudnám a JOIN-nal. így értetted nem?
    a függelten tekercs táblát nem értem, azt hogy érted?

    azt kellene megoldani, hogy rákatt a tekercsre, átdob a hozzá tartozó képeket tartozó listára.
    ekkor, mivel nincs kép, de megvan a tekercs ID-je, létre tudom hozni a képeket, mert megvan az ID, nem jól gondolom? mármint a film ID-je megvan, innentől nincs sok gond, vagy rosszul értem?

    az összes kép kilistázását későbbre hagynám

    nem hiszem, hogy felesleges lenne, ha valaki rákeres erre a topikban, legalább fog valamit találni :)

    Aha. Két malomban őrlünk. Háromban.

    Tehát: a program elkészítésének a folyamatára értem, hogy először egy vagy két, de független táblával próbálkozz, az is elég izgalmat ad. Csak ha ez már jól működik, akkor próbáld beletenni a join-t táblát. Egyszerre kivitelezni az egészet annyi hibalehetőséget ad az első próbáig, hogy nagyon nehéz kilábalni belőle. Szerintem jobb, ha egy egyszerűbb része biztonságosan működik, és utána lépsz tovább.

    A végső elrendezéshez:
    Két megközelítés létezik (sztem.): én egyesével viszem be az adatokat. Vagyis: EGY kép/könyv/adat felvételekor választom ki hozzá a megfelelő kapcsolt adatot (tekercs/író stb.)
    Te sztem. KÖTEGELT felvitelt szeretnél: kiválasztod a tekercset, aztán hozzárendelsz - gondolom egy hatalmas poolból - egy csomó képet. Ez is járható út.

    A lényeg nem változik:
    Egyszerre egy rekordot tudsz létrehozni. Annak a mezőit kell kitöltened. A TEKERCSEK mező értékét kiválaszthatod a létrehozáskor (egyszeres módszer), vagy már tudod előre, és ezt az ismert tekercs _id-t teszed az összes létrehozandó rekordba (kötegelt mód).

    Mind a két módszernek megvan a létjogosultsága. Pl. van 3000 képem, kijelölök 250-t, és egyszerre (kötegben) hozzárendelem egy tekercshez. Ennek ellenére nem fogod tudni megkerülni az egyszeres módszert sem, két okból: 1. a képek más adatokat is tartalmaznak ISO, hely stb. Ezt honnan veszik? Minden tekercsen egyforma? Akkor uis a tekercs táblába tartozik. EXIF adatot importál? Az egy külön funkció, és kézzel is meg kell tudnod változtatni. 2. mi van, ha egy képet rossz helyre raktál?

    Sztem. is hasznos, sőt a legfontosabb egy program felépítését megbeszélni; kételyem csak abban van, hogy mennyire érdekes ez másoknak, akik itt esetleg rövid android praktikákat akarnak megtudni. De éppen át is vonulhatunk valami semleges területre, ha untatjuk az itt olvasókat. Én speciel hasznosnak tartanám, ha nálamnál tapasztaltabbak is hozzátennék a tudásukat; azt azért átérzem, hogy ez a projekt mennyire fontos neked.

    Amúgy én azt tenném, hogy egyszerűen, magyarul és képekkel leírnám, hogy mit is akarok, hogy tegyen a program, végiglogikáznám, aztán ahhoz alkotnám meg a hátteret.

  • eastsider
    nagyúr

    Bocs, de valahol teljesen elvesztettem a fonalat... Hogyhogy nem tartozik adat egy id-hez, amit viszont ismersz?

    Szerintem (de nyugodtan szóljon bele adatbázis-tudós is):
    Van a könyvek/képek tábla (ami kezdetben üres), és van az írók/tekercsek tábla, ami szintén üres.
    Azt kell megoldanod, hogy fel tudj vinni egy KÉPET, ami hivatkozik egy tekercsre. Mivel ezt nem az _id alapján, hanem listából választod ki, nem tudsz "üres" _id-t hozzárendelni (az ugyanis meg sem jelenik a listában); legfeljebb azt tudod jelezni, hogy NINCS hozzárendelve tekercs (már ha ez megengedett)
    És persze kell egy "űrlap", ahol a tekercseket viszed fel.

    Én a helyedben először gyártanék egy felületet csak a képek táblához. Aztán ugyanezt kibővíteném egy független tekercsek táblával. Amikor ez kész, akkor megpróbálnám kiegészíteni azzal, hogy a képek listájában megjelennek a tekercsek, ill. a képek űrlapján is ki lehessen választani egy tekercset. Közben adni fogja magát, hogy miként kényelmes elrendezni, listákkal, tabokkal, fragmentekkel...

    Mindenkitől bocs, hogy ennyit dumálok, de pont ugyanezen vergődtem végig, és pontosan tudom, hogy nem egyszerű. Mindenesetre fentebb már megosztottam a kódot, ahol én tartok; szerintem azért is érdemes kipróbálni (mármint a kész programot használni), mert gyorsan kiderül, hogy hol vannak azok a részek, ahol megbicsaklik az egész felület. Eredetileg én sem gondoltam egy csomó mindenre, ez csak a fejlesztés során fog kiderülni...

    lehet nem jól fogalmaztam. telórol írtam..

    szóval Te azt mondod, hogy először úgy csináljam meg, hogy egy listFragment, amin csak a képek tábla jelenik meg. szóvel úgymond "független" a másiktól (nem az adatbázisra gondolok).
    és itt cisnálok egy dialogot, amin kiválasztom, melyik tekercshez tartozzon a felvivendő kép?
    és így már listázni simán tudnám a JOIN-nal. így értetted nem?
    a függelten tekercs táblát nem értem, azt hogy érted?

    azt kellene megoldani, hogy rákatt a tekercsre, átdob a hozzá tartozó képeket tartozó listára.
    ekkor, mivel nincs kép, de megvan a tekercs ID-je, létre tudom hozni a képeket, mert megvan az ID, nem jól gondolom? mármint a film ID-je megvan, innentől nincs sok gond, vagy rosszul értem?

    az összes kép kilistázását későbbre hagynám

    nem hiszem, hogy felesleges lenne, ha valaki rákeres erre a topikban, legalább fog valamit találni :)

  • thon73
    tag

    Egyébként lehet vizsgálni kellene hogy ha nem tartozik adott IDhez semmi akkor egyből felhozni a dialogot és oda bedobni az ID t. Vagy valamit trukkozni amikor létre hozom az adott írót (persze az nem túl szép)
    Hogy lehet ezt egyáltalán megoldani?

    Bocs, de valahol teljesen elvesztettem a fonalat... Hogyhogy nem tartozik adat egy id-hez, amit viszont ismersz?

    Szerintem (de nyugodtan szóljon bele adatbázis-tudós is):
    Van a könyvek/képek tábla (ami kezdetben üres), és van az írók/tekercsek tábla, ami szintén üres.
    Azt kell megoldanod, hogy fel tudj vinni egy KÉPET, ami hivatkozik egy tekercsre. Mivel ezt nem az _id alapján, hanem listából választod ki, nem tudsz "üres" _id-t hozzárendelni (az ugyanis meg sem jelenik a listában); legfeljebb azt tudod jelezni, hogy NINCS hozzárendelve tekercs (már ha ez megengedett)
    És persze kell egy "űrlap", ahol a tekercseket viszed fel.

    Én a helyedben először gyártanék egy felületet csak a képek táblához. Aztán ugyanezt kibővíteném egy független tekercsek táblával. Amikor ez kész, akkor megpróbálnám kiegészíteni azzal, hogy a képek listájában megjelennek a tekercsek, ill. a képek űrlapján is ki lehessen választani egy tekercset. Közben adni fogja magát, hogy miként kényelmes elrendezni, listákkal, tabokkal, fragmentekkel...

    Mindenkitől bocs, hogy ennyit dumálok, de pont ugyanezen vergődtem végig, és pontosan tudom, hogy nem egyszerű. Mindenesetre fentebb már megosztottam a kódot, ahol én tartok; szerintem azért is érdemes kipróbálni (mármint a kész programot használni), mert gyorsan kiderül, hogy hol vannak azok a részek, ahol megbicsaklik az egész felület. Eredetileg én sem gondoltam egy csomó mindenre, ez csak a fejlesztés során fog kiderülni...

  • eastsider
    nagyúr

    Na, igen. Ez pont így működik, ha fel van töltve az adatbázis. De hogy töltöd fel? Először uis. üres.
    A képeket ugyanígy oldottam (volna) meg, jelenleg csak a hivatkozásoknál tartok - vagyis bármilyen file-t tudok tárolni, akár képet is.
    ((Mondjuk én lehet, h. tárolnék egy másolatot a képről, vagy egy thumbnail-t; külön helyen))

    Egyébként lehet vizsgálni kellene hogy ha nem tartozik adott IDhez semmi akkor egyből felhozni a dialogot és oda bedobni az ID t. Vagy valamit trukkozni amikor létre hozom az adott írót (persze az nem túl szép)
    Hogy lehet ezt egyáltalán megoldani?

  • thon73
    tag

    nem egészen így lesz a programom
    inkább úgy, hogy van egy író, aminek több könyve van, de egy könyvet csak egy ír
    szóval rámegyek, hogy Gárdonyi Géza, és kijön az egri csillagok, meg az összes könyve Gárdonyinak, szóval pont fordítva írtad, ahogy én elképzeltem :)

    azt tervesztem,

    A eset:
    hogy alapból az lenne, hogy alapból van ugye két tab, egyiken az összes író, ha átlapozok a másikra az behúzza az összes íróhoz tartozó összes könyvet, ugyanis lehet valaki csak a könyvek között szeretne böngészni, mert pl nem tudjam ki írta, csak a címét.. (nem túl életszerű példa, de a programomnál nagyon is)

    B eset:
    rákattintok egy íróra és behúzza a az ahhoz az íróhoz tartozó könyveket (amiket ő írt). vagyis a JOINolt mezőket.

    utánanéztem kicsit, és lehet futásidőben cserélgetni a tabok tartalmát, úgy hogy a felhasználó ne vegye észre, csak a tartalom változzon (a fragment, de tabokon ne látszódjon semmi)
    [link]
    [link]

    más: foglalkoztál már kamerával készített kép SQLiteban való letárolásával (és lekérdezésével)?
    szerintme BLOB helyett az útvonalat fogom letárolni (ahogy néztem ennek egyszerűbbnek kell lennie, meg hasznosabb is, minden fotós alkalmazás ezt használja). persze itt kezelni kell, ha kitörli a júzer a képet, de szerintem ez nem vészes

    Na, igen. Ez pont így működik, ha fel van töltve az adatbázis. De hogy töltöd fel? Először uis. üres.
    A képeket ugyanígy oldottam (volna) meg, jelenleg csak a hivatkozásoknál tartok - vagyis bármilyen file-t tudok tárolni, akár képet is.
    ((Mondjuk én lehet, h. tárolnék egy másolatot a képről, vagy egy thumbnail-t; külön helyen))

  • eastsider
    nagyúr

    A tabos elképzelés ott halt meg, hogy valójában ezek a listák egymásba lesznek öltve. Vegyünk egy idióta példát:
    beírsz egy könyvet: Egri Csillagok
    kiválasztod az írót: Gárdonyi Géza
    de közben megnézed a többi könyvét: szűkített lista, benne Tüskevár
    Jé, ezt nem is ő írta, kiválasztod az írót: Írók listája
    Jé, nincs benne Fekete István
    Író hozzáadása: Fekete István...
    És így tovább a végtelenségig.

    Én csináltam egy ListFragmentet, és egy EditFragmentet. Most jön a következő probléma: ezek a különböző táblák esetében 90%-ban egyformák lesznek. Tehát csináltam egy General... Fragment-szettet, és ebből származtattam le az egyes tábláknak megfelelő tényleges Fragmenteket.
    Akkor jött a következő probléma: ezek a spéci, egymásra hivatkozó mezők igazából új változótípusnak felelnek meg, ezért alkottam belőlük új változókat.
    Hopp: és a végeredmény egy felxibilis rendszer, akárhány táblával, könnyen változtatható felépítéssel... viszont egy igen kövér, és sokrétű kóddal. És a legnagyobb vicc, hogy engem tulképp csak az export/import funkcionalitás érdekelt :)

    Az a baj, hogy az sqlite nagyon jó. Az android nagyon jó. A kettőt összekötő híd viszont kompletten hiányzik. Mármint a UserInterface oldala, mert amúgy a program adatainak tárolására elég könnyen használható.

    De ez csak a magánvéleményem.
    És azért teszem itt közzé, mert a fentebb közzétett programhoz tartozik.

    nem egészen így lesz a programom
    inkább úgy, hogy van egy író, aminek több könyve van, de egy könyvet csak egy ír
    szóval rámegyek, hogy Gárdonyi Géza, és kijön az egri csillagok, meg az összes könyve Gárdonyinak, szóval pont fordítva írtad, ahogy én elképzeltem :)

    azt tervesztem,

    A eset:
    hogy alapból az lenne, hogy alapból van ugye két tab, egyiken az összes író, ha átlapozok a másikra az behúzza az összes íróhoz tartozó összes könyvet, ugyanis lehet valaki csak a könyvek között szeretne böngészni, mert pl nem tudjam ki írta, csak a címét.. (nem túl életszerű példa, de a programomnál nagyon is)

    B eset:
    rákattintok egy íróra és behúzza a az ahhoz az íróhoz tartozó könyveket (amiket ő írt). vagyis a JOINolt mezőket.

    utánanéztem kicsit, és lehet futásidőben cserélgetni a tabok tartalmát, úgy hogy a felhasználó ne vegye észre, csak a tartalom változzon (a fragment, de tabokon ne látszódjon semmi)
    [link]
    [link]

    más: foglalkoztál már kamerával készített kép SQLiteban való letárolásával (és lekérdezésével)?
    szerintme BLOB helyett az útvonalat fogom letárolni (ahogy néztem ennek egyszerűbbnek kell lennie, meg hasznosabb is, minden fotós alkalmazás ezt használja). persze itt kezelni kell, ha kitörli a júzer a képet, de szerintem ez nem vészes

  • thon73
    tag

    köszi!
    értem mire gondolsz! szerintem így fogom csinálni, mert pont ezen gondolkoztam, hogy fogom megcsinálni a több féle listázást, néztem a metódusokat, de arra jutottam, hogy sehogy (csak simán átgondolva jutottam erre...), nyilván megoldható, csak szívás ahogy írtad. már össze is állt nagyjából a fejemben hogy fogom véghez vinni ezt.

    illetve mivan akkor, ha rámegyek egy íróra, átugrik a másik fragmentre, akkor ugye a hozzá tartozó (ID-jű) rekordokat hozná be, de mivan akkor, ha az még üres? akkor úgy lenne a jó ha alapból felhozná a dialogot, és az adott Foreign Keyjel létrehozhatna egy képet. bár ez szerintem simán megoldható egy getcount()-al...

    illetve szerintem itt megpusztult a tabos elképzelésem, jól értem? mert így már 3 fragment kellene, az meg fura lenne így, vagyis nem lenne funkcionális

    A tabos elképzelés ott halt meg, hogy valójában ezek a listák egymásba lesznek öltve. Vegyünk egy idióta példát:
    beírsz egy könyvet: Egri Csillagok
    kiválasztod az írót: Gárdonyi Géza
    de közben megnézed a többi könyvét: szűkített lista, benne Tüskevár
    Jé, ezt nem is ő írta, kiválasztod az írót: Írók listája
    Jé, nincs benne Fekete István
    Író hozzáadása: Fekete István...
    És így tovább a végtelenségig.

    Én csináltam egy ListFragmentet, és egy EditFragmentet. Most jön a következő probléma: ezek a különböző táblák esetében 90%-ban egyformák lesznek. Tehát csináltam egy General... Fragment-szettet, és ebből származtattam le az egyes tábláknak megfelelő tényleges Fragmenteket.
    Akkor jött a következő probléma: ezek a spéci, egymásra hivatkozó mezők igazából új változótípusnak felelnek meg, ezért alkottam belőlük új változókat.
    Hopp: és a végeredmény egy felxibilis rendszer, akárhány táblával, könnyen változtatható felépítéssel... viszont egy igen kövér, és sokrétű kóddal. És a legnagyobb vicc, hogy engem tulképp csak az export/import funkcionalitás érdekelt :)

    Az a baj, hogy az sqlite nagyon jó. Az android nagyon jó. A kettőt összekötő híd viszont kompletten hiányzik. Mármint a UserInterface oldala, mert amúgy a program adatainak tárolására elég könnyen használható.

    De ez csak a magánvéleményem.
    És azért teszem itt közzé, mert a fentebb közzétett programhoz tartozik.

  • eastsider
    nagyúr

    Én ezt egy cseppet átgondolnám.

    Csak a saját elgondolásomat tudom közreadni. A tekercs/kép párosnál nekem az író/könyv jobban kézreáll, de ez tetszőlegesen behelyettesíthető...
    Tehát:
    Van az ÍRÓK tábla (vagy TEKERCS), ami nem hivatkozik senkire.
    Van a KÖNYVEK tábla (vagy KÉPEK), ami hivatkozik EGYETLEN ÍRÓRA (vagy EGYETLEN TEKERCSRE)

    Ha ez utóbbit listában akarod megjeleníteni, akkor JOIN táblát érdemes használni, hogy lásd a könyv íróját vagy a kép tekercsét is egyúttal. Technikailag javaslom, hogy kiválasztásnál mindig egy új, részleteket mutató Fragmentet hozz létre. Ezt a Backstackra rakhatod, és akkor könnyű visszaugrani a listához. Egy másik elem kiválasztása nem ennek a Fragment-példánynak a mezőit változtatja, hanem létrehoz egy újat.
    ((Nehéz lesz megoldani egyébként az ÍRÓ (TEKERCS) kiválasztását innen - de nem lehetelen, csak dolgozni kell vele.)) A másik buktató a fragmentek egymás melletti/feletti megjelenítése, de az sem lehetetlen.

    Amikor viszont az ÍRÓK/TEKERCSEK listában vagy, akkor lehet, hogy szeretnéd megnézni, hogy mely könyveket írta/képeket tartalmazza. Na, ebben az esetben kell a KÖNYVEK/KÉPEK listát úgy megjeleníteni, hogy szűkítjük a listát a megfelelő íróra/tekercsre.

    Hozzáteszem, hogy úgy tapasztaltam, majdnem minden megoldható az sqlite szintjén is, vagy a program szintjén is. Ha univerzáslis megoldásra van szükség, akkor szerintem az sqlite kihasználása gyorsabb, áttekinthetőbb, biztonságosabb; míg speciális esetekben (pl. statikus adathalmaz, speciális - ékezetes - keresések) érdemes/szükséges kódot írni, ami néha!! gyorsabb lehet.

    Amúgy én pont ezen küzdöttem végig magam, nem minden pontja volt egyszerű, hibátlan és magától értetődő, de már egész jól működik. Szívesen segítek.

    köszi!
    értem mire gondolsz! szerintem így fogom csinálni, mert pont ezen gondolkoztam, hogy fogom megcsinálni a több féle listázást, néztem a metódusokat, de arra jutottam, hogy sehogy (csak simán átgondolva jutottam erre...), nyilván megoldható, csak szívás ahogy írtad. már össze is állt nagyjából a fejemben hogy fogom véghez vinni ezt.

    illetve mivan akkor, ha rámegyek egy íróra, átugrik a másik fragmentre, akkor ugye a hozzá tartozó (ID-jű) rekordokat hozná be, de mivan akkor, ha az még üres? akkor úgy lenne a jó ha alapból felhozná a dialogot, és az adott Foreign Keyjel létrehozhatna egy képet. bár ez szerintem simán megoldható egy getcount()-al...

    illetve szerintem itt megpusztult a tabos elképzelésem, jól értem? mert így már 3 fragment kellene, az meg fura lenne így, vagyis nem lenne funkcionális

  • thon73
    tag

    közbe meglett a hiba. csak a nexus 7 2013 amin tesztelek nem dobott semmi exceptiont... a hiba az volt, hogy nem jó sorrendben volt a checkColumns metódus.... mostmár megy...
    azt találtam ki, hogy a listview-n setOnItemClickListener-t állíok, és ekkor, ha egy elemre kattintok, akkor betöltse a hozzá tartozó elemeket ami egy másik táblából jön.
    és mivel tabos az alkalmazásom onActivityCreatednél a másik tab kilistázza az összes lehetséges elemet, ami a másik táblák alatt van.. nem tudom jól megfogalmazni :)
    szóval van egy filmek tábla, és van egy képek tábla, egy filmben van több kép, egy kép egy filmhez tarozik, de több kép tartozik egy filmhez

    Én ezt egy cseppet átgondolnám.

    Csak a saját elgondolásomat tudom közreadni. A tekercs/kép párosnál nekem az író/könyv jobban kézreáll, de ez tetszőlegesen behelyettesíthető...
    Tehát:
    Van az ÍRÓK tábla (vagy TEKERCS), ami nem hivatkozik senkire.
    Van a KÖNYVEK tábla (vagy KÉPEK), ami hivatkozik EGYETLEN ÍRÓRA (vagy EGYETLEN TEKERCSRE)

    Ha ez utóbbit listában akarod megjeleníteni, akkor JOIN táblát érdemes használni, hogy lásd a könyv íróját vagy a kép tekercsét is egyúttal. Technikailag javaslom, hogy kiválasztásnál mindig egy új, részleteket mutató Fragmentet hozz létre. Ezt a Backstackra rakhatod, és akkor könnyű visszaugrani a listához. Egy másik elem kiválasztása nem ennek a Fragment-példánynak a mezőit változtatja, hanem létrehoz egy újat.
    ((Nehéz lesz megoldani egyébként az ÍRÓ (TEKERCS) kiválasztását innen - de nem lehetelen, csak dolgozni kell vele.)) A másik buktató a fragmentek egymás melletti/feletti megjelenítése, de az sem lehetetlen.

    Amikor viszont az ÍRÓK/TEKERCSEK listában vagy, akkor lehet, hogy szeretnéd megnézni, hogy mely könyveket írta/képeket tartalmazza. Na, ebben az esetben kell a KÖNYVEK/KÉPEK listát úgy megjeleníteni, hogy szűkítjük a listát a megfelelő íróra/tekercsre.

    Hozzáteszem, hogy úgy tapasztaltam, majdnem minden megoldható az sqlite szintjén is, vagy a program szintjén is. Ha univerzáslis megoldásra van szükség, akkor szerintem az sqlite kihasználása gyorsabb, áttekinthetőbb, biztonságosabb; míg speciális esetekben (pl. statikus adathalmaz, speciális - ékezetes - keresések) érdemes/szükséges kódot írni, ami néha!! gyorsabb lehet.

    Amúgy én pont ezen küzdöttem végig magam, nem minden pontja volt egyszerű, hibátlan és magától értetődő, de már egész jól működik. Szívesen segítek.

  • eastsider
    nagyúr

    Breakpointot próbáltál már rakni az onActivityCreated metódusba, hogy lásd pontosan melyik sor robban?

    Az "adott elem alá tartozó joinolt tábla" szerintem nem elég egzakt megfogalmazás... Legalábbis számomra nem egyértelmű, az biztos. Két táblát összejoinolsz, és WHERE feltétellel szűröd az elem kulcsa alapján?

    közbe meglett a hiba. csak a nexus 7 2013 amin tesztelek nem dobott semmi exceptiont... a hiba az volt, hogy nem jó sorrendben volt a checkColumns metódus.... mostmár megy...
    azt találtam ki, hogy a listview-n setOnItemClickListener-t állíok, és ekkor, ha egy elemre kattintok, akkor betöltse a hozzá tartozó elemeket ami egy másik táblából jön.
    és mivel tabos az alkalmazásom onActivityCreatednél a másik tab kilistázza az összes lehetséges elemet, ami a másik táblák alatt van.. nem tudom jól megfogalmazni :)
    szóval van egy filmek tábla, és van egy képek tábla, egy filmben van több kép, egy kép egy filmhez tarozik, de több kép tartozik egy filmhez

  • Karma
    félisten

    Sziasztok!

    szenvedek még mindig a ContentProviderrel, és a loadermanagerrel

    így néz ki a logcatom:
    04-06 18:06:49.994: I/Contentxprovider(3652): onCreate
    04-06 18:06:50.114: I/MAIN(3652): onCreate
    04-06 18:06:50.144: V/TabsPagerAdapter(3652): clicked
    04-06 18:06:50.174: I/FilmFragment(3652): onAttach
    04-06 18:06:50.204: I/FilmFragment(3652): Loader<Cursor>
    04-06 18:06:50.204: I/FilmFragment(3652): Loader<Cursor>
    04-06 18:06:50.204: I/FilmFragment(3652): onActivityCreated

    és ennyi... simán kilép, ki se írja az FC-t semmi...

    van a contentproviderbe 2 tábla, ami joinolva van egymáshoz....
    ez egy listfragment, és úgy terveztem, hogy a joinolt táblát egy másik listfragmenten jelenítem meg
    szóval a OnListItemClick-re behozza a joinolt táblát, ami az adott item alá tartozik
    lehet rosszul gondoltam, és ide más megoldás kell? ha igen,mi?

    Breakpointot próbáltál már rakni az onActivityCreated metódusba, hogy lásd pontosan melyik sor robban?

    Az "adott elem alá tartozó joinolt tábla" szerintem nem elég egzakt megfogalmazás... Legalábbis számomra nem egyértelmű, az biztos. Két táblát összejoinolsz, és WHERE feltétellel szűröd az elem kulcsa alapján?

  • eastsider
    nagyúr

    Sziasztok!

    szenvedek még mindig a ContentProviderrel, és a loadermanagerrel

    így néz ki a logcatom:
    04-06 18:06:49.994: I/Contentxprovider(3652): onCreate
    04-06 18:06:50.114: I/MAIN(3652): onCreate
    04-06 18:06:50.144: V/TabsPagerAdapter(3652): clicked
    04-06 18:06:50.174: I/FilmFragment(3652): onAttach
    04-06 18:06:50.204: I/FilmFragment(3652): Loader<Cursor>
    04-06 18:06:50.204: I/FilmFragment(3652): Loader<Cursor>
    04-06 18:06:50.204: I/FilmFragment(3652): onActivityCreated

    és ennyi... simán kilép, ki se írja az FC-t semmi...

    van a contentproviderbe 2 tábla, ami joinolva van egymáshoz....
    ez egy listfragment, és úgy terveztem, hogy a joinolt táblát egy másik listfragmenten jelenítem meg
    szóval a OnListItemClick-re behozza a joinolt táblát, ami az adott item alá tartozik
    lehet rosszul gondoltam, és ide más megoldás kell? ha igen,mi?

  • thon73
    tag

    A broadcast-okkal megy is szépen, a példaprogramokban is broadcast-ok szerepelnek, csak éppen a rendszer által indítottak.
    Lehet, hogy nekem is broadcastolni kellene az activity-ben, ha valami változik? Hm. Ez egy megfontolandó ötlet, köszi.

    Amúgy a Loader-ekkel én is csak ismerkedés szintjén "játszom". Van egy file-ban tárolt adathalmaz, aminek a beolvasása kb. 4-5 sec. Ezt akartam beletenni Loader-be. Ez - a felhasználó oldaláról - statikus adathalmaz, tehát nincs mit figyelni. Az én (tesztelő) oldalamról van lehetőség a változtatásra, de akkor újramenti a teljes megváltoztatott adatbázist (mert módosításkor az összefüggő adatok miatt a nagyrésze megváltozik). Ettől függetlenül arra voltam kíváncsi, hogy ha én változtatok a külső adatokon az Activity-ben (bocsánat -ból), akkor hogyan értesülhet erről a Loader.
    A fenti (mostmár két) megoldáson kívül még egy érdekes osztályt találtam: a FileObserver-t. De az még bonyolultabbnak tűnt.

    Ami még gondnak tűnik nekem: végső soron a Loader-rel is be kell olvasnom mindent, ahhoz, hogy a lista eleje megjelenjen. Ez amúgy logikus (mert nem biztos, hogy a lista eleje töltődik be először), de a várakozási idő ugyanúgy megvan (csak pörög az óra...)

    Egy apró kiegészítés: megcsináltam broadcsat publish-sel. Ez tényleg pofonegyszerű, öszesen 3 sor. Ez a legjobb!

  • thon73
    tag

    Nekem személy szerint a loaderek csak a TODO listámon vannak, nem tanultam ki őket még. De azon filóztm, hogy miért nem használod ki a broadcastokat arra, hogy jelzéseket szórjanak adatváltozáskor, amire a Loader példány feliratkozik, és onContentChangedet hív magán?

    A broadcast-okkal megy is szépen, a példaprogramokban is broadcast-ok szerepelnek, csak éppen a rendszer által indítottak.
    Lehet, hogy nekem is broadcastolni kellene az activity-ben, ha valami változik? Hm. Ez egy megfontolandó ötlet, köszi.

    Amúgy a Loader-ekkel én is csak ismerkedés szintjén "játszom". Van egy file-ban tárolt adathalmaz, aminek a beolvasása kb. 4-5 sec. Ezt akartam beletenni Loader-be. Ez - a felhasználó oldaláról - statikus adathalmaz, tehát nincs mit figyelni. Az én (tesztelő) oldalamról van lehetőség a változtatásra, de akkor újramenti a teljes megváltoztatott adatbázist (mert módosításkor az összefüggő adatok miatt a nagyrésze megváltozik). Ettől függetlenül arra voltam kíváncsi, hogy ha én változtatok a külső adatokon az Activity-ben (bocsánat -ból), akkor hogyan értesülhet erről a Loader.
    A fenti (mostmár két) megoldáson kívül még egy érdekes osztályt találtam: a FileObserver-t. De az még bonyolultabbnak tűnt.

    Ami még gondnak tűnik nekem: végső soron a Loader-rel is be kell olvasnom mindent, ahhoz, hogy a lista eleje megjelenjen. Ez amúgy logikus (mert nem biztos, hogy a lista eleje töltődik be először), de a várakozási idő ugyanúgy megvan (csak pörög az óra...)

  • Karma
    félisten

    XX egy osztály, aminek van egy metódusa, hogy toString, és az csinálja azt a formátumot.

    Akkor az a JSON szempontjából igencsak irreleváns. Ha nem akarod parsolni ebben a programban, akkor akár magad is írhatsz egy toJSON metódust: majdnem ugyanolyan mint a toStringed, csak kapcsoszárójel van körülötte, a mezőnevek idézőjelben vannak, és vessző az elválasztó.

  • h1ght3chzor
    őstag

    Most akkor XX az valami osztály, vagy String? Az előbbi tagmondat erre, a thises történet amarra utal.

    Ha osztályok, akkor használd a Gson nevű lubet, gyorsan érhetsz el vele jó eredményeket. Csak a listára kell hívnod egy Gson.toJson-t.

    Ha stringek, igazából akkor is ugyanez, de nem ártana kicsit elgondolkodni az adatmodellen.

    XX egy osztály, aminek van egy metódusa, hogy toString, és az csinálja azt a formátumot.

  • Karma
    félisten

    Sziasztok!

    Van egy List<XX> list-em, amiben így tárolom a dolgokat: "A: " + this.a+ "; B: " + this.b+ "...

    Bluetooth-on keresztül kellene ezt átküldenem, hogyan érdemes belőle JSON-t csinálni?

    Köszönöm!
    Üdv

    Most akkor XX az valami osztály, vagy String? Az előbbi tagmondat erre, a thises történet amarra utal.

    Ha osztályok, akkor használd a Gson nevű lubet, gyorsan érhetsz el vele jó eredményeket. Csak a listára kell hívnod egy Gson.toJson-t.

    Ha stringek, igazából akkor is ugyanez, de nem ártana kicsit elgondolkodni az adatmodellen.

  • h1ght3chzor
    őstag

    Sziasztok!

    Van egy List<XX> list-em, amiben így tárolom a dolgokat: "A: " + this.a+ "; B: " + this.b+ "...

    Bluetooth-on keresztül kellene ezt átküldenem, hogyan érdemes belőle JSON-t csinálni?

    Köszönöm!
    Üdv

  • Karma
    félisten

    Ilyen nehezet kérdeztem, vagy mindenki békésen szunnyad az ebéd(ek) után? :))

    Saját fejem törésével erre jutottam: Van itten egy olyan, hogy a LoaderManager-től le tudom kérdezni az aktív Loader-eket. Az Activity induláskor megnézi, hogy van-e Loader, s ha igen, akkor beregisztrálja magát (Uis. ilyenkor valaki már létrehozta a Loadert, pontosabban az előző megvalósulásunk hozta létre.) Záráskor szintúgy megnézi, csak éppen kiregisztrálja magát, - kiregisztrálTATja magát a megtalált Loader-rel az obszerválandók közül. Néha elgondolkodom, hogy télleg az Android Way a legegyenesebb-e?? :F

    Ha valaki látott már egyszerűbbet, akkor ne habozzon elmesélni...

    Teljesen más: Tudja valaki mi az a Samsung File-Stor Gadget? A nem létező UMS kapcsolatom SGSII 4.1.2 alatt ezzel mégis létezik. Ha tudnám, mi ez, rátenném a tabletre is... A szívemhez közel áll a Mass-Storage gyorsasága, és a proxy szerver sem zavarja...

    Nekem személy szerint a loaderek csak a TODO listámon vannak, nem tanultam ki őket még. De azon filóztm, hogy miért nem használod ki a broadcastokat arra, hogy jelzéseket szórjanak adatváltozáskor, amire a Loader példány feliratkozik, és onContentChangedet hív magán?

  • thon73
    tag

    Sziasztok!

    Egy érdekes problémával küszködök. AsyncTaskLoader-t készítettem, ami működik is. DE! A háttérben álló adatok az Activity-n keresztül változtathatóak meg, tehát az AsyncTaskLoader-nek valahogy az Activity-t kellene figyelnie, hogy mikor következik be változás.
    A gond akkor kezdődik, amikor elfordítom a készüléket, uis. ilyenkor egy új Activity keletkezik (és ettől a ponttól már ezt kellene figyelni, és a régit elengedni), ugyanakkor (ha jól értem a működést) az AsyncTaskLoader túlél, legfeljebb újraindul.
    Hogyan illik ezt elegánsan megcsinálni?
    Egy leegyszerűsített példában csak egy gombnyomással akarom szimulálni az adatváltozást. Az Observer az AsyncTaskLoader lenne, az Observable pedig az Activity (vagy a Button, de az előbbi egyszerűbb). Na de akkor hogyan tudná az Observable oldal magát kikapcsolni, meg aztán az új Activity-t visszakapcsolni? :F
    Meg tudja ezt valaki mondani? Vagy valami más ötlet esetleg?

    Ilyen nehezet kérdeztem, vagy mindenki békésen szunnyad az ebéd(ek) után? :))

    Saját fejem törésével erre jutottam: Van itten egy olyan, hogy a LoaderManager-től le tudom kérdezni az aktív Loader-eket. Az Activity induláskor megnézi, hogy van-e Loader, s ha igen, akkor beregisztrálja magát (Uis. ilyenkor valaki már létrehozta a Loadert, pontosabban az előző megvalósulásunk hozta létre.) Záráskor szintúgy megnézi, csak éppen kiregisztrálja magát, - kiregisztrálTATja magát a megtalált Loader-rel az obszerválandók közül. Néha elgondolkodom, hogy télleg az Android Way a legegyenesebb-e?? :F

    Ha valaki látott már egyszerűbbet, akkor ne habozzon elmesélni...

    Teljesen más: Tudja valaki mi az a Samsung File-Stor Gadget? A nem létező UMS kapcsolatom SGSII 4.1.2 alatt ezzel mégis létezik. Ha tudnám, mi ez, rátenném a tabletre is... A szívemhez közel áll a Mass-Storage gyorsasága, és a proxy szerver sem zavarja...

  • thon73
    tag

    Sziasztok!

    Egy érdekes problémával küszködök. AsyncTaskLoader-t készítettem, ami működik is. DE! A háttérben álló adatok az Activity-n keresztül változtathatóak meg, tehát az AsyncTaskLoader-nek valahogy az Activity-t kellene figyelnie, hogy mikor következik be változás.
    A gond akkor kezdődik, amikor elfordítom a készüléket, uis. ilyenkor egy új Activity keletkezik (és ettől a ponttól már ezt kellene figyelni, és a régit elengedni), ugyanakkor (ha jól értem a működést) az AsyncTaskLoader túlél, legfeljebb újraindul.
    Hogyan illik ezt elegánsan megcsinálni?
    Egy leegyszerűsített példában csak egy gombnyomással akarom szimulálni az adatváltozást. Az Observer az AsyncTaskLoader lenne, az Observable pedig az Activity (vagy a Button, de az előbbi egyszerűbb). Na de akkor hogyan tudná az Observable oldal magát kikapcsolni, meg aztán az új Activity-t visszakapcsolni? :F
    Meg tudja ezt valaki mondani? Vagy valami más ötlet esetleg?

Új hozzászólás Aktív témák

Hirdetés