Post recenti

Pagine: [1] 2 3 ... 10
1
View e Layout / collegamento tra spinner e listview
« Ultimo post da marco58 il Oggi alle 18:11 »
Salve a tutti,
il mio problema è il seguente: quando seleziono un valore dallo spinner, vorrei farlo visualizzare all'interno della listview, ma l'applicazione va in crash.
Grazie in anticipo.
Allego qui il codice:
Codice (Java): [Seleziona]
package it.uniba.di.gamm.sms16.giocapp.fragment;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toolbar;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


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

import it.uniba.di.gamm.sms16.giocapp.JSONParser;
import it.uniba.di.gamm.sms16.giocapp.R;

import static android.R.attr.value;
import static it.uniba.di.gamm.sms16.giocapp.R.id.spinnerCasaA;
import static it.uniba.di.gamm.sms16.giocapp.R.id.textView;


public class NewPartitaFragment extends Fragment {

    private static String url_all_giocatori = "http://giocapp.altervista.org/get_giocatori.php/";

    private static final String TAG_SUCCESS = "success";
    private static final String TAG_GIOCATORI = "Giocatore";
    private static final String TAG_ID_GIOCATORE = "IdGiocatore";
    private static final String TAG_COGNOME = "Cognome";
    private static final String TAG_NOME = "Nome";

    JSONParser jParser = new JSONParser();

    ArrayList<HashMap<Integer, String>> giocatoriList;
    String[] spinnerArray;
    String[] spinnerArrayGC;
    HashMap<Integer,String> giocatoriMap;
    HashMap<Integer,String> selectedGiocatoriMap;

    ArrayAdapter<String> adapterGCasa1;
    String idGiocatoreCasa1;
    // products JSONArray
    JSONArray giocatori = null;

    View view;
    Spinner spinnerCasaA1;
    Spinner spinnerCasaB1;
    Spinner spinnerOspA1;
    Spinner spinnerOspB1;
    ListView lstCasa1;
    ListView lstOsp1;
    EditText txtSquadraCasa1;
    EditText txtSquadraOsp1;

