android studio:设置全局字符串数组时遇到问题
Posted
技术标签:
【中文标题】android studio:设置全局字符串数组时遇到问题【英文标题】:android studio: having trouble setting global string array 【发布时间】:2016-07-26 06:27:52 【问题描述】:您好,我正在开发一个使用全局数组的 android studio 项目, 我可以很好地从全局数组中读取,并且写入没有问题 到全局整数,但我不知道如何设置全局 代码中的数组,这是项目的重要部分:
在 android manifest xml 的 application 标签下添加了这个:
android:name=".Globals"
java 类全局变量:
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类TimeIn的内部类:
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;
我在获取和使用字符串数组时没有问题,这就是获取的方法 一个数组值并将其与字符串进行比较:
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;
所以我知道这行代码是错误的:
g.setData6(String[getemn], empname);
但是对于 我的生活我不知道应该怎么写,唯一的错误提示是我 从悬停在线上获得-
预期的数组类型;找到'java.lang.String'
有人知道我做错了什么吗?
【问题讨论】:
我用那行代码尝试过的其他事情:g.setData7(empname[getemn]); g.setData7([getemn]empname); + 很多其他类似的组合 【参考方案1】:解决了!!事实证明我必须修改我的 Globals 类的 setter 部分,所以 Globals 类中的第一部分(getter 方法)是正确的:
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;
我不得不将我的 Globals 类的 getter 部分更改为:
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
要从任何类中设置所需索引的值,只需使用:
Globals g = (Globals) getApplication();
g.setData7(getemn, getemp);
getemn 是一个整数,getemp 是一个字符串。
【讨论】:
【参考方案2】:在Global
类中,你用一个参数声明方法
public void setData6(String[] empname)
this.empname = empname;
但是当你调用时,你放了2个参数g.setData6(String[getemn], empname);
您应该删除一个参数
或在Globals
类中添加另一个带有2个参数的方法
还有 你错了
...
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
函数现在需要 2 个参数,一个是 String array
,另一个是 String
但是您将String array
放入函数的方式是错误的
这是一个简单的例子,展示了如何将String array
传递给函数
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
希望有帮助
【讨论】:
谢谢,这是有道理的,在 Globals 类中添加另一个具有 2 个参数的方法必须是我需要做的,因为我使用 2 个变量,getemn 是一个整数,应该引用数组,而变量 empname 是需要分配给数组的那一部分,所需的结果是 empname[getemn]=getemp,所以我对 java 很陌生,我将如何编写一个 2 参数方法? 嗯,当我把你说的话放在我的全局类中时: public static void setData6(String[] empnameList, String empname) this.empnameList = empnameList;这个.empname = empname;我遇到了无法解析符号 empnameList 之类的错误,因此我在其上方添加了 public string[] empnameList 来解决该问题,但随后得到了预期的错误数组类型;找到 'java.lang.String' 所以我做了一些重新安排,唯一开心的方法就是这样做 - public int setempn; public void setData6(int empnameList, String[] empname) this.empnameList= empnameList;这个.empname = empname;然后使用 g.setData6(getemn, empname); 从我的 TimeIn 类中调用它这不会引发任何错误,但也不会更改数组变量。我很难理解 java 数组,因为我习惯于使用这样的数组:你定义数组 empname[0]="Name1"; empname[1]="Name2";接下来要使用它,你可以说 empname[getemn]=getemp; 因为没有声明 empnameList。你应该声明它。我向你展示这个想法,而不是完整的源代码 就像我说的那样,我确实声明了它,这很容易弄清楚,但错误仍然是预期的数组类型;找到'java.lang.String',除非您将该代码块设置为 public void setData6(int empnameList, String[] empname) this.empnameList= empnameList;这个.empname = empname;以上是关于android studio:设置全局字符串数组时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
android studio设置jdk版本项目设置和全局设置(保姆级图文)