java - 从不同的类文件调用方法来执行任务

标签 java android nullpointerexception

所以我的主 Activity 类 populateButton 中有一个按钮,它调用另一个类(.java 文件)中的方法并传递一个数组。这个主类文件还有一个方法可以将一些数据添加到名为 addNumber 的 TextView 中:

public class CheckerActivity extends Activity {

public TextView displayArray;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_checker);UMBERS_ARRAY);

    displayArray = (TextView) findViewById(R.id.currentNumbers);
}

public void populateButton(View view) {

    try {
        String[] arrayOfLatestWinner = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
        variousMethods giveArrayOfLatestWinners = new variousMethods();
        String[] tester = giveArrayOfLatestWinners.checkNumbers(CheckerActivity.this, arrayOfLatestWinner);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void addNumber(String[] numbersToAdd) {

    displayArray.setText(Arrays.toString(numbersToAdd));

}

我还有另一个类(.java 文件),它有一个名为 checkNumbers 的方法,该方法是从上面的 populateButton 调用的。

public class variousMethods {

public String[] checkNumbers(Context context, String[] latestNumbersArray) {
try {
        File myNumbersFile = new File((Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + context.getString(R.string.my_lotto_numbers_file))).toString());
        BufferedReader myNumbersFileReader = new BufferedReader(new FileReader(myNumbersFile));

        String inputLineOfMyNumbersFile;
        inputLineOfMyNumbersFile = myNumbersFileReader.readLine();

        while (inputLineOfMyNumbersFile != null) {
        String[] arrayOfInputLine = inputLineOfMyNumbersFile.split(" ");

        // Bad Code
        CheckerActivity addNumbers = new CheckerActivity();
        addNumbers.addNumber(arrayOfInputLine);

        //SORRY, MISSED THIS LINE
        inputLineOfMyNumbersFile = myNumbersFileReader.readLine();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}

当 populatButton 被按下时,它发送 String[] arrayOfLatestWinner 到各种方法中的 checkNumbers。没关系。打开一个文件,我想要发生的是一次返回文件的一行,并通过 addNumbers(String[] numbersToAdd) 将其显示在 TextView 中。 (我依赖这段代码,只有最后一行最终会显示出来,最终它会填充一个 GridView) 但是对 addNumber 的调用给出了 NullPointerException。

请问我哪里出错了?

logcat 是:

07-09 18:18:54.310  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ java.lang.NullPointerException
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.CheckerActivity.addNumber(CheckerActivity.java:84)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.variousMethods.checkNumbers(variousMethods.java:55)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.CheckerActivity.populateButton(CheckerActivity.java:51)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$1.onClick(View.java:3809)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View.performClick(View.java:4421)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$PerformClick.run(View.java:17903)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:730)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Looper.loop(Looper.java:213)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5225)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.variousMethods.checkNumbers(variousMethods.java:93)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.CheckerActivity.populateButton(CheckerActivity.java:51)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$1.onClick(View.java:3809)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View.performClick(View.java:4421)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$PerformClick.run(View.java:17903)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:730)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Looper.loop(Looper.java:213)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5225)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-09 18:18:54.320  29028-29028/au.com.acent.ash.basiclottochecker W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)`

最佳答案

CheckerActivity 是一个 Actiivty 类。它不是普通的 java 类。所以你永远不应该创建 Actiivty 类的实例。

这个

CheckerActivity addNumbers = new CheckerActivity();
addNumbers.addNumber(arrayOfInputLine);

错误导致 NullPointerException

更多信息请阅读 Raghav Sood 的回答@

Can i Create the object of a activity in other class?

为了您的工作,您真的需要另一个类吗?。您可以在 Activity 类中创建一个方法,并在需要时调用它。

编辑:

你可以创建一个Utility类

    public class Utility
    { 
        public String doSomething()
        {
            return "did something";
        }

    }       

Activity 中

  Utility ul = new Utility();
  String result = ul.doSomething(); 
  // update ui with result  

关于java - 从不同的类文件调用方法来执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24648701/

相关文章:

java - 我想使用回收器 View 从 firebase 获取数据到内部 fragment

java - EntityManagerProvider 被注入(inject)为 null

android - VideoView 进度回调

java - 方法返回类型 Object 中的 NullPointerException

Java - 方法中的 NullPointerException

java - 如果大部分方法在调用站点都是死代码,java 可以内联一个大方法吗?

java - 如何使用 onCreateView 而不是 onCreate 在运行时更改应用程序的主题

java - Java 中的流水线

java - 在 JAVA 中使用 Apache POI 和 iText 从 Word (DOC) 创建 PDF

android - 改造 : How to resolve requests duplications