    String nomeGiocatoreSel;

    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        // Hashmap for ListView
        new LoadAllGiocatori().execute();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.onViewCreated(view, savedInstanceState);
        getActivity().setTitle("Nuova partita");
        giocatoriList = new ArrayList<HashMap<Integer, String>>();
        selectedGiocatoriMap= new HashMap<Integer, String>();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,  @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_new_partita, container, false);
        //Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbarMain);

        txtSquadraCasa1 = (EditText) view.findViewById(R.id.txtSquadraCasa);
        txtSquadraOsp1 = (EditText) view.findViewById(R.id.txtSquadraOsp);
        lstCasa1 = (ListView) view.findViewById(R.id.lstCasa);
        lstOsp1 = (ListView) view.findViewById(R.id.lstOsp);
        spinnerCasaA1 = (Spinner) view.findViewById(R.id.spinnerCasaA);
        spinnerCasaB1 = (Spinner) view.findViewById(R.id.spinnerCasaB);
        spinnerOspA1 = (Spinner) view.findViewById(R.id.spinnerOspA);
        spinnerOspB1 = (Spinner) view.findViewById(R.id.spinnerOspB);

        //toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        /**@Override
        public void onClick(View v) {
        getActivity().getFragmentManager().popBackStack();
        }
        });*/


        /**mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
         final ImageButton btnOpenDrawer = (ImageButton) getView().findViewById(R.id.drawer_layout);

         btnOpenDrawer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        mDrawerLayout.openDrawer(Gravity.LEFT);
        }
        });*/


        return view;

    }

    class LoadAllGiocatori extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         */

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /**
         * getting All giocatori from url
         */

        protected String doInBackground(String... args) {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_giocatori, "GET", params);

            // Check your log cat for JSON reponse
            Log.d("All Giocatori: ", json.toString());

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    giocatori = json.getJSONArray(TAG_GIOCATORI);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // looping through All Products

                    spinnerArray = new String[ giocatori.length()];
                    giocatoriMap = new HashMap<Integer, String>();
                    for (int i = 0; i <  giocatori.length(); i++)
                    {
                        JSONObject c = giocatori.getJSONObject(i);
                        int idTmp= c.getInt(TAG_ID_GIOCATORE);
                        giocatoriMap.put(idTmp,  c.getString(TAG_COGNOME) + " " + c.getString(TAG_NOME));
                        spinnerArray[i] =  c.getString(TAG_COGNOME) + " " + c.getString(TAG_NOME);
                    }
                    giocatoriList.add(giocatoriMap);



                    /*for (int i = 0; i < giocatori.length(); i++) {
                        JSONObject c = giocatori.getJSONObject(i);

                        // Storing each json item in variable
                        String id = c.getString(TAG_ID_GIOCATORE);
                        String cognome = c.getString(TAG_COGNOME);
                        String nome = c.getString(TAG_NOME);

                        // adding each child node to HashMap key => value
                        map.put(TAG_ID_GIOCATORE, id);
                        map.put(TAG_COGNOME, cognome + " " + nome);

                        // adding HashList to ArrayList
                        giocatoriList.add(map);
                    } */

                } else {
                    // no products found
                    // Launch Add New product Activity
                    /**Intent i = new Intent(getApplicationContext(),
                     NewProductActivity.class);
                     // Closing all previous activities
                     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                     startActivity(i);*/

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

            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         **/

        protected void onPostExecute(String file_url) {
            /**ListAdapter sAdap;
                    sAdap = new SimpleAdapter(view.getContext(), giocatoriList,
                            R.layout.fragment_show_new_partita, new String[]{TAG_ID_GIOCATORE, TAG_COGNOME},
                            new int[]{R.id.ColId, R.id.ColGiocatore});
                    spinnerCasaA1.setAdapter((SpinnerAdapter) sAdap);
            **/

            ArrayAdapter<String> adapter =new ArrayAdapter<String>(view.getContext(),android.R.layout.simple_spinner_item, spinnerArray);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinnerCasaA1.setAdapter(adapter);
            spinnerOspA1.setAdapter(adapter);

            spinnerCasaA1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                    nomeGiocatoreSel = spinnerCasaA1.getSelectedItem().toString();
                    idGiocatoreCasa1 = giocatoriMap.get(spinnerCasaA1.getSelectedItemPosition());

                    spinnerArrayGC= new String[11];
                    selectedGiocatoriMap.put(0,  idGiocatoreCasa1);
                    //spinnerArrayGC[1] =  nomeGiocatoreSel;
                    giocatoriList.add(selectedGiocatoriMap);

                    adapterGCasa1 = new ArrayAdapter<String>(view.getContext(),android.R.layout.simple_spinner_item, spinnerArray);
                    adapterGCasa1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    lstCasa1.setAdapter(adapterGCasa1);

                }

                @Override
                public void onNothingSelected(AdapterView<?> parentView) {
                    // your code here
                }
            });

            //spinnerCasaA1.setOnTouchListener(spinnerOnTouch);
            //spinnerCasaA1.setOnKeyListener(spinnerOnKey);


        }

    }

    private View.OnTouchListener spinnerOnTouch = new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
               //YOUR CODE
                //lstCasa1.add();
            }
            return false;
        }
    };
    private static View.OnKeyListener spinnerOnKey = new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
                //your code
                return true;
            } else {
                return false;
            }
        }
    };
}
2
Gestione dei media / Compressione file audio
« Ultimo post da ChaliceOfTheVoid il Oggi alle 12:21 »
Ciao ragazzi, sto cercando di non appesantire troppo un app caricando al suo interno dei file audio, mi sapreste dire quali sono i migliori formati in relazione al rapporto qualità/peso? Sono file audio della durata di 15/30 secondi.

