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版本项目设置和全局设置(保姆级图文)

如何保存和加载布尔数组 Android Studio

Android Studio全局设置阿里镜像

如何在 Android Studio 中将文本设置为对应的图像

android studio——替换全局的某个字符串

Idea和Android Studio插件全局自动设置代码高亮级别为 Syntax