Autore Topic: Codice Classe Contenitore  (Letto 1882 volte)

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Codice Classe Contenitore
« il: 09 Marzo 2011, 12:03:50 CET »
0
Salve ragazzi  vengo a chiedervi aiuto inerente un codice che non riesco a creare in modo ottimale.  Praticamente devo creare una classe Persona i cui attributi sono nick e password e i cui metodi sono setNickPass per l'inserimento del nick e della password fornita dall'utente i quali devono essere memorizzati in un array dinamico e un metodo getNickPass che mi consente di recuperare tali dati.
Vi posto il codice che ho realizzato anche se sono sicura che sia errato.  :'( :'(
Vi ringrazio in anticipo per l'attenzione concessami. O:-)

Codice: [Seleziona]

import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;

public class Utente_Registrato extends Activity{
       
   public ArrayList<String> arr = new ArrayList<String> ();
   
   public Utente_Registrato(){ }
   
   public void setNickPass( String N,String P){
                    arr.add (""+N+"");
                    arr.add (""+P+"");
    }
   
    public void getNickPass (){
            for ( int i = 0; i <arr.size() ; i++) {
                     AlertDialog.Builder adb=new AlertDialog.Builder(Utente_Registrato.this);
                         adb.setTitle("Utente");
                         adb.setMessage("Nick e Pass: "+arr.get(i));
                         adb.setPositiveButton("Ok", null); 
                    adb.show();
           
            }
    }
}

Codice: [Seleziona]

import android.app.Activity;
import android.os.Bundle;

public class testContenitore extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
        Utente_Registrato p = new Utente_Registrato();
        p.setNickPass( "nick","pass");
        p.setNickPass("Caos", "Raffyna");
        p.setNickPass("Ele", "Col");
       
        p.getNickPass();
       
    }
}

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Codice Classe Contenitore
« Risposta #1 il: 09 Marzo 2011, 12:37:33 CET »
+1
CTRL + ALT + CANC  o_O

Prima di rispondere al problema android torniamo indietro al problema di fondo: Java.

Leggendo il tuo codice ho notato un paio di problemi, fino a quando non saprai rispondere a questi problemi è inutile parlare di Android:
  • Perché non usi la Naming Convetion di Android o a limite quella di Java?
  • Per quale motivo Utente_Registrato estende Activity? Che significa estendere un'altra classe?
  • Perché la variabile membro arr è definita con scope public?
  • Per quale motivo effettui una concatenazione di stringhe quando aggiungi una coppia di user e password all'array?
  • Per quale motivo scrivi Utente_Registrato.this invece del semplice this? Che cosa significa this?
  • Cosa pensi che ti restituisce arr.get(i)?
  • A che serve il metodo create() di AlertDialog.Builder?
  • Cosa restituisce solitamente un metodo getter?
« Ultima modifica: 09 Marzo 2011, 15:10:19 CET da MarcoDuff »

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #2 il: 09 Marzo 2011, 13:44:50 CET »
0
Sono stata la prima a dire che il  codice era sbagliato ma epr correttezza l'ho postato ugualmente sapendo che me l'avreste chiesto. E' vero ci sono alcuni errori come ad esempio la varibile pubblica ma altre domande che hai posto non so il motivo per il quale le hai fatte..quasi come a dire non sai un cavolo. Credevo che questo forum fosse nato per aiutare e non per puntare il dito.

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Codice Classe Contenitore
« Risposta #3 il: 09 Marzo 2011, 14:58:52 CET »
0
Sono stata la prima a dire che il  codice era sbagliato ma epr correttezza l'ho postato ugualmente sapendo che me l'avreste chiesto. E' vero ci sono alcuni errori come ad esempio la varibile pubblica ma altre domande che hai posto non so il motivo per il quale le hai fatte..quasi come a dire non sai un cavolo. Credevo che questo forum fosse nato per aiutare e non per puntare il dito.
Non sta puntando il dito. Sta cercando di valutare la preparazione, dato che conoscere Java é una base fondamentale per sviluppare per android.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Codice Classe Contenitore
« Risposta #4 il: 09 Marzo 2011, 15:30:42 CET »
0
Secondo me dovresti cambiare la visione che hai delle classi.

