0

I am doing a project to read a txt file from sdcard and copy its content to next activity. When I select the txt file app goes blank. It's going to display blank.

Here's MainActivty.java

package com.texttospeech.tts;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import static java.util.logging.Logger.global;

public class MainActivity extends AppCompatActivity {
static final int READ_REQ = 24;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button ibutton = (Button) findViewById(R.id.ibutton);
    ibutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           performFileSearch();
        }
    });
}

private void performFileSearch() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/*");
    startActivityForResult(intent, READ_REQ);
}

public void onActivityResult(int requestCode, int resultCode, Intent resultData){
    if(resultCode == Activity.RESULT_OK){
        Uri uri = null;
        if (resultData !=null){
            uri = resultData.getData();
        }
        if (requestCode == READ_REQ){
            readTextFile(uri);
        }
    }
}
private String readTextFile(Uri uri){
    InputStream inputStream = null;
    try {
        inputStream = getContentResolver().openInputStream(uri);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        //StringBuilder builder = new StringBuilder();
        String line;
        Log.i("","open text file - content"+"\n");
        while ((line = reader.readLine())!=null){
           // builder.append((String)line);
            Log.i("",line+"\n");
        }
        reader.close();
        inputStream.close();

        String txt = readTextFile(uri);
        Intent i = new Intent(MainActivity.this, Main2Activity.class);
        i.putExtra("txt",txt);
        startActivity(i);

    }catch (Exception e){
        e.printStackTrace();
    }

    return null;
}
}

Here's my Main2Activity.java

package com.texttospeech.tts;

import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;

import java.util.Locale;

public class Main2Activity extends AppCompatActivity implements TextToSpeech.OnInitListener {
private Button play,stop;
private EditText editText;
private TextToSpeech engine;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    String res = getIntent().getStringExtra("txt");
    play = (Button) findViewById(R.id.play);
    stop =  (Button) findViewById(R.id.stop);
    editText = (EditText) findViewById(R.id.editText);
    editText.setText(res);
}

public void speak(){
    String tospeak = editText.getText().toString();
    engine.speak(tospeak, TextToSpeech.QUEUE_FLUSH,null,null);
}

public void stop(){
    if(engine!=null){
        engine.stop();
    }
}


 @Override
protected void onDestroy() {
    super.onDestroy();
    if(engine!=null){
        engine.stop();
        engine.shutdown();
    }
}

@Override
public void onInit(int status) {
    if (status == TextToSpeech.SUCCESS) {
        engine.setLanguage(Locale.UK);
    }
}
}

Main2Activity goes blank after selecting txt file . I dont know how to get the content to a string variable .

Olivier Pons
  • 15,363
  • 26
  • 117
  • 213

3 Answers3

0

Check readTextFile below function

private String readTextFile(Uri uri){
    InputStream inputStream = null;
    try {
        inputStream = getContentResolver().openInputStream(uri);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        //StringBuilder builder = new StringBuilder();
        String line;
        Log.i("","open text file - content"+"\n");
        while ((line = reader.readLine())!=null){
           // builder.append((String)line);
            Log.i("",line+"\n");
        }
        reader.close();
        inputStream.close();

        Intent i = new Intent(MainActivity.this, Main2Activity.class);
        i.putExtra("txt",line);
        startActivity(i);

    }catch (Exception e){
        e.printStackTrace();
    }
    return null;
}
Komal12
  • 3,340
  • 4
  • 16
  • 25
0
Use bellow method to read the file from sd card.

String fileString = readFile(Environment.getExternalStorageDirectory() + "/fileName.txt" );

public static String readFile(String theFilePathString) {
        String returnString = "";
        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(new FileInputStream((theFilePathString)), "UTF8"));
            String line = null;
            StringBuilder stringBuilder = new StringBuilder();
            String ls = System.getProperty("line.separator");

            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
                stringBuilder.append(ls);
            }
            reader.close();
            returnString = stringBuilder.toString();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return returnString;
    }
jessica
  • 1,700
  • 1
  • 11
  • 17
-1

You don't needed to use intent to pass variable . Just declare a string variable as public static on main activity and use can use it on next activity as mainactivity.variablename.

Eg public static String result; declare it and copy this code .

private String readTextFile(Uri uri){ InputStream inputStream = null; 
try { inputStream = getContentResolver().openInputStream(uri);   
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 StringBuilder builder = new StringBuilder();
 String line; Log.i("","open text file - content"+"\n"); 
 while ((line = reader.readLine())!=null){ 
 builder.append(("",line+"\n"); 
 Log.i("",line+"\n");
 result = builder;
  } 
 reader.close();
 inputStream.close(); 
 }catch (Exception e){ 
 e.printStackTrace();
  }
 return null; } }

In your next activity use

EditText.setText(MainActivity.result);