mboost-dp1

Lidt mangel på JAVA forståelse 2


Gå til bund
Gravatar #1 - Qw_freak
4. jun. 2012 10:01
private static class NetworkAttributes {
/**
* Class for holding settings read from resources.
*/
public String mName;
public int mType;
public int mRadio;
public int mPriority;
public NetworkInfo.State mLastState;
public NetworkAttributes(String init) { // Hvad sker der her?
String fragments[] = init.split(",");
mName = fragments[0].toLowerCase();
mType = Integer.parseInt(fragments[1]);
mRadio = Integer.parseInt(fragments[2]);
mPriority = Integer.parseInt(fragments[3]);
mLastState = NetworkInfo.State.UNKNOWN;
}
public boolean isDefault() {
return (mType == mRadio);
}
}
NetworkAttributes[] mNetAttributes;


Sig mig, kalder NetworkAttributes sig selv inden i klassen??
Gravatar #2 - Manofsciencemanoffaith
4. jun. 2012 10:16
Er det ikke header filen du har fat i der og dermed klasse definitionen?
Gravatar #3 - ISCS
4. jun. 2012 10:38
Qw_freak (1) skrev:

public NetworkAttributes(String init) { // Hvad sker der her?
...
Sig mig, kalder NetworkAttributes sig selv inden i klassen??


Kort svar:
Nej det gør den ikke. Det er dens Constructor.

Længere svar:
Du kan bl.a. se at det er Constructoren, ved at metoden hedder det samme som klassen, med Stort forbogstave, metoder starter normalt med småt.
Desuden kan du se det fordi den ikke returnerer noget, ikke engang void - (Den returnerer jo sig selv).

Det er den du kalder når du skriver:
NetworkAttributes netAtt = new NetworkAttributes("En String");

Af en eller anden årsag tager den en række parametre i én kommasepereret String, i stedet for at tage et String[] - som fx main(String[] argumenter) gør.

Ps. der er ikke noget i vejen for at klasser kalder eller opretter instanser af sig selv, det er bare ikke tilfældet her.
Gravatar #4 - Qw_freak
4. jun. 2012 11:08
Okay, tusind tak for svaret...

Jeg har den her linie længere nede:
mNetAttributes = new NetworkAttributes[ConnectivityManager.MAX_NETWORK_TYPE+1];


hvordan skal den forståes så? hvorfor er der firkantparanteser, og hvad er forskellen?
Gravatar #5 - ISCS
4. jun. 2012 11:20
#4 Det er den samme som indlægget i går ikke?
ConnectivityManager <- Er en klasse
MAX_NETWORK_TYPE <- En integer konstant i den klasse.

Dvs. MAX_NETWORK_TYPE er et heltal vi henter fra klassen og lægger én til.

[ ] definerer størrelsen på et array.
I sætningen:
String[] strings = new String[5];
Betyder [ ] at vi gerne vil deklarere et array.
[5] betyder at der skal være plads til 5 elementer i arrayet (i række)

Da arrays tæller nul med går [5] fra {0-4} - 0,1,2,3,4 == 5 (Dette kaldes nulindeksering, og standarden i mange sprog)

Dvs.


mNetAttributes er deklareret tidligere som
NetworkAttributes[] mNetAttributes;
og
mNetAttributes = new NetworkAttributes[ConnectivityManager.M
AX_NETWORK_TYPE+1];
fortæller at størrelsen på dette array er konstanten (M
AX_NETWORK_TYPE) + 1 stor.

Herefter kan du hente network types ud ved at skrive mNetAttributes[0] eller mNetAttributes[1].. osv op til MAX. (Det vi talte om igår, med at MAX == 13, [13] == {0-12}+1 == {0-13}
Gravatar #6 - Qw_freak
4. jun. 2012 11:36
ISCS (5) skrev:
Det er den samme som indlægget i går ikke?

Jo... :)

ISCS (5) skrev:
Herefter kan du hente network types ud ved at skrive mNetAttributes[0] eller mNetAttributes[1].. osv op til MAX. (Det vi talte om igår, med at MAX == 13, [13] == {0-12}+1 == {0-13}


Yep, det fik jeg fat i, jeg var bare meget i tvivl om hvad parantes-typerne betød... :)

String[] naStrings = context.getResources().getStringArray(
com.android.internal.R.array.networkAttributes);

Her lægges der så nogen data over i arrayet, så vidt jeg kan se, men når jeg inkluderer det i min kode, kan den ikke forstå:
com.android.internal.R.array

Hvad kan det være??
Gravatar #7 - ISCS
4. jun. 2012 11:56
Jeg har ikke så meget erfaring med Android. Men Android benytter sig af R.java til at binde ressourcerne i appen til et ID.

Du må ikke hænge mig op på det men:
com.android.internal.R.array.networkAttributes; Er et ID på det her String-array vil jeg tro.

Den interne R klasse er ikke direkte tilgængelig i Android SDK'en.

Hvis du kender det konkrete ID, kan du hente Arrayet med Ressources.getSystem(). Men fordi de ID's ændres fra build til build, og fra device til device frarådes det.

Læs evt. mere her og her
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login