Io se fossi in te mi crerei una classe  (Utente, per esempio) solo per contenere nick e password. A questo punto la classe Utente_Registrato non serve più a molto quindi potresti anche eliminarla. Se ti serve poi stamparli sovrascrivi il metodo toString() in modo da creare una stringa che descriva l'oggetto.
Per memorizzare la lista degli utenti ti crei un ArrayList<Utente> e li memorizzi li dentro.
Ricordati che non è un buon approccio quello che hai utilizzato, i getter non devono mai stampare i dati ma solo ritornarli.

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Codice Classe Contenitore
« Risposta #5 il: 09 Marzo 2011, 15:42:46 CET »
+3
Mi dispiace se sono apparso brusco nella mia risposta, non ho intenzione di puntare il dito contro di te e non oserei mai dire "non sai un cavolo".

Ti chiedevo della Naming Convention per il semplice fatto che il codice viene formattato in modo standard e quindi risulta più leggibile da parte di altri programmatori, ma ovviamente questo non è un problema.

Il problema nel tuo codice sta nel ciclo for visto che il tuo metodo getNickPass non recupera i dati ma li visualizza dentro tante AlertDialog quante sono le singole user e password inserite (nel caso del tuo codice provi ad aprire sei AlertDialog distinte una sopra l'altra). Inoltre ogni singola AlertDialog viene aperta senza richiamare il metodo create prima di essere visualizzata.

Inoltre dovresti sistemare il codice nel punto in cui fai la
adb.setMessage("Nick e Pass: "+arr.get(i));
Tecnicamente in questo caso prendi in modo alternato prima la user e poi la password, quindi dovresti effettuare una modifica al codice ed in caso di i uguale a zero oppure pari scrivere 
adb.setMessage("Nick: "+arr.get(i));
ed in caso di i dispari scrivere
adb.setMessage("Pass: "+arr.get(i));
se proprio li vuoi scrivere insieme allora ti consiglio:
adb.setMessage("Nick e Pass: "+arr.get(i)+" "+arr.get(i+1));
ed ovviamente incrementare il valore di i nel ciclo for non più tramite i++ ma tramite i+=2

Adesso che abbiamo risolto il problema, posso farti una domanda?
Sicura di aver scelto la strada migliore per rappresentare i tuoi oggetti?

Io ad esempio avrei creato la classe Utente_Registrato in questo modo:
Codice (Java): [Seleziona]
package com.marcoduff.androidtest;

public class UtenteRegistrato {
        private String nickname;
        private String password;
       
        public UtenteRegistrato(String nickname, String password) {
                this.nickname = nickname;
                this.password = password;
        }

        public String getNickname() {
                return nickname;
        }

        public String getPassword() {
                return password;
        }
}

Mentre la test contenitore in questo modo:
Codice (Java): [Seleziona]
package com.marcoduff.androidtest;

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

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;

public class TestContenitore extends Activity {
        private List<UtenteRegistrato> mUtenteRegistratoList;
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                // TODO Inserire codice creazione activity
               
                mUtenteRegistratoList = new ArrayList<UtenteRegistrato>(3);
                mUtenteRegistratoList.add(new UtenteRegistrato("nick","pass"));
                mUtenteRegistratoList.add(new UtenteRegistrato("Caos", "Raffyna"));
                mUtenteRegistratoList.add(new UtenteRegistrato("Ele", "Col"));
        }
       
        private void visualizzaUtenteRegistrato(int i) {
                UtenteRegistrato utenteRegistrato = mUtenteRegistratoList.get(i);
                String nickname = utenteRegistrato.getNickname();
                String password = utenteRegistrato.getPassword();
                new AlertDialog.Builder(this)
                        .setTitle("Utente Registrato "+(i+1))
                        .setMessage("Nick e Pass: "+nickname+" - "+password)
                        .setPositiveButton("Chiudi", null)
                        .create()
                        .show();
        }
}

