Autore Topic: Creazione e utilizzo Provider (tutorial Massimo Carli)  (Letto 1030 volte)

Offline tanuccio85

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Creazione e utilizzo Provider (tutorial Massimo Carli)
« il: 09 Aprile 2011, 20:37:57 CEST »
0
Ciao ragazzi è da poco che mi diletto con Android -Ho seguito il tutorial Di Massimo Carli di come creare un Content Provider e come utilizzarlo su un Db.
Implementato il Mio Content Provider e il Db dell'esempio, quando vado a lanciare l'app mi dice non ci sono Team disponibili e non mi fà fare alcuna operazione qualcuno ha seguito questo esempio e può aiutarmi???
La cosa strana e che implemnto 3 layout ma lancia solo main.xml  ke appunto lancia a video un Empty Message

Se volete + informazioni sono quà

Grazie

Offline tanuccio85

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:Creazione e utilizzo Provider (tutorial Massimo Carli)
« Risposta #1 il: 10 Aprile 2011, 23:07:23 CEST »
0
Mi spiego meglio...provando a mandare in esecuzione i vari tutorial sui DB creati Da Massimo Carli. Mi Stampa a video Non ci sono Team(cioè Db Vuoto) ma non mi fà eseguire nessuna interazione col Db quando nel codice è previsto sia l'inserimento,la cancellazione e l'update.

Qualcuno conosce questi tutorial(credo di si)o devo riportare il codice???....Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Creazione e utilizzo Provider (tutorial Massimo Carli)
« Risposta #2 il: 11 Aprile 2011, 07:59:15 CEST »
0
Qualcuno conosce questi tutorial(credo di si)o devo riportare il codice???....Grazie

Mi spiace ma non mi è ancora capitata l'occasione di usare in modo approfondito i content provider.

Comunque ti consiglio di postare quanto più codice possibile, per aumentare la possibilità che qualcuno ti risponda.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tanuccio85

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:Creazione e utilizzo Provider (tutorial Massimo Carli)
« Risposta #3 il: 11 Aprile 2011, 12:50:22 CEST »
0
Allora visto che il problema me lo da anche sul tutorial del Db riporto completamente il progetto di Massimo Carli
Ripeto il mio "problema e che" mi da a video Db vuoto(come è giusto ke sia alla prima chiamata) ma poi nn mi fà eseguire nessuna interazione col Db

classe EditTeamActivity:
Codice (Java): [Seleziona]
public class EditTeamActivity extends Activity {
        /*
         * Identificatore del menu di salva
         */

        private final static int SAVE_MENU_OPTION = 0;
        /*
         * Identificatore del menu di annulla
         */

        private final static int CANCEL_MENU_OPTION = 1;

        // Riferimento ai diversi campi di editazione
        private EditText nameEdit;
        private EditText cityEdit;
        private EditText countryEdit;
        private EditText websiteEdit;

        // Oggetto da creare o editare
        private Team team;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.edit_layout);
                // Riferimento ai campi di editazione
                nameEdit = (EditText) findViewById(R.id.nameEdit);
                cityEdit = (EditText) findViewById(R.id.cityEdit);
                countryEdit = (EditText) findViewById(R.id.countryEdit);
                websiteEdit = (EditText) findViewById(R.id.webSiteEdit);
                // Verifichiamo la presenza di un dato associato all'intent di partenza
                Bundle teamBundle = getIntent().getBundleExtra("team");
                // Se diverso da null valorizziamo i vari campi
                if (teamBundle != null) {
                        team = (Team) teamBundle.getParcelable("team");
                        nameEdit.setText(team.name);
                        cityEdit.setText(team.city);
                        countryEdit.setText(team.country);
                        websiteEdit.setText(team.webSite);
                } else {
                        // Ne creiamo uno nuovo
                        team = new Team();
                }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Creiamo le due voci di salva ed annulla
                menu
                                .add(Menu.FIRST, SAVE_MENU_OPTION, Menu.FIRST,
                                                R.string.save_option);
                menu.add(Menu.FIRST + 1, CANCEL_MENU_OPTION, Menu.FIRST + 1,
                                R.string.cancel_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // A seconda dell'id dell'item selezionato eseguiamo
                // le corrispondenti operazioni
                int itemId = item.getItemId();
                if (itemId == SAVE_MENU_OPTION) {
                        // Dobbiamo passare le informazioni alla attività chiamante
                        Intent data = new Intent();
                        Bundle teamBundle = new Bundle();
                        team.name = nameEdit.getText().toString();
                        team.city = cityEdit.getText().toString();
                        team.country = countryEdit.getText().toString();
                        team.webSite = websiteEdit.getText().toString();
                        teamBundle.putParcelable("team", team);
                        data.putExtra("team", teamBundle);
                        setResult(Activity.RESULT_OK, data);
                        finish();
                        // La gestione della selezione dell'item e' finita
                        return true;
                } else if (itemId == CANCEL_MENU_OPTION) {
                        // Cancelliamo l'operazione chiamando finish
                        finish();
                        // La gestione della selezione dell'item e' finita
                        return true;
                } else {
                        // Rimandiamo alla gestione classica
                        return super.onOptionsItemSelected(item);
                }
        }

}


