Как читать текст из Uri и положить в textView?Android Studio - Java - PullRequest
0 голосов
/ 02 июня 2018

Я хочу отобразить текст в TextView.У меня есть .txt, хранящийся в Firebase Storage.У меня есть URL этого .txt, который хранится в .xml в моем проекте Android Studio (main / res / raw)

Вот пример кода из onCreate в упражнении.

str = poi.getText();
final Uri uri = Uri.parse(str);
TextView textView = findViewById(R.id.TEXT_STATUS_ID);
textView.setText((CharSequence) uri);

Однако у меня возникают проблемы:

Process: com.example.project, PID: 10040
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project/com.example.project.POIPresentationActivity}: java.lang.ClassCastException: android.net.Uri$StringUri cannot be cast to java.lang.CharSequence
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
    at android.app.ActivityThread.-wrap14(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
 Caused by: java.lang.ClassCastException: android.net.Uri$StringUri cannot be cast to java.lang.CharSequence
    at com.example.project.POIPresentationActivity.onCreate(POIPresentationActivity.java:117)
    at android.app.Activity.performCreate(Activity.java:6958)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386) 

Похоже, я не могу привести Uri к CharSequence.Каков наилучший способ достичь того, что я хочу сделать?Мой метод работает с изображениями, аудио и видео (потому что приведение не требуется)

 str = poi.getVideoLink();
 Uri uri = Uri.parse(str);
 VideoView video = findViewById(R.id.video_view);
 video.setMediaController(new MediaController(this));
 video.setVideoURI(uri);
 video.requestFocus();

Я видел некоторую документацию по inputStreams, но не уверен, что это именно тот путь.Любое понимание приветствуется

Использование предложенного метода toString () не работает должным образом:

 textView.setText((CharSequence) uri);

Изменено на

 textView.setText(uri.toString());

Отображает текст, но отображаетссылка на текст, который я хочу отобразить (https://firebasestorage.googleapis.com/ ......) - не текст, содержащийся в .txt, на который указывает ссылка

1 Ответ

0 голосов
/ 02 июня 2018

С Документация :

setText (CharSequence text)

Таким образом, он принимает CharSequence в качестве параметра, но Uri не является!

Так что измените на toString(), чтовозвращает закодированное строковое представление этого URI.


На основе вашего обновления вам нужен текст, который находится в файле .txt.

Итак, сначала вам нужно создать ссылкуэтого .txt файла (это зависит от того, как вы сохранили файл , посмотрите здесь )

и передайте вышеуказанное значение uri следующим образом:

StorageReference httpsReference = storage.getReferenceFromUrl(uri);

Обратите внимание , что uri должен содержать полный адрес файла, например:

"https://firebasestorage.googleapis.com/b/bucket/..../yourTextFile.txt"

Также обратите внимание, что если str содержит URL, вы нетогда действительно нужно использовать uri, поэтому сразу передайте str к ссылке!

Затем загрузите файл .txt в память следующим образом:

final long ONE_MEGABYTE = 1024 * 1024; // or to the maximum size of your text, but careful it crashes if it's too big
httpsReference.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
    @Override
    public void onSuccess(byte[] bytes) {
        // String s = new String(bytes); should contain the text
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...