2016-03-17 2 views
1

Я создаю приложение, содержащее функцию «Совет дня». Это по существу всплывающее окно, активируемое кнопкой. В настоящее время он имеет текст наполнителя, но я пытаюсь создать способ чтения текстового файла (хранящегося в src/main/assets), и во всплывающем окне отображается отдельная строка. Как я могу это сделать? Эти строки в текстовом файле индицируются ключом возврата. Я найду способ отображения уникальных подсказок при каждом нажатии кнопки, но я доберусь до этой части позже.Android Studio: чтение в текстовом файле, отображение во всплывающем окне

Вот код для самого всплывающего окна:

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; 

} 

} 
+0

Что ваш вопрос? –

+0

отредактирован, чтобы сделать его более понятным. Но: как я могу читать текстовый файл, который хранится в активах, и выводить одну строку во всплывающее окно, которое я создал? –

+0

использовать resourcemanager для чтения текстового файла, как показано [здесь] (http://stackoverflow.com/questions/5771366/reading-a-simple-text-file) –

ответ

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() : ""; 
} 

Или вы можете прочитать сумму байт, которые вы хотите (в вашем случай один линия).

EDIT:

Вместо 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; 
} 
+0

Выглядит хорошо. Тем не менее, я получаю сообщение «Can not resolve method convertStreamToString». Должна быть самая простая ошибка, чтобы исправить то, что вызывает у меня недостаток опыта. Редактировать: Получил это, чтобы работать. Он отображает весь текстовый файл во всплывающем окне диалога, который является большим шагом. Большое спасибо. –

+0

Я добавил метод для чтения только одной строки, пожалуйста, проверьте, работает ли это для вас. –

+0

Это элементарная ошибка, но когда я пишу «builder1.setMessage (getLineFromStream (inputStream)», он говорит (InputStream, int) не может быть применен к нему. Это имеет смысл, поскольку getLineFromStream использует (InputStream, int) ... но как мне сделать эту первую работу? Я попробовал «builder1.setMessage (getLineFromStream (inputStream, linePos)», но это не сработало. –

0

This должно быть достаточно, чтобы вы могли получить информацию из текстового файла в папке с ресурсами в виде String.

Если у вас есть проблемы с этим фрагментом кода this one должен быть более обширным.

После того как вы получили текст как объект String, вы сможете добавить его в свой setMessage для его отображения.

+0

Я уверен в этом методе. С вашей первой ссылки, как я могу использовать .setMessage для отображения того, что хранится в String str_data? Я попытался объявить в strings.xml " homeFragmentDialog", а затем изменить .setMessage на "builder1.setMessage (R.string.str_data);" но это просто сделало диалоговое шоу «homeFragmentDialog» (я могу понять, почему он это делает сейчас). –

+0

Реван ТБ: Несмотря на то, что ответ Алана Уинка в основном работает для меня, я все равно хотел бы знать, как использовать .setMessage(), чтобы отображать переменную str_data от вашего, если у вас есть время для объяснения. Большое спасибо. –

+0

Чтобы отобразить содержимое str_data в вашем диалоговом окне, вам просто нужно поместить его в свой метод setMessage в качестве параметра. Вся строка кода должна выглядеть так: ** builder1.setMessage (str_data) ** –

Смежные вопросы