【问题标题】:Using BufferedReader in android Activity class在 android Activity 类中使​​用 BufferedReader
【发布时间】:2014-01-02 13:02:46
【问题描述】:

我想通过在 android 中使用 BufferedReader 从 textFile 中保存字符串数组的值 但我在 LogCat 中遇到错误 请任何人帮助找出解决问题 提前谢谢.. :)

01-02 20:15:53.220:E/AndroidRuntime(817):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.tester1/com.example.tester1.MainActivity}:java.lang。空指针异常

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:paddingLeft="16dp"
   android:paddingRight="16dp" >

   <ListView
       android:id="@+id/list1"
       android:layout_width="60dp"
       android:layout_height="fill_parent"
       android:layout_alignParentLeft="true" />

   <ListView
       android:id="@+id/list2"
       android:layout_width="60dp"
       android:layout_height="fill_parent"
       android:layout_alignParentRight="true" />

</RelativeLayout>

活动

public class MainActivity extends Activity {
    ListView list1;
    ListView list2;
    String [] listArray;
    BufferedReader AirportLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            AirportLocation = new BufferedReader(new FileReader("F:/Airport-Location3.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        listArray = new String[1168];

        String line1;
        int c = 0;// location detector
        try {
            while((line1 = AirportLocation.readLine())!=null){
                StringTokenizer s = new StringTokenizer(line1);
                String airport = s.nextToken();
                listArray[c] = airport;
                c++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        list1 = (ListView) findViewById(R.id.list1);
        list2 = (ListView) findViewById(R.id.list2);
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listArray);
        ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listArray);
        list1.setAdapter(adapter1);
        list2.setAdapter(adapter2);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

【问题讨论】:

  • 您的文件是否位于F: 驱动器中?
  • 我认为他的文件位于他系统的 F 盘并试图在 Emulator 中读取......你不能那样做...... Emulator 被视为单独的虚拟系统,无法访问资源系统的(可以使用 adb 帮助)

标签: android nullpointerexception bufferedreader


【解决方案1】:

您似乎正在从硬盘(本地驱动器(F:))访问文件,这是不可能的。如果您想更好地阅读此文件,请将其放入项目的 assets 文件夹中,然后,

AirportLocation = new BufferedReader(
        new InputStreamReader(getAssets().open("Airport-Location3.txt")));

String line = AirportLocation.readLine();

建议:请遵循java的命名约定,Class名称以大写开头,引用以lowercase开头,然后遵循CamelNotations

【讨论】:

  • 很高兴帮助你......!!! Njoy编码。也请不要叫我先生,我太会学了。
【解决方案2】:

问题来了

listArray = new String[1168];  

您正在谈论恒定长度的字符串数组,并且您正在从各自的文件中分配值,显然数据可能超过或不超过。

listArray 的剩余部分将保留在null

您正在将相同的 listArray 分配给 listView ,ArrayAdapter,其中包含 null 值。我想这可能是问题

如果您不知道确切的值,解决方案是使用Arraylist...

【讨论】:

    【解决方案3】:

    在您的 Android 项目中,

    1. res 文件夹中创建 raw 文件夹
    2. Airport-Location3.txt 放在 raw 文件夹中
    3. Airport-Location3.txt 重命名为 Airport_Location3.txt(删除短划线)

    改变

    AirportLocation = new BufferedReader(new FileReader("F:/Airport-Location3.txt"));
    

    InputStream inStream = getApplicationContext.getResources().openRawResource(R.raw.Airport_Location3);
    InputStreamReader is = new InputStreamReader(inStream);
    AirportLocation = new BufferedReader(is);
    

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多