Ovviamente il codice non è completo, ma penso che ci starai poco a sistemarlo per le tue esigenze.

Spero di essere stato più chiaro adesso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Codice Classe Contenitore
« Risposta #6 il: 09 Marzo 2011, 15:47:15 CET »
0
MarcoDuff ha implementato ciò che intendevo (e che non avevo voglia di scrivere :D )

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #7 il: 09 Marzo 2011, 17:13:41 CET »
0
MurcoDuff scusami se ho risposto in modo brusco. Tu hai perfettamente ragione il problema è che all'università mi hanno assegnato un progetto da sviluppare in android inernte la ricerca di POI e no ho mai fatto un esame su java o android dato che alla triennale non ce ne sono. Cmq ti ringrazio mille per l'aiuto .^_^..nel frattempo ho steso il codice e diciamo che è molto simile al tuo.

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #8 il: 09 Marzo 2011, 17:53:15 CET »
0
Ok vengo nuovamente a chiedervi umilmente aiuto .
Ecco il codice
Codice: [Seleziona]
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Contenitore extends Activity {
        private List<Person> mUtenteRegistratoList;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //Bottone Resitrati
            Button registra=(Button) findViewById(R.id.imageButton1);
            registra.setOnClickListener(new OnClickListener(){
                    public void onClick(View v){
                               EditText textArea01 = (EditText) findViewById(R.id.editText1);
                               String nick = textArea01.getText().toString();
                           EditText textArea02 = (EditText) findViewById(R.id.editText2);
                           String password = textArea02.getText().toString();
                           
                           
                           if ( nick.equals("") || password.equals("")){
                                          AlertDialog.Builder adb=new AlertDialog.Builder(Contenitore.this);
                                               adb.setTitle("Attenzione! ");
                                               adb.setMessage("Ci sono campi vuoti!");
                                               adb.setPositiveButton("Ok",null);
                                               adb.show();                    
                                   }
                                   else {                                              
           
                                                           mUtenteRegistratoList = new ArrayList<Person>();
                                                           mUtenteRegistratoList .add(new Person(""+nick+"",""+password+""));
                                          
                                          AlertDialog.Builder adb=new AlertDialog.Builder(Contenitore.this);
                                            adb.setTitle("^_^ ");
                                            adb.setMessage("Utente Registrato : "+nick+""+password+"");
                                            adb.setPositiveButton("Ok",null);
                                            adb.show();
                                   }
   
                          }
            });
    }

}


Codice: [Seleziona]

package it.smu.Contenitore;

public class Person {
        private String nickname;
    private String password;
   
    public Person (String nickname, String password) {
            this.nickname = nickname;
            this.password = password;
    }

    public String getNickname() {
            return nickname;
    }

    public String getPassword() {
            return password;
    }
}


Ecco il logCat :
Codice: [Seleziona]

