Android Studio:读取文本文件,弹出显示

时间:2016-03-17 23:30:50

标签: java android

我正在创建一个包含"每日提示的应用程序"特征。这实际上是一个弹出窗口,由按钮激活。它目前有填充文本,但我正在尝试创建一种方法,其中读取文本文件(存储在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;

}

}

2 个答案:

答案 0 :(得分:0)

This应该足以让您从assets文件夹中的文本文件中获取信息为String。

如果您在使用此短代码时遇到问题this one应该更广泛。

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

答案 1 :(得分:0)

如果您访问上下文,则可以使用getAssets()

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

convertStreamToString()来自Pavel Repin's answer

static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

或者你可以读取你想要的字节数(在你的情况下是一行)。

编辑:

您可以使用此方法获取单行代替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;
}