2014-01-02 4 views
0

Я хочу, чтобы сохранить значение массива строк из текстового файла с помощью BufferedReader в андроиде , но я получаю сообщение об ошибке в LogCat , пожалуйста, кто-нибудь помогут выяснить, чтобы решить проблему Заранее спасибо .. :)Использования BufferedReader в андроида класса активности

01-02 20: 15: 53,220: Е/AndroidRuntime (817): java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.example.tester1/com.example.tester1.MainActivity} : java.lang.NullPointerException

РАСПОЛ

<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; 
    } 
} 
+1

loated Ваш файл в '' F: диск? –

+0

Я думаю, что его файл находится в диске его системы F и пытается читать в эмуляторе ... Вы не можете так поступать ... Эмулятор рассматривается как отдельная виртуальная система и не может получить доступ к ресурсам системы (может делать с помощью adb help) –

ответ

2

Похоже, вы получаете доступ к файлу с вашего жесткого диска (локальный диск (F:)), что невозможно. Если вы хотите, чтобы прочитать этот файл лучше вы поместите его в папку активов вашего проекта, а затем,

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

String line = AirportLocation.readLine(); 

предложение: Пожалуйста, следуйте именования Java, это говорит Class имена начинаются с колпачками и их ссылки начинаются с lowercase, а затем следуют CamelNotations.

+0

Большое спасибо sir :) – user3148422

+0

Счастливая помощь вам ... !!! Njoy кодирования. И, пожалуйста, не называй меня, сэр, я тоже учусь. –

1

В вашем проекте Android,

  1. Создать сырец папки внутри Реза папку
  2. Места Аэропорт-Location3.txt внутри папки сырого
  3. Rename Аэропорт-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); 
2

Здесь Проблема

listArray = new String[1168]; 

Вы говорите строковый массив постоянной длины, и вы назначаете значения из вашего соответствующего файла, очевидно, что данные могут превышать или нет.

И оставшаяся часть listArray будет осталась с null «s

И вы назначаете тот же listArray к listView, ArrayAdapter с нулевыми значениями в нем.Я предполагаю, что это может быть проблема

Решение это взять Arraylist, если вы не знаете точные значения ...

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