2015-05-31 5 views
0

Я пытаюсь создать средство просмотра карт в android для игры с карточной карточкой. Мой план состоял в том, чтобы использовать arraylist для заполнения карт в базе данных. Я бы прочитал все значения из файла и будет отображаться через listview. Мой код списка и код arraylist в порядке (после тестирования без использования ввода файла). Проблема возникает, когда я пытаюсь прочитать из файла. Я в недоумении, что делать. Когда я запускаю программу, это происходит сбой. Когда я удаляю метод parseInt (потому что я читаю целое число из файла), он запускается, но ни одна из моих данных не заполняется. Что не так с моим кодом?читать файл из активов android

import android.content.Intent; 
    import android.support.v7.app.ActionBarActivity; 
    import android.os.Bundle; 

    import java.util.ArrayList; 
    import java.io.*; 

    import android.widget.ArrayAdapter; 
    import android.widget.ListView; 


    public class DeckBuilderActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    Intent intent = getIntent(); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_deck_builder); 

    //populate  database************************************************************************ 
    ArrayList<Card> database = new ArrayList<Card>(); //create new arraylist of datatype card 

    //value holders 
    String cardName, expansion, cardNum, unitType, unitClan, unitRace, trigger, unitSkill, cardLore, 
      imageId; 
    int unitGrade, unitPower, unitShield; 
    //exception handling 

    try{ 
     String myfile = "cardmaindatabase.txt"; 
     InputStream inputReader = getAssets().open(myfile); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inputReader)); //open file 
     //begin populating with a for loop 
     int i = 0; //incrementer 
     while(reader.readLine() != null) //while not end of file 
     { 
      //assign values to placeholders 

      //add new card and take parameters 
      database.add(new Card()); 
      database.get(i).setCardName(reader.readLine()); 
      database.get(i).setExpansion(reader.readLine()); 
      database.get(i).setCardNum(reader.readLine()); 
      database.get(i).setUnitGrade(Integer.parseInt(reader.readLine())); 





     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //****************************************************************************************** 
    //populate arraylist 
    ArrayAdapter<Card> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, database); 
    ListView lv = (ListView) findViewById(R.id.card_database_listview); 
    lv.setAdapter(adapter); 


} 
+0

Какая ошибка вы видите в logcat, когда ваше приложение выходит из строя? –

+0

это странно. В нем говорится, что при чтении значения произошло столкновение со смертельным исходом. Вызывает это недопустимое целое число. Я не уверен, как он читает эти данные как целое число, когда я намереваюсь его читать как строку. –

+0

Возможно, ваш файл не находится в папке «Активы». Вы уверены, что ваш файл находится в папке src/main/assets /? –

ответ

1
 StringBuffer stringBuffer = new StringBuffer(); 

     try { 

      InputStream is = mContext.getResources().getAssets().open("your-file-path"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
      String line; 

      while ((line = br.readLine()) != null) { 
       //play with each line here 
      } 
}... 

Попробуйте этот код, чтобы получить данные от активов.

ИЛИ если вы не хотите очищать свой код. попробуйте изменить свой код следующим образом. Я думаю, проблема в вашей петле.

String line = null; 

while((line = reader.readLine()) != null) //while not end of file 
     { 
      //play with each line here 

     } 

но сбор/хранение данных, как это нестабильное и трудно поддерживать. я предлагаю использовать JSON. для хранения данных в активах, чтобы вы могли собирать и хранить данные как можно быстрее.

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