Aggiungo: Ho letto che gli Ogg Vorbis sono come un formato MP3 ma leggermente migliorato e di grandezza simile. Una possibilità sarebbe quella di abbassare il bitrate degli MP3, non eccissavamente da perdere molta qualità del suono.

Grazie per l'aiuto.
3
View e Layout / Re:Array di stringhe ANR su alcuni dispositivi
« Ultimo post da Ohmnibus il 16 Ottobre 2017, 09:17:25 CEST »
L'errore riportato è molto anomalo: "getStringArray" non è un metodo particolarmente lento dal quale ci si può aspettare un ANR, ma considera questo: l'ANR viene sollevato quanto l'applicazione non "risponde" entro 5 secondi, questo significa che di fatto la "lentezza" può essere altrove e, per qualche ragione, l'accesso alle risorse diventa la goccia che fa traboccare il vaso.

Esempio: Supponiamo che nella tua app ci sia un metodo che, per certi dispositivi un po' più lenti, richiede 4,9 secondi, mentre la getStringArray ne impiega 0,2 secondi. L'ANR viene sollevato dopo 5 secondi, che ricadono esattamente durante l'esecuzione della getStringArray, ma il vero problema è il metodo da 4,9 secondi.

Ti suggerisco quindi di analizzare tutte le chiamate effettuate nella BeerColor.onCreateView prima di getStringArray e cercare lì il problema.
4
Ciao, dunque alla fine ho risolto (temporaneamente) così:

Codice (Java): [Seleziona]
                public void run() {
                        try {
                                //double counter=0;
                                byte[] buffer;
                                //Log.d(TAG,"Start run()");
                                super.run();
                                while(!isInterrupted()) {

                                        //counter+=1;
                                        int size;
                                        try {
                                                if (this.inStream == null) return;

                                                if (isInterrupted()) {
                                                        throw new InterruptedException("thread blocked");
                                                }

                                                size=this.inStream.available();
                                                buffer = new byte[size];
                                                size = this.inStream.read(buffer);

                                                if (size > 1 & !isInterrupted()) {
                                                        //              Log.d(TAG,"Valid size, reading barcode....");
                                                        onDataReceived(buffer, size,true);
                                                }

                                                //Fermo l'esecuzione per 1/4 di secondo
                                                Thread.sleep(250);

                                        } catch (InterruptedException e) {
                                                Log.d(TAG,e.getMessage()+" on thread");
                                        } catch (IOException e) {
                                                Log.d(TAG,e.getMessage());
                                                e.printStackTrace();
                                                return;
                                        }
                                }
                        } catch (Exception e) {
                                Log.d(TAG,e.getMessage());
                                e.printStackTrace();
                                return;
                        }
                }

A quanto pare con il metodo "available()" l'input stream non si blocca sul metodo read(), ma prosegue il loop. Grazie al Thread.sleep() ottimizzo l'esecuzione facendo solo 4 cicli al secondo. Dico temporaneamente perchè la realizzazione di Ohmnibus è sicuramente più giusta; innanzitutto aprirei un solo thread anzichè uno per activity e non avrei il ciclo che continua a girare consumando batteria, anche se 4 cicli al secondo non sono esagerati (in realtà devo ancora fare dei test in tal senso per vedere il consumo della batteria). La realizzazione del service però mi risulta più onerosa dal punto di vista del tempo (ci sono un po di casistiche che qui non ho descritto da gestire), quindi aspetto tempi migliori  ;-).
Per il momento chiudo.
Ciao e grazie
P
5
View e Layout / Array di stringhe ANR su alcuni dispositivi
« Ultimo post da swet90 il 15 Ottobre 2017, 10:08:17 CEST »
Salve a tutti ragazzi, ho di nuovo bisogno di voi, ho scritto un app e l' ho pubblicata sul play store, da qualche tempo, ricevo delle segnalazioni di ANR riguardo questa riga di codice:

