Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用另一个.java文件中的alertdialog_Android_Variables_This_Android Alertdialog_Android Context - Fatal编程技术网

Android 调用另一个.java文件中的alertdialog

Android 调用另一个.java文件中的alertdialog,android,variables,this,android-alertdialog,android-context,Android,Variables,This,Android Alertdialog,Android Context,我有一个activity/java文件(Browsefile.java),它将获取文件的绝对路径。我想将此信息传递给另一个java文件进行进一步处理(Sqlitefun.java)。在第一阶段,我只想确保file path的变量从Browsefile.java传递到Sqlitefun.java,所以我只需要在Sqlitefun.java文件中创建一个alertdialog来测试它。但是,我对alertdialog对象的上下文有一些问题 (由于Sqlitefun.java将进一步执行i/o和Sql

我有一个activity/java文件(Browsefile.java),它将获取文件的绝对路径。我想将此信息传递给另一个java文件进行进一步处理(Sqlitefun.java)。在第一阶段,我只想确保file path的变量从Browsefile.java传递到Sqlitefun.java,所以我只需要在Sqlitefun.java文件中创建一个alertdialog来测试它。但是,我对alertdialog对象的上下文有一些问题

(由于Sqlitefun.java将进一步执行i/o和Sqlite处理任务,因此我更愿意将其放在另一个文件中。)

以下是文件的代码:

Browsefile.java

public class Browsefile extends ListActivity {
....

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.browsefile);
    findViews(); 
    getDir(root);

}
....
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    File file = new File(path.get(position));

    if (file.isDirectory())
    {
        if(file.canRead()) 
        {
            getDir(path.get(position));
        }
        else
        {
            selectpath = file.getAbsolutePath();
            fpath.setText(selectpath);  
        }
    }
    else
    {
        selectpath = file.getAbsolutePath();
        fpath.setText(selectpath);
    }       
}       

private Button.OnClickListener importcsv = new Button.OnClickListener() {
    public void onClick(View v) {
        Sqlitefun firstClass = new Sqlitefun();
            firstClass.getsAlertDialog(selectpath); 
    }
};
....
}
public class Sqlitefun {

private Context context;

public void getsAlertDialog(String filepath) {

    new AlertDialog.Builder(context)
    .setMessage(filepath)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    })
    .show();
}

}
Sqlitefun.java

public class Browsefile extends ListActivity {
....

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.browsefile);
    findViews(); 
    getDir(root);

}
....
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    File file = new File(path.get(position));

    if (file.isDirectory())
    {
        if(file.canRead()) 
        {
            getDir(path.get(position));
        }
        else
        {
            selectpath = file.getAbsolutePath();
            fpath.setText(selectpath);  
        }
    }
    else
    {
        selectpath = file.getAbsolutePath();
        fpath.setText(selectpath);
    }       
}       

private Button.OnClickListener importcsv = new Button.OnClickListener() {
    public void onClick(View v) {
        Sqlitefun firstClass = new Sqlitefun();
            firstClass.getsAlertDialog(selectpath); 
    }
};
....
}
public class Sqlitefun {

private Context context;

public void getsAlertDialog(String filepath) {

    new AlertDialog.Builder(context)
    .setMessage(filepath)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    })
    .show();
}

}
我曾尝试使用
this
Sqlitefun.this
替换行new
AlertDialog.Builder(context)
中的
context
,但均无效。(Eclipse说,
构造函数AlertDialog.Builder(Sqlitefun)未定义,不允许我编译。上面的代码没有任何错误,允许我编译,但上下文存在
空指针
异常。

尝试以下操作:

private Context context = getApplicationContext()

您需要为执行此方法的活动提供contex。因此,我建议您向Sqlitefun类添加构造函数,并在创建此类对象时向参数添加上下文。

我认为您需要显示当前活动中的对话框,因此您需要将AlertDialog代码放入BrowserFile中

我不确定这是否有效,但您可以尝试将上下文从BrowserFile传递到SqliteFun并在那里显示

此外,如果您没有设置使用AlertDialog,请尝试改用Toast通知。通常在活动之外使用时效果更好

编辑:我不认为下面的方法是实现您正在尝试做的事情的最佳方法,但下面是我编写的一个代码示例

在SqliteFun中,修改方法如下:

public void getsAlertDialog(字符串文件路径,上下文mContext){

然后在活动中,使用以下方法:

private Button.OnClickListener importcsv = new Button.OnClickListener() {
public void onClick(View v) {
    Sqlitefun firstClass = new Sqlitefun();
        firstClass.getsAlertDialog(selectpath, v.getContext()); 
}
};

首先在Sqlitefun.java中创建一个静态变量

Static String path;
之后,您可以从任何类访问该变量,以便直接从Browse.class存储该路径

例如:您在browse.class中获得了
fullpath=“XXXX”
。要在Sqlitefun.java中存储
fullpath
变量,请使用:

Sqlitefun.path=fullpath;

你的应用程序设计有问题

除了活动类之外,您无法真正显示来自其他类的对话框(当然,您可以,但这非常危险,因为活动上下文随时都可能更改。例如,当设备旋转时,您的应用程序将因活动上下文更改而崩溃,因为在
Sqlitefun
中,您的引用仍然指向旧上下文)


因此,您应该找到另一种显示对话框的方法。例如,您可以创建一些getter来检索要在
AlertDialog
上显示的值,并在活动中创建它。

Dodu:我更改为您的代码,错误现在是:方法getApplicationContext()类型sqlitefunlalaaider未定义:我可以问一下为什么必须从活动扩展到Sqlitefun吗?(您可以指向参考资料,我可以阅读。)正如LalaRaider所说,我没有看到Sqlitefun不是从activity扩展而来的。关于什么是上下文的解释可以在这里找到:感谢Dodu和LalaRaider。我的意图是将变量从一个文件/java类传递到另一个文件/java类。如果是这样,我不会使用alertdialog来测试变量是否被传递。我已经替换了AlertDialog提示Toast与u相同,但存在相同的问题。Eclipse提示错误“Toast类型中的方法makeText(Context,CharSequence,int)不适用于参数(Sqlitefun,String,int)参数(Sqlitefun,String,int)您仍然需要一个上下文-尝试将上下文从BrowserFile传递到SqliteFun是否可以在传递上下文时给我一些示例代码。我的Browsefile建议如上所述,您可以预期Toast的一行内容如下:静态字符串filepath;public void getsAlertDialog(){filepath=Browsefile.selectpath;Toast.makeText(Sqlitefun.this,filepath,Toast.LENGTH_SHORT).show()}太棒了!上面的代码很有效。我会对上下文做更多的研究。我会接受你的答案。再次感谢。