Italian b4j - richiamo sub

fabero

Member
Licensed User
Longtime User
Ciao Ragazzi,
sono un po' arrugginito: ho lavorato in passato con b4a e ora mi approccio a b4j.

Ho bisogno di creare una sub da richiamare con un valore, e che questa mi renda un valore, in base ad un elaborazione da fare con il valore che gli è stato passato, da tornare ad un textfield.

Mi date una dritta per piacere? Grazie! :)
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
Dim Risultato As Double
Risultato = Calcola(123)
EditText1.Text = Risultato

Public Sub Calcola(Valore As Double) As Double
    Dim Restituisci As Double
    Restituisci = Valore * 5
    Return Restituisci
End Sub

Era troppo semplice, non credo che la tua domanda fosse proprio questa.
 

fabero

Member
Licensed User
Longtime User
E' molto simile, ma non va.. la sub è richiamta da una sub dell'evento di un click su di un bottone e quindi faccio textfieldout.text = Funzione(textfieldin.text) ma non pare andare...
 

Star-Dust

Expert
Licensed User
Longtime User
E' molto simile, ma non va.. la sub è richiamta da una sub dell'evento di un click su di un bottone e quindi faccio textfieldout.text = Funzione(textfieldin.text) ma non pare andare...
Fai capire meglio cosa devi fare, magari un pezzo di codice
 

fabero

Member
Licensed User
Longtime User
In pratica....
B4X:
Public Sub Calcolo(Codice As Double) As Double

Dim Risultato As Int
........

Return  Risultato

End Sub

  Sub Decode_Click <-- (è l'evento collegato a click di un bottone

if .... then 
    TextFieldOutput.Text = calcolo(TextFieldInput.Text)   
else if .... then
......
end if

End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
In pratica....
B4X:
Public Sub Calcolo(Codice As Double) As Double

Dim Risultato As Int
........

Return  Risultato

End Sub

  Sub Decode_Click <-- (è l'evento collegato a click di un bottone

if .... then
    TextFieldOutput.Text = calcolo(TextFieldInput.Text)
else if .... then
......
end if

End Sub
Perché la sub dichiara di restituire un valore Double ma la variabile di ritorno é Int?
______________________________________________________________________
Questo l'ho provato e funziona:
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Private Button As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    Button.Initialize("Button")
    Button.Text="1"
    Activity.AddView(Button,100dip,100dip,100dip,40dip)
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Button_Click
    Dim B As Button = Sender
 
    B.Text=Calcolo(B.Text,1)
    ' Anche cosi potrebbe andare
    ' Button.Text=Calcolo(Button.Text,1)
End Sub

Sub Calcolo(Valore As Int, Incremento As Int) As Int
    Return (Valore+Incremento)
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Perché la sub dichiara di restituire un valore Double ma la variabile di ritorno é Int?
Non credo (spero di no) che intenda questo; è chiaro che ho usato un Double perché non ho idea di quale debba essere la funzione ma essendo un calcolo ho usato il tipo più adatto (sia per interi che per decimali).

No, secondo me ci manca qualche informazione, qualcosa circa il flusso del suo progetto/esempio.
 

Star-Dust

Expert
Licensed User
Longtime User
Non credo (spero di no) che intenda questo; è chiaro che ho usato un Double perché non ho idea di quale debba essere la funzione ma essendo un calcolo ho usato il tipo più adatto (sia per interi che per decimali).

No, secondo me ci manca qualche informazione, qualcosa circa il flusso del suo progetto/esempio.
Non dicevo a te ma a febero, che ha postato questo:
B4X:
Public Sub Calcolo(Codice As Double) As Double
   Dim Risultato As Int
   ........
   Return  Risultato
End Sub
ma sarebbe corretto questo:
B4X:
Public Sub Calcolo(Codice As Double) As Double
   Dim Risultato As Double
   ........
   Return  Risultato
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
Dovrebbe funzionare lo stesso
Però non ha senso, se ti serve un double usi un double e hai una doppia precisione e non restituisci un int che perdi le cifre decimali....non ti pare?
Comunque non cominciamo a riempire il thread di ciancie inutili e con disquisizioni sterili. :p
 

LucaMs

Expert
Licensed User
Longtime User
Comunque non cominciamo a riempire il thread di ciancie inutili e con disquisizioni sterili.
Non è che mi metto a scrivere qui che stasera m'inc...rò, perché al GF non elimineranno una str...etta, con tette e naso finti e ciapet mosce, malgrado i suoi 23 anni, odiata sicuramente dal pubblico, per il suo comportamento falso, per aver diffamato altri e per essere stata una scialba statua per tutto il periodo...
non la elimineranno, malgrado i voti dei telespettatori (figuriamoci cosa succederebbe se si arrivasse ad eliminare la democrazia rappresentativa, come io vorrei).

Non mi metto certo a scrivere cose così, qui e là, a... vanvAra!
default.jpg


:p
 

LucaMs

Expert
Licensed User
Longtime User
TextFieldOutput.Text = calcolo(TextFieldInput.Text)
Ho riletto... questa è la riga incriminata.

Scusami la sincerità ma è pessima.

Hai sicuramente problemi perché utilizzi la stessa view, la EditText o TextField, sia per l'input che per l'output.


P.S. si può anche fare, usando accorgimenti vari (come ad esempio una variabile globale - dichiarata nella Process_Globals, booleana, che conservi lo stato - la fase - dell'elaborazione) ma non è elegante e, soprattutto, "manutenibile".

P.P.S. E poi manca un controllo su quanto immesso dall'utente, che dovrebbe essere sempre verificato.
 
Last edited:

fabero

Member
Licensed User
Longtime User
Io sto usando Basic4Java... può essere per quello?

P.S. i controlli ci sono, ho fatto un mega cuttone :)

In pratica ci sono 2 textfield una di input e una di output.
Al click del bottone, controlla lo scritto, e se ok prende il .Text e lo elabora tramite una funzione per calcolare il .Text di quella di output..
 

LucaMs

Expert
Licensed User
Longtime User
Io sto usando Basic4Java... può essere per quello?
No, lo stesso discorso vale per b4j, cambia solo il tipo di view, EditText in b4a, TextField in b4j.

E' che non dovresti usare questa view per chiedere dati all'utente e, "contemporaneamente", per visualizzare il risultato di un calcolo in base al valore che l'utente ha fornito.
 

Star-Dust

Expert
Licensed User
Longtime User
Io sto usando Basic4Java... può essere per quello?

P.S. i controlli ci sono, ho fatto un mega cuttone :)
È uguale, se vuoi te la rifaccio per B4J....ma sarebbe lo stesso codice.;)
 

fabero

Member
Licensed User
Longtime User
No, lo stesso discorso vale per b4j, cambia solo il tipo di view, EditText in b4a, TextField in b4j.

E' che non dovresti usare questa view per chiedere dati all'utente e, "contemporaneamente", per visualizzare il risultato di un calcolo in base al valore che l'utente ha fornito.

In che senso una soltanto? Son 2.
 
Top