Codice (Java): [Seleziona]
final String[] beerType=getResources().getStringArray(R.array.beerType);
su molti dispositivi che ho provato, l'app gira senza problemi, poi invece mi ritrovo con questi anr sul play store.

R.Array.beerType è così composto:

Codice (XML): [Seleziona]
<resources>
    <string name="OG">Densità iniziale: </string>
    <string name="FG">Densità finale: </string>
    <string name="Grado_Alcolico">Grado Alcolico: </string>
    <string name="InserisciBrixMosto">Inserisci il Brix del mosto</string>
    <string name="BrixDopoFermentazione">Grado Brix dopo fermentazione</string>
    <string name="OGMosto">Densità iniziale mosto </string>
    <string name="FGMosto">Densità finale mosto </string>
    <string name="GradoSRM">Inserisci il grado SRM della tua birra </string>
    <string name="btnCalcola">Calcola</string>
    <string name="btnEBC">Verifica</string>
    <string name="in_Bottiglia">in bottiglia: </string>
    <string name="app_name">Beer Calculator</string>
    <string name="action_settings">Impostazioni</string>
    <string name="CheckCorrectText">Si è verificato un errore, assicurati di aver inserito tutti i dati</string>
    <string name="PageGravityTitle">Densità</string>
    <string name="PageBrixTitle">Brix</string>
    <string name="PageColorTitle">Verifica Colore</string>

    <string name="section_format">Hello World from section: %1$d</string>
    <!--<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>--><!--TEST-->

    <!-- TODO: Remove or change this placeholder text -->
    <string name="hello_blank_fragment">Hello blank fragment</string>
    <array name="beerType">
        <item></item>                               <!--0-->
        <item></item>                               <!--1-->
        <item>Molto chiaro</item>                      <!--2-->
        <item>Molto chiaro, Chiaro</item>                <!--3-->
        <item>Chiaro</item>                           <!--4-->
        <item>Oro</item>                           <!--5-->
        <item>Oro, Ambra (giallo marroncino)</item>  <!--6-->
        <item>Ambra (giallo marroncino)</item>        <!--7-->
        <item>Ambra scuro/rame chiaro</item>        <!--8-->
        <item>Rame (marrone rosso)</item>         <!--9-->
        <item>Rame scuro/marrone chiaro</item>        <!--10-->
        <item>Marrone</item>                          <!--11-->
        <item>Marrone scuro</item>                     <!--12-->
        <item>Marrone molto scuro</item>                <!--13-->
        <item>Nero</item>                          <!--14-->
        <item>Nero, opaco</item>                  <!--15-->

    </array>
</resources>


mentre il rapporto sull'arresto anomalo é questo:

Codice: [Seleziona]
at android.content.res.Resources.getStringArray (Resources.java:1746)
  at davide.com.beercalculator.BeerColor.onCreateView (BeerColor.java:47)
  at android.support.v4.app.Fragment.performCreateView (Fragment.java:2184)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1298)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible (FragmentManager.java:2323)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2136)
  at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps (FragmentManager.java:2092)
  at android.support.v4.app.FragmentManagerImpl.execSingleAction (FragmentManager.java:1969)
  at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss (BackStackRecord.java:620)
  at android.support.v4.app.FragmentPagerAdapter.finishUpdate (FragmentPagerAdapter.java:143)
  at android.support.v4.view.ViewPager.populate (ViewPager.java:1268)
  at android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:668)
  at android.support.v4.view.ViewPager.setCurrentItemInternal (ViewPager.java:630)
  at android.support.v4.view.ViewPager.setCurrentItem (ViewPager.java:611)
  at android.support.design.widget.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected (TabLayout.java:2178)
  at android.support.design.widget.TabLayout.dispatchTabSelected (TabLayout.java:1155)
  at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1148)
  at android.support.design.widget.TabLayout.selectTab (TabLayout.java:1118)
  at android.support.design.widget.TabLayout$Tab.select (TabLayout.java:1413)
  at android.support.design.widget.TabLayout$TabView.performClick (TabLayout.java:1523)
  at android.view.View$PerformClick.run (View.java:22596)
  at android.os.Handler.handleCallback (Handler.java:739)
  at android.os.Handler.dispatchMessage (Handler.java:95)
  at android.os.Looper.loop (Looper.java:148)
  at android.app.ActivityThread.main (ActivityThread.java:7331)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1230)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1120)