Classe TeamManagerActivity:
Codice (Java): [Seleziona]
public class TeamManagerActivity extends ListActivity {
        // Tag del Log
        private final static String TAG_LOG = "TeamManagerActivity";
        // Identificatore della versioe
        private final static int DB_VERSION = 1;
        // Identificatore del risultato di creazione
        private final static int CREATE_ACTIVITY_RESULT = 1;
        // Identificatore del risultato di update
        private final static int UPDATE_ACTIVITY_RESULT = 2;
        // Identificatore delle voci del Menu Contestuale
        private final static int DELETE_MENU_OPTION = 1;
        private final static int UPDATE_MENU_OPTION = 2;
        // Mapping tra i campi della tabella ed elementi del layout di riga
        private String[] FROMS = new String[] { TeamMetaData.NAME,
                        TeamMetaData.CITY, TeamMetaData.COUNTRY, TeamMetaData.WEB_SITE };
        private int[] TOS = new int[] { R.id.teamName, R.id.teamCity,
                        R.id.teamCountry, R.id.teamWebSite };
        /*
         * Riferimento al DB
         */

        private SQLiteDatabase db;
        /*
         * Cursore dei risultati
         */

        private Cursor cursor;
        /*
         * Riferimento all'Adpater
         */

        private CursorAdapter adapter;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                // Otteniamo il riferimento al DB in lettura e scrittura
                db = dbHelper.getWritableDatabase();
                // Eseguiamo la query per estrarre tutte le informazioni dalla
                // tabella
                cursor = db.query(TeamMetaData.TABLE_NAME, TeamMetaData.COLUMNS, null,
                                null, null, null, null);
                // Creiamo un Adapter con il cursore
                adapter = new SimpleCursorAdapter(this, R.layout.row_layout, cursor,
                                FROMS, TOS);
                // Lo assegnamo alla ListView
                getListView().setAdapter(adapter);
                // Registriamo il Menu Contesuale
                registerForContextMenu(getListView());
        }

        @Override
        protected void onStart() {
                super.onStart();
                updateListView();
        }
       
        @Override
        protected void onStop() {
                super.onStop();
                // Liberiamo le risorse del cursor
                cursor.deactivate();
        }      

        @Override
        protected void onDestroy() {
                super.onDestroy();
                // Chiudiamo il cursore
                cursor.close();
                // Chiudiamo il DB
                db.close();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // L'unico possibile menu e' quello di creazione per cui non serve
                // fare controlli
                menu.add(Menu.FIRST, Menu.FIRST, Menu.FIRST, R.string.create_option);
                // Lo visualizziamo
                return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                // Dobbiamo gestire l'Intent in questo modo perchè lo dobbiamo
                // eseguire con o startActivityForResult e non semplicemente come
                // Intent
                Intent createIntent = new Intent(this, EditTeamActivity.class);
                startActivityForResult(createIntent, CREATE_ACTIVITY_RESULT);
                return true;
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                // Creiamo il Menu da associare all'item
                int group = Menu.FIRST;
                menu.add(group, DELETE_MENU_OPTION, Menu.FIRST, R.string.delete_option);
                menu.add(group, UPDATE_MENU_OPTION, Menu.FIRST + 1,
                                R.string.update_option);
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                                .getMenuInfo();
                long teamId = info.id;
                switch (item.getItemId()) {
                case DELETE_MENU_OPTION:
                        // Lo cancelliamo
                        db = dbHelper.getWritableDatabase();
                        db.delete("TEAM", "_id=" + teamId, null);
                        // Aggiorniamo
                        updateListView();
                        return true;
                case UPDATE_MENU_OPTION:
                        // Dobbiamo inviarel'Intent con il Team alla Activity per
                        // l'editazione
                        Cursor tmpCursor = db.query(TeamMetaData.TABLE_NAME,
                                        TeamMetaData.COLUMNS, "_id=" + teamId, null, null, null,
                                        null);
                        if (tmpCursor.moveToNext()) {
                                Intent updateIntent = new Intent(this, EditTeamActivity.class);
                                Bundle teamBundle = new Bundle();
                                Team team = new Team();
                                team.id = teamId;
                                team.name = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.NAME));
                                team.city = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.CITY));
                                team.country = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.COUNTRY));
                                team.webSite = tmpCursor.getString(tmpCursor
                                                .getColumnIndex(TeamMetaData.WEB_SITE));
                                teamBundle.putParcelable("team", team);
                                updateIntent.putExtra("team", teamBundle);
                                startActivityForResult(updateIntent, UPDATE_ACTIVITY_RESULT);
                        }
                        return true;
                default:
                        return super.onContextItemSelected(item);
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (resultCode) {
                case Activity.RESULT_OK:
                        // Salviamo il risultato nel DB
                        Bundle extra = data.getBundleExtra("team");
                        Team team = (Team) extra.getParcelable("team");
                        // Li inseriamo nel DB
                        ContentValues values = new ContentValues();
                        values.put(TeamMetaData.NAME, team.name);
                        values.put(TeamMetaData.CITY, team.city);
                        values.put(TeamMetaData.COUNTRY, team.country);
                        values.put(TeamMetaData.WEB_SITE, team.webSite);
                        db = dbHelper.getWritableDatabase();
                        // A seconda del tipo di risposta facciamo un inserimento o un
                        // update
                        switch (requestCode) {
                        case CREATE_ACTIVITY_RESULT:
                                db.insert("TEAM", "web_site", values);
                                break;
                        case UPDATE_ACTIVITY_RESULT:
                                db.update("TEAM", values, "_id="+team.id, null);
                                break;
                        default:
                                break;
                        }
                default:
                        break;
                }
        }

        /*
         * Metodo di utilità che permettedi aggiornare il contenuto della ListView
         */

        private void updateListView() {
                // Diciamo al Cursor di rieseguire la query
                cursor.requery();
                // Notifichiamo le View associte agli adapter di fare il refresh
                adapter.notifyDataSetChanged();
        }

        private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "TEAM_DB", null, DB_VERSION) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(TAG_LOG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"TEAM\" (");
                        createQuery
                                        .append("           \"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
                        createQuery.append("        \"name\" TEXT NOT NULL,");
                        createQuery.append("        \"city\" TEXT NOT NULL,");
                        createQuery.append("        \"country\" TEXT NOT NULL,");
                        createQuery.append("        \"web_site\" TEXT");
                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(TAG_LOG, "Aggiornamento non implementato");
                }

        };

}
Classe Team:
Codice (Java): [Seleziona]
public class Team implements Parcelable {

