Java Android Studio:读取文本文件,在弹出窗口中显示

Java Android Studio:读取文本文件,在弹出窗口中显示,java,android,Java,Android,我正在创建一个包含“每日提示”功能的应用程序。这本质上是一个弹出窗口,由一个按钮激活。它目前有填充文本,但我正在尝试创建一种读取文本文件(存储在src/main/assets中)的方式,并在弹出窗口中显示一行。我该怎么做?文本文件中的这些行通过返回键进行个性化设置。我会找到一种方法,每次点击按钮时都会显示独特的提示,但稍后我会谈到这一部分 以下是弹出窗口本身的代码: public class homeFragmentDialog extends Activity { protected voi

我正在创建一个包含“每日提示”功能的应用程序。这本质上是一个弹出窗口,由一个按钮激活。它目前有填充文本,但我正在尝试创建一种读取文本文件(存储在src/main/assets中)的方式,并在弹出窗口中显示一行。我该怎么做?文本文件中的这些行通过返回键进行个性化设置。我会找到一种方法,每次点击按钮时都会显示独特的提示,但稍后我会谈到这一部分

以下是弹出窗口本身的代码:

public class homeFragmentDialog extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
    builder1.setMessage("Filler text.");
    builder1.setCancelable(true);

    builder1.setPositiveButton(
            "Close",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });

    AlertDialog alert11 = builder1.create();
    alert11.show();

}
}
为了以防万一,下面是一个片段文件,其中包含激活上一个活动的按钮:

public class homeFragment extends Fragment {

View rootView;

private Button button0;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_home, container, false);

    button0 = (Button) rootView.findViewById(R.id.buttonDialog);
    button0.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), homeFragmentDialog.class);
            startActivity(intent);
        }


    });

    return rootView;

}

}
应该足够让您从assets文件夹中的文本文件中获取字符串形式的信息

如果您对这个简短的代码段有问题,那么应该更加广泛

将文本作为字符串对象获取后,您应该能够将其添加到setMessage函数中以显示它。

应该足以让您从assets文件夹中的文本文件中以字符串形式获取信息

如果您对这个简短的代码段有问题,那么应该更加广泛

将文本作为字符串对象获取后,您应该能够将其添加到setMessage函数中以显示它。

如果您访问上下文,则可以使用:

try {
    InputStream inputStream = getAssets().open("textfile.txt");
    builder1.setMessage(convertStreamToString(inputStream));
} catch (IOException e){
    // Log exception
}
convertStreamToString()的来源:

或者,您可以读取所需的字节数(在本例中为一行)

编辑: 您可以使用此方法获取一行,而不是convertStreamToString():

static String getLineFromStream(java.io.InputStream is, int linePos){
    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String line = null;
    try {
        for (int i = 0; i <= linePos; i++) {
            line = br.readLine();
        }
    } catch (IOException e){
        // Handle exception here (or you can throw)
    }

    return line;
}
静态字符串getLineFromStream(java.io.InputStream为,int-linePos){
BufferedReader br=新的BufferedReader(新的InputStreamReader(is));
字符串行=null;
试一试{
对于(int i=0;i,如果访问上下文,则可以使用:

try {
    InputStream inputStream = getAssets().open("textfile.txt");
    builder1.setMessage(convertStreamToString(inputStream));
} catch (IOException e){
    // Log exception
}
convertStreamToString()的来源:

或者,您可以读取所需的字节数(在本例中为一行)

编辑: 您可以使用此方法获取一行,而不是convertStreamToString():

static String getLineFromStream(java.io.InputStream is, int linePos){
    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String line = null;
    try {
        for (int i = 0; i <= linePos; i++) {
            line = br.readLine();
        }
    } catch (IOException e){
        // Handle exception here (or you can throw)
    }

    return line;
}
静态字符串getLineFromStream(java.io.InputStream为,int-linePos){
BufferedReader br=新的BufferedReader(新的InputStreamReader(is));
字符串行=null;
试一试{


对于(int i=0;i您的问题是什么?编辑以使其更清楚。但是:我如何读取存储在资产中的文本文件,并将一行输出到我创建的对话框弹出窗口中?使用AssetManager读取文本文件,如图所示,谢谢我会研究它。您的问题是什么?编辑以使其更清楚。但是:我如何读取文本文件它存储在assets中,并在我创建的对话框弹出窗口中输出一行?使用AssetManager读取文本文件,如图所示,谢谢我会研究它。我对这种方法很有信心。从您的第一个链接开始,我如何使用.setMessage显示字符串stru数据中存储的内容?我尝试在strings.xml中声明“homeFragmentDialog”,然后将.setMessage更改为“builder1.setMessage(R.string.str_data);”但这使得对话框显示为“homeFragmentDialog”(我现在明白它为什么会这样)。Revan TB:尽管Alan Wink的响应基本上对我有效,但我仍然想知道如何使用.setMessage()如果您有时间解释,可以显示您的str_数据变量。非常感谢。要在对话框中显示str_数据的内容,您只需将其作为参数放入setMessage方法中。整行代码应该如下所示:builder1.setMessage(str_数据)我对这种方法很有信心。从您的第一个链接开始,我如何使用.setMessage显示字符串stru数据中存储的内容?我尝试在strings.xml中声明“homeFragmentDialog”,然后将.setMessage更改为“builder1.setMessage(R.String.stru data)”,但这只会使对话框显示“homeFragmentDialog”Revan TB:尽管Alan Wink的回答基本上对我有效,但我仍然想知道如何使用.setMessage()如果您有时间解释的话,可以显示您的str_数据变量。非常感谢。要在对话框中显示str_数据的内容,您只需将其作为参数放入setMessage方法中。整行代码应该如下所示:builder1.setMessage(str_数据)看起来很可靠。我得到了“无法解析方法convertStreamToString“尽管有错误。这一定是我缺乏经验导致的最容易修复的错误。编辑:使其生效。它在对话框弹出窗口中显示整个文本文件,这是一个很大的步骤。非常感谢。我添加了一个只读取一行的方法,请检查这是否适用于您。这是一个基本错误,但当我编写“builder1.setMessage”时(getLineFromStream(inputStream);“它说(inputStream,int)不能应用于它。这是有道理的,因为getLineFromStream使用(inputStream,int)…但是我如何使第一行工作呢?我尝试了“builder1.setMessage(getLineFromStream(inputStream,linePos);”但是失败了。对不起,我没有解释方法。linePos是您要读取的文件的行,因此如果您要测试,可以输入行号(例如:0将获得第一行,1将获得第二行,依此类推。请确保该行存在,因为如果不存在,它将引发IOException。因此我删除了“int linePos”并将内部代码更改为“for(inti=0;我看起来很可靠。我得到的是”无法解析方法convertStreamToString“尽管有错误。这一定是我缺乏经验导致的最容易修复的错误。编辑:使其生效。它在对话框弹出窗口中显示整个文本文件,这是一个很大的步骤。非常感谢。我添加了一个只读取一行的方法,请检查这是否适用于您。这是一个基本错误,但当我编写“builder1.setMessage”时(getLineFromStream(inputStream);“它说(inputStream,int)不能应用于它。这是有道理的,因为getLineFromStream使用(inputStream,int)…但是我如何使第一行工作呢?我尝试了“builder1.s”