Reputation: 235
I am trying to read lines stored in a separate text file into my android application and have each line show up in the list view.
The problem is that I cannot get anything to appear despite the fact my code says their are not errors in it. As you read this code, I will clarify that my ListView is named "addresslist" and the file i'm reading from is named "myaddress.txt". I appreciate any help.
ListView listView= (ListView) findViewById(R.id.addresslist);
try{
InputStream instream = openFileInput("myaddress.txt");
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
ArrayList<String> lines = new ArrayList<String>();
boolean hasNextLine =true;
while (hasNextLine){
String line = buffreader.readLine();
lines.add(line);
hasNextLine = line != null;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.id.addresslist,lines);
listView.setAdapter(adapter);
instream.close();
}
catch(java.io.FileNotFoundException e){
}catch(java.io.IOException e){
}
}
With the following errors in the log:
12-08 01:21:30.394: E/Trace(1500): [ 12-08 01:21:30.864 1500: 1500 V/Home to School 4828 N. Crescent Norridge IL 60706, 5500 N St Louis Avenue Chicago IL 60625; Home to School 4828 N. Crescent Norridge IL 60706, 5500 N St Louis Avenue Chicago IL 60625;
12-08 01:21:30.864: D/AndroidRuntime(1500): Shutting down VM
12-08 01:21:30.924: W/dalvikvm(1500): threadid=1: thread exiting with uncaught exception (group=0xb3e92288)
12-08 01:21:30.944: E/AndroidRuntime(1500): FATAL EXCEPTION: main
12-08 01:21:30.944: E/AndroidRuntime(1500): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tripapp/com.tripapp.Frontpage}: java.lang.NullPointerException: println needs a message
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.os.Handler.dispatchMessage(Handler.java:99)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.os.Looper.loop(Looper.java:137)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread.main(ActivityThread.java:4745)
12-08 01:21:30.944: E/AndroidRuntime(1500): at java.lang.reflect.Method.invokeNative(Native Method)
12-08 01:21:30.944: E/AndroidRuntime(1500): at java.lang.reflect.Method.invoke(Method.java:511)
12-08 01:21:30.944: E/AndroidRuntime(1500): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-08 01:21:30.944: E/AndroidRuntime(1500): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-08 01:21:30.944: E/AndroidRuntime(1500): at dalvik.system.NativeStart.main(Native Method)
12-08 01:21:30.944: E/AndroidRuntime(1500): Caused by: java.lang.NullPointerException: println needs a message
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.util.Log.println_native(Native Method)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.util.Log.v(Log.java:117)
12-08 01:21:30.944: E/AndroidRuntime(1500): at com.tripapp.Frontpage.onCreate(Frontpage.java:61)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.Activity.performCreate(Activity.java:5008)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-08 01:21:30.944: E/AndroidRuntime(1500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-08 01:21:30.944: E/AndroidRuntime(1500): ... 11 more
Upvotes: 4
Views: 12532
Reputation: 1869
this for Kotlin it may help someone
//getting listview from resource
val listView= findViewById(R.id.addresslist)
try{
//write file directory wherever it is, i used external storage just for example
val file = File(Environment.getExternalStorageDirectory(), "myaddress.txt")
//read lines from txt file into arraylist
val lines = ArrayList(file.readLines())
//set listview adapter using the previous arraylist that contain lines from txt file
val adapter = ArrayAdapter(this,R.id.addresslist,lines)
// show it in list view
listView.adapter = adapter
}
catch(e : Exception){
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show()
}
}
Upvotes: 0
Reputation: 52366
This example is for a file with ansi encoding. You can open an utf8 file by replacing "Cp1252" with "UTF-8".
activity_main.xml:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp" >
</ListView>
MainActivity.java:
public class MainActivity extends ActionBarActivity {
ListView listView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView1 = (ListView) findViewById(R.id.listView1);
try {
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myfile.txt";
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "Cp1252"), 100);
String line;
ArrayList<String> lines = new ArrayList<String>();
while ((line = br.readLine()) != null) {
lines.add(line);
}
br.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,lines);
listView1.setAdapter(adapter);
} catch (Exception e) {
e.printStackTrace();
}
}
androidmanifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Upvotes: 0
Reputation: 132972
First move your file in assets folder in your project and use this code for reading file from assets folder :
try{
InputStream inputreader = getAssets().open("myaddress.txt");
BufferedReader buffreader = new BufferedReader(new InputStreamReader(inputreader));
// your code here
Upvotes: 1