        public static class TeamMetaData {

                public static String ID = "_id";
                public static String NAME = "name";
                public static String CITY = "city";
                public static String COUNTRY = "country";
                public static String WEB_SITE = "web_site";

                public static String TABLE_NAME = "Team";

                public static String[] COLUMNS = new String[] { ID, NAME, CITY,
                                COUNTRY, WEB_SITE };
        }

        public static final Parcelable.Creator<Team> CREATOR = new Parcelable.Creator<Team>() {

                @Override
                public Team createFromParcel(Parcel source) {
                        return new Team(source);
                }

                @Override
                public Team[] newArray(int size) {
                        return new Team[size];
                }

        };

        public long id;
        public String name;
        public String city;
        public String country;
        public String webSite;

        public Team() {

        }

        private Team(Parcel in) {
                id = in.readLong();
                name = in.readString();
                city = in.readString();
                country = in.readString();
                webSite = in.readString();
        }

        @Override
        public int describeContents() {
                return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int flags) {
                dest.writeLong(id);
                dest.writeString(name);
                dest.writeString(city);
                dest.writeString(country);
                dest.writeString(webSite);
        }

}

AndroidManifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="it.apogeo.android.cap08.teammanager"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TeamManagerActivity"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <activity android:name="EditTeamActivity"></activity>
</application>
    <uses-sdk android:minSdkVersion="4" />

</manifest>

Offline tanuccio85

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
Re:Creazione e utilizzo Provider (tutorial Massimo Carli)
« Risposta #4 il: 11 Aprile 2011, 19:12:36 CEST »
0
Risolto era il tasto menu dell'emulatore che permette l'interazione col db :-X :-X