2016-04-06 37 views
2

Merhaba Küresel dizileri kullanarak bir android stüdyo projesi üzerinde çalışıyorum, Global dizilerden okuyabiliyorum ve global tam sayılara yazarken sorunum yok, ama yapamamandroid studio: global dize dizisini ayarlamada sorun yaşıyor

android:name=".Globals" 

java sınıfı Globaller:

android bildirim xml uygulama etiketi altında bu ekledi: kodundan küresel dizisinin nasıl ayarlanacağını anlamaya, bu projenin önemli parçaları olan İşte

import android.app.Application; 

public class Globals extends Application { 

public int empnum=13; 
public int getData3() { 
return empnum; 
} 
public void setData3(int empnum) { 
this.empnum = empnum; 
} 

public String[] passw = {"0123","0123","0123","0123","0123","0123","0123","0123","0123","0123","0123","0123","0123"}; 
public String[] getData4() { 
return passw; 
} 
public void setData4(String[] passw) { 
this.passw = passw; 
} 

public int login=0; 
public int getData5() { 
return login; 
} 
public void setData5(int login) { 
this.login = login; 
} 

public String[] empname = {"Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10","Name11","Name12","Name13","Not logged in"}; 
public String[] getData6() { 
return empname; 
} 
public void setData6(String[] empname) { 
    this.empname = empname; 
} 

java sınıfı timein ait

iç sınıf ile kod Sorun yaşıyorum blok ise: Bu

final Globals g = (Globals) getApplication(); 
final String[] empname = g.getData6(); 
final String[] passw = g.getData4(); 


public void onClick(View v) { 

i = 0; 
String empname = edit2.getText().toString(); 
int getemn = Integer.parseInt(edit.getText().toString()); 

    if (i == 0 && h == 0) { 
     g.setData3(getemn); 

     g.setData6(String[getemn], empname); // This one line right here won't compile, I have tried different combinations but have had 0 luck 
    i = 1; 
    h = 1; 
     } 
    }  

Ben herhangi bir sorun alma ve bir dize dizisi kullanarak sahip olduğu nasıl

public void onClick(View v) { 

i = 0; 
String getemp = edit2.getText().toString(); 
int getemn = Integer.parseInt(edit.getText().toString()); 


if (i == 0 && getemp.equals(passw[getemn])) { // All of this works perfectly 
    g.setData3(getemn); 
    g.setData5(0); 
    tfone.setText("Empoyee " + getemn); 
    tftwo.setText("Logged in"); 
    i = 1; 
} 
if (i == 0 && getemp != (passw[getemn])) { 
    tfone.setText("No matches found"); 
    edit2.setText("Not logged in"); 
    i = 1; 
} 

}

: bir dizi değeri almak ve bir dizeye karşılaştırmak için çalışır

Yani kod satırı yanlış olduğunu biliyorum:

g.setData6(String[getemn], empname); 

ama için bunu yazılmalıdır anlamaya olamaz bana hayatı, yalnızca hata ipucu ben üzerine gelerek aldığım olduğunu satır türü beklendiği gibi; 'java.lang.String'

Neyi yanlış yaptığımı bilen var mı? g.setData6(String[getemn], empname);
tek bir parametre
kaldırmak veya Globals 2 parametreleri ile başka bir yöntem eklemek gerekir

+0

kodun diğer satırlarında denedim: g.setData7 (empname [getemn]); g.setData7 ([getemn] EmpName); + diğer benzer kombinasyonların birçoğu – Wraithious

cevap

1

Global sınıfta, tek parametre

public void setData6(String[] empname) { 
    this.empname = empname; 
} 

ile yöntemini beyan ama Aradığınızda, size 2 parametreleri koymak sınıf

Ayrıca burada

yanlıştır
... 
    String empname = edit2.getText().toString(); 
    int getemn = Integer.parseInt(edit.getText().toString()); 
    ... 
    g.setData6(String[getemn], empname); // This one line right here won't compile, I have tried different combinations but have had 0 luck 

setData6 işlevi artık 2 parametre gerektirir, bir String array ve diğeri String ama yolu işleve String array koymak İşte yanlış olduğunu çalışması için String array aktarmak göstermektedir basit bir örnek

public class Test { 
    public static void setData6(String[] empnameList, String empname) { // with the `String array` you should declare the variable name like `empnameList` or `arrEmpname` NOT `empname` because `empname` make confusing when you read code 
     this.empnameList = empnameList; 
     this.empname = empname; 
    } 

    public static void main(String[] args) { 
     String[] strArray = new String[]{"Name1","Name2","Name2"}; 
     String empName = "Na"; 

     setData6(strArray,empName); // call method with 2 parameters here 
    } 
} 

Umut bu yardım

+0

Anlamlıdır, Globals sınıfında 2 parametreli bir başka yöntem eklemem gerekir çünkü 2 değişken kullanarak im, bir tamsayıdır ve dizinin "[]" kısmını referans almalıdır ve değişken empname dizinin o kısmına atanması gereken şeydir, istenen sonuç empname [getemn] = getemp'dir, bu yüzden java'da oldukça yeniyim, 2 parametre metodu nasıl yazabilirim? – Wraithious

+0

Hmmm, Global sınıfımda söylediğin şeyi koyduğumda: public static void setData6 (String [] empnameList, String empname) { this.empnameList = empnameList; this.empname = empname; } Simge empnameList çözümlenemeyen hatalar var, bu yüzden bunu çözmek için genel dizgeyi [] empnameList ekledim, ancak hata dizisi türünü bekledim; 'java.lang.String' bulundu Bu yüzden yeniden düzenledim ve bu şekilde – Wraithious

+0

- public int setempn; public void setData6 (int empnameList, String [] empname) { this.empnameList = empnameList; this.empname = empname; } ve sonra g.setData6 (getemn, empname); Bu, hiçbir hata alamaz ancak dizi değişkenini de değiştirmez. Java dizilerini anlamakta zorlanıyorum çünkü böyle diziler kullanıyorum: dizi empname [0] = "Name1" yi tanımlarsınız; EmpName [1] = "Ad2"; onu kullanmanın yanında sadece empname [getemn] = getemp; – Wraithious

0

çözüldü !!o benim Globals sınıfının benim setter kısmını değiştirmek zorunda çıkıyor, bu yüzden Globals sınıfında bu birinci bölüm (alıcı yöntemi) doğrudur:

public String[] compname = {"Manager's company", "Company2", "Company3", "Company4", "Company5", "Company6", "Company7", "Company8", "Company9", "Company10", "Company11", "Company12", "Company13", "Not punched in"}; 
public String[] getData7() { 
return compname; 
} 

Ben benim Globals sınıfın alıcı kısmını değiştirmek zorunda kaldı Bu:

public int setcmpn = 0; // <-- Edited, this should equal some integer value 
public void setData7(int setcmpn, String compname) { // removed [] from 2nd argument 
this.setcmpn = setcmpn; 
this.compname[setcmpn] = compname; // added in [] after array's name and fill it with the first argument from setData7 method 
} 

ve her sınıftan arzu endeks değerini ayarlamak için sadece kullanın:

Globals g = (Globals) getApplication(); 
g.setData7(getemn, getemp); 
getemn bir tam sayıdır

ve getemp bir dizedir.