03-09 16:52:41.228: DEBUG/AndroidRuntime(932): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
03-09 16:52:41.228: DEBUG/AndroidRuntime(932): CheckJNI is ON
03-09 16:52:41.628: DEBUG/AndroidRuntime(932): --- registering native functions ---
03-09 16:52:42.918: DEBUG/AndroidRuntime(932): Shutting down VM
03-09 16:52:42.938: DEBUG/dalvikvm(932): Debugger has detached; object registry had 1 entries
03-09 16:52:42.958: INFO/AndroidRuntime(932): NOTE: attach of thread 'Binder Thread #3' failed
03-09 16:52:43.848: DEBUG/AndroidRuntime(940): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
03-09 16:52:43.848: DEBUG/AndroidRuntime(940): CheckJNI is ON
03-09 16:52:44.238: DEBUG/AndroidRuntime(940): --- registering native functions ---
03-09 16:52:45.498: INFO/ActivityManager(59): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=it.smu.Contenitore/.Contenitore }
03-09 16:52:45.818: DEBUG/AndroidRuntime(940): Shutting down VM
03-09 16:52:45.838: DEBUG/dalvikvm(940): Debugger has detached; object registry had 1 entries
03-09 16:52:45.879: INFO/ActivityManager(59): Start proc it.smu.Contenitore for activity it.smu.Contenitore/.Contenitore: pid=947 uid=10042 gids={1015}
03-09 16:52:45.908: INFO/AndroidRuntime(940): NOTE: attach of thread 'Binder Thread #3' failed
03-09 16:52:47.028: DEBUG/AndroidRuntime(947): Shutting down VM
03-09 16:52:47.028: WARN/dalvikvm(947): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
03-09 16:52:47.068: ERROR/AndroidRuntime(947): FATAL EXCEPTION: main
03-09 16:52:47.068: ERROR/AndroidRuntime(947): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.smu.Contenitore/it.smu.Contenitore.Contenitore}: java.lang.NullPointerException
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.os.Looper.loop(Looper.java:123)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at java.lang.reflect.Method.invokeNative(Native Method)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at java.lang.reflect.Method.invoke(Method.java:521)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at dalvik.system.NativeStart.main(Native Method)
03-09 16:52:47.068: ERROR/AndroidRuntime(947): Caused by: java.lang.NullPointerException
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at it.smu.Contenitore.Contenitore.onCreate(Contenitore.java:24)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     ... 11 more
03-09 16:52:47.108: WARN/ActivityManager(59):   Force finishing activity it.smu.Contenitore/.Contenitore
03-09 16:52:47.619: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{45099ae8 it.smu.Contenitore/.Contenitore}
03-09 16:52:55.808: INFO/Process(947): Sending signal. PID: 947 SIG: 9
03-09 16:52:55.868: WARN/InputManagerService(59): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44ecbba0
03-09 16:52:56.103: INFO/ActivityManager(59): Process it.smu.Contenitore (pid 947) has died.
03-09 16:52:58.639: WARN/ActivityManager(59): Activity destroy timeout for HistoryRecord{45099ae8 it.smu.Contenitore/.Contenitore}


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Codice Classe Contenitore
« Risposta #9 il: 09 Marzo 2011, 17:57:56 CET »
0
Guarda il logcat cosa dice:

Codice: [Seleziona]
03-09 16:52:47.068: ERROR/AndroidRuntime(947): Caused by: java.lang.NullPointerException
03-09 16:52:47.068: ERROR/AndroidRuntime(947):     at it.smu.Contenitore.Contenitore.onCreate(Contenitore.java:24)

Sembrerebbe ci sia un qualche problema alla riga 24... cosa c'è li?

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #10 il: 09 Marzo 2011, 18:06:09 CET »
0
c'è  questo :
 registra.setOnClickListener(new OnClickListener(){

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #11 il: 09 Marzo 2011, 18:19:50 CET »
0
non capisco perchè mi da errore lì
« Ultima modifica: 09 Marzo 2011, 18:23:59 CET da caos »

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Codice Classe Contenitore
« Risposta #12 il: 09 Marzo 2011, 18:33:24 CET »
0
Controlla se l'oggetto con id imageButton1 stia effettivamente nel layout main.

Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #13 il: 09 Marzo 2011, 21:48:26 CET »
0
si c'è    g_g ..ora posto anche il main :
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:layout_gravity="center"  android:text="REGISTRAZIONE" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView2" android:text="Nome"></TextView>
    <EditText android:layout_width="match_parent" android:layout_height="40px" android:id="@+id/editText1" android:text=""></EditText>
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView3" android:text="Cognome"></TextView>
    <EditText android:layout_width="match_parent" android:layout_height="40px" android:id="@+id/editText2" android:text=""></EditText>
   
    <ImageButton android:layout_width="wrap_content"   android:layout_gravity="center"  android:id="@+id/imageButton1" android:layout_height="wrap_content"></ImageButton>
   
</LinearLayout>


Offline caos

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SDK
Re:Codice Classe Contenitore
« Risposta #14 il: 10 Marzo 2011, 09:42:31 CET »
0
UP