non riesco a capire per quale motivo accada questo. Sapete aiutarmi?
6
Android Studio e Gradle / Creazione file, scrittura al suo interno e salvataggio
« Ultimo post da FeDe199324 il 14 Ottobre 2017, 14:49:58 CEST »
Ciao a tutti, sto creando la mia prima app android la quale permette di inserire tre valori in tre caselle di testo separate e dopo aver premuto il bottone "salva" dovrebbe salvare il contenuto di queste caselle su un file (che a sua volta dovrebbe venire memorizzato nella sd del cellulare); il mio problema è proprio come creare il file una volta premuto il bottone per salvare le informazioni inserite.. ho guardato mille tutorial ma quando premo il pulsante non mi viene  creato nessun file. Come posso fare? avete qualche suggerimento?

Grazie
7
Android Bar / Re:Dubbi su inserimento video pubblicitari
« Ultimo post da arlabs il 12 Ottobre 2017, 18:21:24 CEST »
Ciao Aldo,

I rewarded video da un po' sono supportati anche da Admob, puoi anche mettere in mediation altre piattaforme (come Chartboost).
Io ho fatto qualche test e sovente Admob risponde che non ci sono video disponibili, quindi il tuo utente potrebbe trovarsi a voler vedere video ma non trovarli a disposizione.

Ho visto giochi (come Asphalt 8) che ti propinano video a non finire. Quindi qualche piattaforma più fornita c'è, ma non ho guardato cosa usano loro (magari hanno preso accordi diretti, dopotutto GameLoft ha un certo peso).

Per quanto riguarda i pagamenti, dipende da video a video, possono pagare a view o per click. Alm momento da quello che ho visto il 99% di quelle Admob sono pagate a click.
In realtà a te non importa poi molto...

Ovviamente il rendimento è superiore ai banner o agli interstitial. Io ho visto RPM intorno ai 30$.

Ciao.
8
Activity, Fragment e Intent / Processing midi android
« Ultimo post da Gianmaria il 12 Ottobre 2017, 04:20:09 CEST »
Ciao a tutti, sono nuovo nell'ambiane android, vorrei creare una app basata su Processing,
Normalmente Processing ha un proprio compilatore per visualizzare gli sketch su android, ma necessito di utilizzare l'uscita midi usb del dispositivo, dunque ho riscritto il mio lavoro su processing per Android Studio, ho letto le reference riguardo android.media.midi, ma non riesco a capire dove e come inserire questa uscita midi nel codice.
Chiedo cortesemente se c'è qualcuno in grado di fornirmi un grande aiuto, per far comunicare questa app via midi?
Grazie!
Gianmaria


9
View e Layout / Bitmap da una VideoView/SurfaceView
« Ultimo post da christian13 il 11 Ottobre 2017, 23:30:59 CEST »
Ciao a tutti!
Nella mia applicazione visualizzo un livestreaming da url udp in una VideoView (potrei anche usare una SurfaceView).
Ho la necessità di prelevare in un determinato momento, un frame dalla VideoView e salvarlo ad esempio su una bitmap. Come potrei fare?

Grazie a tutti!
10
Activity, Fragment e Intent / Re:Visualizzazione riga dal database in un fragment
« Ultimo post da marco58 il 11 Ottobre 2017, 12:50:26 CEST »
Ho lanciato il debug e mi escono questi errori sul log:

Pagine: [1] 2 3 ... 10