【问题标题】:Passing a variable from an activity to a non-activity class将变量从活动传递到非活动类
【发布时间】:2015-03-30 02:10:25
【问题描述】:

在我的主要活动中,我有这部分,其中包含所选文件的文件路径和文件名。

public class MainActivity extends Activity implements OnClickListener{

private static File selectedFile;

public static File Filename;

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

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == RESULT_OK) {

        switch(requestCode) {

        case REQUEST_PICK_FILE:

            if(data.hasExtra(FilePicker.EXTRA_FILE_PATH)) {

                selectedFile = new File
                        (data.getStringExtra(FilePicker.EXTRA_FILE_PATH));
                filePath.setText(selectedFile.getPath());  
            }
            break;
        }
    }
} //onActivityResult

//and i added this so that I will be able to save the filepath and access it from my CoordinatesXmlParser.java (a non-activity class)

public void Filename () {
String filename = selectedFile.toString();

//return selectedFile;
}
}

然后在我的 CoordinatesXmlParser.java 上,我有这部分:

File file = MainActivity.Filename;
file.toString();

//String file = Environment.getExternalStorageDirectory() + "/XML/coordinates.xml";
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
FileInputStream fis = new FileInputStream(file);
parser.setInput(new InputStreamReader(fis));

问题:它正在抛出 NullPointException。我如何能够将文件路径从 MainActivity.java 传递到 CoordinatesXmlParser.java? TIA

【问题讨论】:

  • 你在哪里使用CoordinatesXmlParser in MainActivity ?
  • 原谅?我好像没听懂你的问题。
  • 我的意思是你在哪个类中使用CoordinatesXmlParser类来解析xml?
  • 是的,先生。抱歉,如果我没有收到问题。

标签: android android-activity filenames filepath


【解决方案1】:

我认为这行会抛出 NullPointException

文件文件 = MainActivity.Filename;

如果你想将文件路径从 MainActivity.java 传递到 CoordinatesXmlParser.java,你可以使用 Application Class 来实现。

在您的应用程序类中,您可以编写两个方法

 private String fileName;


public String getFileName() {
    return fileName;
}


public void setFileName(String fileName) {
    this.fileName = fileName;
}

然后在您的 MainActivity 调用 setFileName 方法,并在您的 CoordinatesXmlParser 调用 getFileName 方法。

【讨论】:

    【解决方案2】:

    它返回 Null 是因为您在任何时候都为变量 Filename 分配了任何值(顺便说一句,这违反了模式:变量不应以大写字母开头)。

    public class MainActivity extends Activity implements OnClickListener{
    
    private static File selectedFile;
    
    public static File Filename;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
    
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if(resultCode == RESULT_OK) {
    
            switch(requestCode) {
    
            case REQUEST_PICK_FILE:
    
                if(data.hasExtra(FilePicker.EXTRA_FILE_PATH)) {
    
                    selectedFile = new File
                            (data.getStringExtra(FilePicker.EXTRA_FILE_PATH));
                    filePath.setText(selectedFile.getPath());  
                }
                break;
            }
        }
    } //onActivityResult
    
    //and i added this so that I will be able to save the filepath and access it from my CoordinatesXmlParser.java (a non-activity class)
         public static String getFilename () {
             return selectedFile.toString();
         }
    }
    

    然后

    File file = MainActivity.getFilename();
    file.toString();
    

    另外,重要的是要注意这根本不是一个好主意。只有在确定“onActivityResult”已经被调用后,你才应该调用 getFilename(),否则它总是会引发 NullPointerException。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2020-07-04
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多