我在主要活动中创建了一个2D字符串数组,但我在另一个活动中创建了新的:
public class MainActivity extends Activity
{
public String[][] arr;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestpayment requestpayment=new requestpayment(getApplicationContext(), 1, 8, "boy");
TextView textView=(TextView)findViewById(R.id.text);
textView.setText(arr[1][1].toString());
}
}
在第二个Activity中,我使用这种形式的二维数组:
int i=1;
MainActivity mainActivity=new MainActivity();
mainActivity.arr= new String[5][5];
mainActivity.arr[i][0] = FLName;
mainActivity.arr[i][1] = Old;
mainActivity.arr[i][2] = Image;
mainActivity.arr[i][3] = Gender;
mainActivity.arr[i][4] = Description
到这里و一切正常,我可以在第二项活动中使用数组金额。
但在此格式的 mainactivity 中使用2d-array时:
textView.setText(arr[1][1].toString());
返回null:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.../....main.MainActivity}: java.lang.NullPointerException
之前,我在另一个活动中创建一个 ArrayList 和New然后我在主活动中使用它并且工作正常,但是对于二维数组不起作用;
现在,我如何使用这个在另一个活动中创造新的数组
答案 0 :(得分:0)
public String [] [] arr从未初始化。
你需要做类似的事情,
private String[][] arr = null;
public String[][] getArr()
{
if(arr == null)
{
arr = new String[5][6];
}
return arr;
}
虽然我个人认为你可能想制作一个数组列表,或者可能是一个String数组列表。
List<String[]> list = new ArrayList<String[]>();
如果要在活动之间发送数组,则应该创建一个包含数组的holder类,使其可包含,并使用Intent Extras在活动之间发送持有者。 http://www.parcelabler.com/有助于使类Parcelable。
答案 1 :(得分:0)
您还没有显示足够的代码让我肯定地说,但是new
调用使得看起来您的第二个类是在主类的不同实例上设置数组;你从不表现出他们之间的任何沟通。
答案 2 :(得分:0)
正如其他人所说,NullPointerException
应该与您引用MainActivity
的不同实例这一事实有关。请查看下面的代码,该代码仅在arr
声明为静态并且在实际声明(而不是创建)的类中使用它之前发生数组时才起作用:
public class Main {
public static void main(String[] args) {
SecondClass sc = new SecondClass();
sc.printArray(1, 1);
FirstClass fc = new FirstClass();
fc.printArray(1, 1);
}
}
class FirstClass {
public static String[][] arr;
public void printArray(int i, int j) {
System.out.println(arr[i][j]);
}
}
class SecondClass {
SecondClass(){}
public void printArray(int i, int j) {
FirstClass fc = new FirstClass();
fc.arr = new String[5][5];
for (int x=0; x<5; x++)
for (int y=0; y<5; y++)
fc.arr[x][y] = Integer.toString(x*y);
System.out.println(fc.arr[i][j]);
}
}
答案 3 :(得分:0)
好的......回答你的问题。 MainActivity mainActivity = new MainActivity();仅创建对象:实例化对象。在声明String [] []的第二个类中,您正在分配值,这很好(虽然不是一个好的设计,除非存在父/子类关系)。如果你要调用textView.setText(arr [1] [1] .toString());在第二课中你会得到这些值。但问题是没有回电。换句话说,你的主要课程不知道第二课正在做什么。
我会考虑其他方法来保存您的数据。但如果你这样做。您需要一种方法让第一个类知道您对数组的添加值。没有某种数据持久性将是困难的。
为什么你这样做首先不清楚。问题是你的设计。你为什么来回走动?没有押韵或理由。在将要使用的类中创建数组,如果它不在该类中使用,则使用数据存储来保存该数据(或通过intent将数据传递给下一个类;但仅使用基本类型)。有几种方法可以在Android中保留数据。阅读那里的多个教程 想想OOP原则。只有在必要时才传递信息。处理创建它的类中的信息(证实)。希望这可以帮助。
答案 4 :(得分:0)
//可以返回空的2d数组。 //只需创建一个如下所示的函数
public static int[][] subsets(int input[],int index) {
if(index==input.length)
{
int arr[][]= {};
return arr;
}