2014-01-02 3 views
3

У меня есть проект Android (работает в эмуляторе), в котором нажатие кнопки «Романы» в главном меню должно приводить к значениям частей, где typeField = 0 (т.е. false) в «штука» в базе данных SQL, отображаемая в ListActivity через ArrayList.Android-приложение «Остановка» без ошибки LogCat

Однако при нажатии кнопки «Романы» приложение останавливается и отображается диалоговое окно с сообщением «К сожалению, английскийLitRevision остановлен». Нет выхода LogCat.

Я не удивлюсь, если это очень простая ошибка из-за невежества, но я был бы признателен, если кто-нибудь сможет определить проблему.

UPDATE - фильтр не установлен на «ошибку» на LogCat!

выход LogCat показан ниже:

01-02 18:26:06.344: E/AndroidRuntime(548): FATAL EXCEPTION: main 
01-02 18:26:06.344: E/AndroidRuntime(548): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lawson.englishlitrevision/com.lawson.englishlitrevision.Novel}: java.lang.NullPointerException 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.os.Looper.loop(Looper.java:137) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread.main(ActivityThread.java:4424) 
01-02 18:26:06.344: E/AndroidRuntime(548): at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 18:26:06.344: E/AndroidRuntime(548): at java.lang.reflect.Method.invoke(Method.java:511) 
01-02 18:26:06.344: E/AndroidRuntime(548): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-02 18:26:06.344: E/AndroidRuntime(548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-02 18:26:06.344: E/AndroidRuntime(548): at dalvik.system.NativeStart.main(Native Method) 
01-02 18:26:06.344: E/AndroidRuntime(548): Caused by: java.lang.NullPointerException 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.widget.ListView.setAdapter(ListView.java:460) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ListActivity.setListAdapter(ListActivity.java:265) 
01-02 18:26:06.344: E/AndroidRuntime(548): at com.lawson.englishlitrevision.Novel.onCreate(Novel.java:24) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.Activity.performCreate(Activity.java:4465) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
01-02 18:26:06.344: E/AndroidRuntime(548): ... 11 more 

Я был бы признателен, если кто-нибудь может определить причину ошибки.

Код из трех соответствующих классов показан ниже.

Главное меню:

/** 
* Main Menu (launcher item) 
* @author Daniel Lawson 
* @Version 29/12/13 
*/ 

package com.lawson.englishlitrevision; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 

public class MainMenu extends Activity { 

    /** Button for accessing novels area */ 
    private Button novelBut; 
    /** Button for accessing plays area */ 
    private Button playBut; 
    /** Button for viewing progress/statistics */ 
    private Button progressBut; 
    /** Button for viewing about screen */ 
    private Button aboutBut; 
    /** Button for exiting the application */ 
    private Button exitBut; 

    /** 
    * Method called when activity is started. Sets up required data. 
    * 
    * @param savedInstanceState 
    *   : The saved state of the application 
    */ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Sets up layout 
     setContentView(R.layout.main_menu_layout); 
     createButton(); 
    } 

    /** Sets up the buttons */ 
    public void createButton() { 
     novelBut = (Button) findViewById(R.id.novelBut); 
     playBut = (Button) findViewById(R.id.playBut); 
     progressBut = (Button) findViewById(R.id.addNovBut); 
     aboutBut = (Button) findViewById(R.id.aboutBut); 
     exitBut = (Button) findViewById(R.id.exitBut); 
    } 

    /** 
    * Method called when novel button is clicked. Starts novel activity. 
    * 
    * @param novBut 
    *   : The view of the novel button, which has been clicked. 
    */ 
    public void goNovel(View novBut) { 
     startActivity(new Intent(this, Novel.class)); 
    } 

    /** 
    * Method called when play button is clicked. Starts play activity. 
    * 
    * @param playBut 
    *   : The view of the play button, which has been clicked. 
    */ 

    public void goPlay(View playBut) { 
     startActivity(new Intent(this, Play.class)); 
    } 

    /** 
    * Method called when progress button is clicked. Starts stats activity. 
    * 
    * @param progBut 
    *   : The view of the progress button, which has been clicked. 
    */ 
    public void goStats(View progBut) { 
     startActivity(new Intent(this, Stats.class)); 
    } 

    /** 
    * Method called when abpit button is clicked. Starts about activity. 
    * 
    * @param aboutBut 
    *   : The view of the about button, which has been clicked. 
    */ 
    public void goAbout(View aboutBut) { 
     startActivity(new Intent(this, About.class)); 
    } 

    /** 
    * Method called when exit button is clicked. Quits application. 
    * 
    * @param closeBut 
    *   : The view of the exit button, which has been clicked. 
    */ 
    public void goClose(View closeBut) { 
     this.finish(); 
    } 

} 

Роман:

package com.lawson.englishlitrevision; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.content.Context; 

public class Novel extends ListActivity { 

    ArrayList<String> novels = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle icicle) { 
     ManipulateDatabase md = new ManipulateDatabase(this); 

     super.onCreate(icicle); 
     novels = md.getPieces("0"); 
     setContentView(R.layout.novel_layout); 
     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, novels)); 

    } 

    public void addNovel() { 
     // show text input 
     // add the String put in to database as new novel 
     // update list 
    } 

    public void deleteNovel() { 
     // show checkboxes 
     // allow selection 
     // delete selected records from database 
     // update list 
    } 

} 

ManipulateDatabase:

/** 
* Contains SQL statements and manages connections 
* 
* @author Daniel Lawson 
* @version 29/12/13 
*/ 
package com.lawson.englishlitrevision; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Context; 

import java.util.ArrayList; 
import java.util.Scanner; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 

public class ManipulateDatabase { 

    /** String representing the name of the database */ 
    private static final String databaseName = "EnglishDatabase.db"; 

    /** Int representing the current version of the database */ 
    private static final int databaseVersion = 1; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * String representing the table that stores the name of the piece and 
    * whether it is a play or not. 
    */ 
    private static final String pieceTable = "pieceTable"; 

    /** 
    * String representing the table that stores the name of the point made, 
    * which piece it belongs to, and which element it pertains to. 
    */ 

    private static final String specificTable = "specificTable"; 

    /** 
    * String representing the table that stores the element, the piece it 
    * belongs to, and whether or not it is a character. 
    */ 

    private static final String elementTable = "elementTable"; 

    /** 
    * String representing the table that stores the quote and the point it 
    * links to. 
    */ 

    private static final String quoteTable = "quoteTable"; 

    /** 
    * String representing the table that stores the piece and the 
    * correct/incorrect responses on various dates 
    */ 

    private static final String statsTable = "statsTable"; 

    // ---------------------------------------------------------------------------------- 

    /** String representing the piece field of the piece table */ 

    private static final String pieceField = "piece"; 

    /** String representing the type field of the piece table */ 

    private static final String typeField = "isPlay"; 

    /** String representing the point field of the specific table */ 

    private static final String pointField = "point"; 

    /** String representing the element field of the element table */ 

    private static final String elementField = "element"; 

    /** String representing the elType field of the element table */ 

    private static final String elTypeField = "isCharacter"; 

    /** String representing the quote field of the quote table */ 

    private static final String quoteField = "quote"; 

    /** String representing the ID field of the stats table */ 

    private static final String idField = "statId"; 

    /** String representing the correct field of the stats table */ 

    private static final String correctField = "correct"; 

    /** String representing the incorrect field of the stats table */ 

    private static final String incorrectField = "incorrect"; 

    /** String representing the date field of the stats table */ 

    private static final String dateField = "date"; 

    // ---------------------------------------------------------------------------------- 

    /** String array representing all the fields of the piece table */ 

    private static final String[] pieceTableFields = { pieceField, typeField }; 

    /** String array representing all the fields of the specific table */ 

    private static final String[] specificTableFields = { pointField, 
      pieceField, elementField }; 

    /** String array representing all the fields of the quote table */ 

    private static final String[] quoteTableFields = { quoteField, pointField }; 

    /** String array representing all the fields of the element table */ 

    private static final String[] elementTableFields = { elementField, 
      pieceField, elTypeField }; 

    /** String array representing all the fields of the stats table */ 

    private static final String[] statsTableFields = { idField, pieceField, 
      correctField, incorrectField, dateField }; 

    // ---------------------------------------------------------------------------------- 

    /** SQL statement to create the piece table. */ 

    private static final String createPieceTable = "CREATE TABLE " + pieceTable 
      + " (" + pieceField + " TEXT NOT NULL PRIMARY KEY, " + typeField 
      + " INTEGER);"; 

    /** SQL statement to create the specific table. */ 

    private static final String createSpecificTable = "CREATE TABLE " 
      + specificTable + "(" + pointField + " TEXT NOT NULL PRIMARY KEY," 
      + pieceField + " TEXT NOT NULL," + elementField + " TEXT NOT NULL)"; 

    /** SQL statement to create the quotes table. */ 

    private static final String createQuoteTable = "CREATE TABLE " + quoteTable 
      + "(" + quoteField + " TEXT NOT NULL PRIMARY KEY," + pointField 
      + " TEXT NOT NULL PRIMARY KEY)"; 

    /** SQL statement to create the element table. */ 

    private static final String createElementTable = "CREATE TABLE " 
      + elementTable + "(" + elementField + " TEXT NOT NULL PRIMARY KEY," 
      + pieceField + " TEXT NOT NULL," + elTypeField + " INTEGER)"; 

    /** SQL statement to create the stats table. */ 

    private static final String createStatsTable = "CREATE TABLE " + statsTable 
      + "(" + idField + " INTEGER PRIMARY KEY," + pieceField 
      + " TEXT NOT NULL," + correctField + " INTEGER," + incorrectField 
      + " INTEGER," + dateField + " DATE)"; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * SQL statement to search the piece table - replace [columnName] and 
    * [value] with field to be searched and what value to look for. 
    */ 

    private static final String searchPieceTable = "SELECT * FROM " 
      + pieceTable + " WHERE [columnName] = '[value]';"; 

    /** 
    * SQL statement to search the specific table - replace [columnName] and 
    * [value] with field to be searched and what value to look for. 
    */ 

    private static final String searchSpecificTable = "SELECT * FROM " 
      + specificTable + " WHERE [columnName] = '[value]'"; 

    /** 
    * SQL statement to search the quote table - replace [columnName] and 
    * [value] with field to be searched and what value to look for. 
    */ 

    private static final String searchQuoteTable = "SELECT * FROM " 
      + quoteTable + " WHERE [columnName] = '[value]'"; 

    /** 
    * SQL statement to search the element table - replace [columnName] and 
    * [value] with field to be searched and what value to look for. 
    */ 

    private static final String searchElementTable = "SELECT * FROM " 
      + elementTable + " WHERE [columnName] = '[value]'"; 

    /** 
    * SQL statement to search the stats table - replace [columnName] and 
    * [value] with field to be searched and what value to look for. 
    */ 

    private static final String searchStatsTable = "SELECT * FROM " 
      + statsTable + " WHERE [columnName] = '[value]'"; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * SQL statement to update the piece table - replace [assignValues] and 
    * [condition] with items to be altered + their new values and the condition 
    * where if true, this change should be applied. 
    */ 

    private static final String updatePieceTable = "UPDATE " + pieceTable 
      + " SET [assignValues] WHERE [condition]"; 

    /** 
    * SQL statement to update the specific table - replace [assignValues] and 
    * [condition] with items to be altered + their new values and the condition 
    * where if true, this change should be applied. 
    */ 

    private static final String updateSpecificTable = "UPDATE " + specificTable 
      + " SET [assignValues] WHERE [condition]"; 

    /** 
    * SQL statement to update the quote table - replace [assignValues] and 
    * [condition] with items to be altered + their new values and the condition 
    * where if true, this change should be applied. 
    */ 

    private static final String updateQuoteTable = "UPDATE " + quoteTable 
      + " SET [assignValues] WHERE [condition]"; 

    /** 
    * SQL statement to update the element table - replace [assignValues] and 
    * [condition] with items to be altered + their new values and the condition 
    * where if true, this change should be applied. 
    */ 

    private static final String updateElementTable = "UPDATE " + elementTable 
      + " SET [assignValues] WHERE [condition]"; 

    /** 
    * SQL statement to update the stats table - replace [assignValues] and 
    * [condition] with items to be altered + their new values and the condition 
    * where if true, this change should be applied. 
    */ 

    private static final String updateStatsTable = "UPDATE " + statsTable 
      + " SET [assignValues] WHERE [condition]"; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * SQL statement to delete from the piece table - replace [condition] the 
    * condition where if true, this deletion should be applied. 
    */ 

    private static final String deleteFromPieceTable = "DELETE FROM " 
      + pieceTable + " WHERE [condition]"; 

    /** 
    * SQL statement to delete from the specific table - replace [condition] the 
    * condition where if true, this deletion should be applied. 
    */ 

    private static final String deleteFromSpecificTable = "DELETE FROM " 
      + specificTable + " WHERE [condition]"; 

    /** 
    * SQL statement to delete from the quote table - replace [condition] the 
    * condition where if true, this deletion should be applied. 
    */ 

    private static final String deleteFromQuoteTable = "DELETE FROM " 
      + quoteTable + " WHERE [condition]"; 

    /** 
    * SQL statement to delete from the element table - replace [condition] the 
    * condition where if true, this deletion should be applied. 
    */ 

    private static final String deleteFromElementTable = "DELETE FROM " 
      + elementTable + " WHERE [condition]"; 

    /** 
    * SQL statement to delete from the stats table - replace [condition] the 
    * condition where if true, this deletion should be applied. 
    */ 

    private static final String deleteFromStatsTable = "DELETE FROM " 
      + statsTable + " WHERE [condition]"; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * SQL statement to insert into the piece table - replace [values] with the 
    * values to be inserted. 
    */ 

    private static final String insertIntoPieceTable = "INSERT INTO " 
      + pieceTable + " VALUES ([values])"; 

    /** 
    * SQL statement to insert into the specific table - replace [values] with 
    * the values to be inserted. 
    */ 

    private static final String insertIntoSpecificTable = "INSERT INTO " 
      + specificTable + " VALUES ([values])"; 

    /** 
    * SQL statement to insert into the quote table - replace [values] with the 
    * values to be inserted. 
    */ 

    private static final String insertIntoQuoteTable = "INSERT INTO " 
      + quoteTable + " VALUES ([values])"; 

    /** 
    * SQL statement to insert into the element table - replace [values] with 
    * the values to be inserted. 
    */ 

    private static final String insertIntoElementTable = "INSERT INTO " 
      + elementTable + " VALUES ([values])"; 

    /** 
    * SQL statement to insert into the quote table - replace [values] with the 
    * values to be inserted. 
    */ 

    private static final String insertIntoStatsTable = "INSERT INTO " 
      + statsTable + " VALUES ([values])"; 

    // ---------------------------------------------------------------------------------- 

    /** 
    * SQLiteDatabase representing the English database 
    */ 

    private SQLiteDatabase dataBase; 

    /** 
    * Instance of DatabaseHelper class utilised to 'access' database 
    */ 

    private DatabaseHelper baseHelper; 

    /** 
    * Content of the Database Manipulator (ManipulateDatabase class) 
    */ 

    private Activity context; 

    /** 
    * Boolean to store whether or not this is the first time this base/version 
    * has been launched 
    */ 

    private boolean initialLaunch = false; 

    /** 
    * Scanners to read the .txt lists to to input to database 
    */ 

    private Scanner pieceScan = new Scanner("pieceList.txt"); 

    private Scanner specificScan = new Scanner("specificList.txt"); 

    private Scanner elementScan = new Scanner("elementList.txt"); 

    private Scanner quoteScan = new Scanner("quoteList.txt"); 

    /** 
    * Method to open the database 
    */ 

    private void openSesame() { 
     try { 
      dataBase = baseHelper.getWritableDatabase(); 
     } catch (SQLiteException e) { 
      System.out.println("Database couldn't be opened"); 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Method to close the database 
    */ 

    private void closeSesame() { 
     baseHelper.close(); 
    } 

    public ArrayList<String> getPieces(String typePiece) { 
     try { 
      openSesame(); 
      ArrayList<String> pieces = new ArrayList<String>(); 
      String command = searchPieceTable 
        .replace("[columnName]", typeField); 
      command = command.replace("[value]", typePiece); 

      Cursor cursor = dataBase.rawQuery(command, null); 
      cursor.moveToFirst(); 
      while (!cursor.isAfterLast()) { 
       pieces.add(cursor.getString(cursor.getColumnIndex(pieceField))); 
       cursor.moveToNext(); 
      } 
      closeSesame(); 
      return pieces; 
     } catch (SQLiteException e) { 
      e.printStackTrace(); 
      System.out.println("SQL Problem"); 
      return null; 
     } 
    } 

    /** 
    * Constructor 
    * 
    * @param contextIn 
    *   Context of the MainpulateDatabase class 
    */ 

    public ManipulateDatabase(Activity contextIn) { 
     baseHelper = new DatabaseHelper(contextIn); 
     context = contextIn; 
     openSesame(); 
     String line; 
     String pieceName; 
     String isDrama; 
     String point; 
     String element; 
     String quote; 
     String isCharacter; 
     int commaPoint; 
     int commaPoint2; 

     if (initialLaunch) { 
      while (pieceScan.hasNext()) { 
       line = pieceScan.nextLine(); 
       commaPoint = line.indexOf(","); 
       pieceName = line.substring(0, commaPoint); 
       isDrama = line.substring(commaPoint + 1, line.length() - 1); 
       ContentValues pv = new ContentValues(); 
       pv.put(pieceField, pieceName); 
       pv.put(typeField, isDrama); 
       dataBase.insert(pieceTable, null, pv); 

       System.out.println("DAMN YOU MORONIC CRETIN!!"); 
      } 
      while (specificScan.hasNext()) { 
       line = specificScan.nextLine(); 
       commaPoint = line.indexOf(","); 
       point = line.substring(0, commaPoint); 
       commaPoint2 = (line 
         .substring(commaPoint + 1, line.length() - 1) 
         .indexOf(",")); 
       pieceName = line.substring(commaPoint + 1, commaPoint2); 
       element = line.substring(commaPoint2 + 1, line.length() - 1); 

       ContentValues sv = new ContentValues(); 
       sv.put(pointField, point); 
       sv.put(pieceField, pieceName); 
       sv.put(elementField, element); 
       dataBase.insert(specificTable, null, sv); 
      } 
      while (elementScan.hasNext()) { 
       line = elementScan.nextLine(); 
       commaPoint = line.indexOf(","); 
       element = line.substring(0, commaPoint); 
       commaPoint2 = (line 
         .substring(commaPoint + 1, line.length() - 1) 
         .indexOf(",")); 
       pieceName = line.substring(commaPoint + 1, commaPoint2); 
       isCharacter = line 
         .substring(commaPoint2 + 1, line.length() - 1); 

       ContentValues ev = new ContentValues(); 
       ev.put(elementField, element); 
       ev.put(pieceField, pieceName); 
       ev.put(elTypeField, isCharacter); 
       dataBase.insert(elementTable, null, ev); 

      } 
      while (quoteScan.hasNext()) { 
       line = quoteScan.nextLine(); 
       commaPoint = line.indexOf(","); 
       quote = line.substring(0, commaPoint); 
       point = line.substring(commaPoint + 1, line.length() - 1); 

       ContentValues qv = new ContentValues(); 
       qv.put(quoteField, quote); 
       qv.put(pointField, point); 
       dataBase.insert(quoteTable, null, qv); 
      } 

     } 

    } 

    // ---------------------------------------------------------------------------------- 

    /** 
    * Database helper - Three basic methods - required database tasks 
    * 
    * @author Daniel Lawson 
    * @version 30/12/13 
    */ 

    private class DatabaseHelper extends SQLiteOpenHelper { 

     private DatabaseHelper(Context theContext) { 
      super(theContext, databaseName, null, databaseVersion); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      try { 
       db.execSQL(createPieceTable); 
       /* 
       * db.execSQL(createSpecificTable); 
       * db.execSQL(createQuoteTable); db.execSQL(createElementTable); 
       * db.execSQL(createStatsTable); 
       */ 
       // initialLaunch = true; 

      } catch (SQLiteException e) { 
       System.out.println("Failed to create table(s)"); 
       e.printStackTrace(); 
      } 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + pieceTable); 
      db.execSQL("DROP TABLE IF EXISTS " + specificTable); 
      db.execSQL("DROP TABLE IF EXISTS " + quoteTable); 
      db.execSQL("DROP TABLE IF EXISTS " + elementTable); 
      db.execSQL("DROP TABLE IF EXISTS " + statsTable); 
      onCreate(db); 

     } 

    } 
} 
+0

Если он разбился, то есть выход logcat. Убедитесь, что фильтр установлен на ошибку. Кроме того, убедитесь, что '' Novel'''''' объявлен в вашем 'manifest.xml' – codeMagic

+0

Спасибо, теперь у меня есть выход LogCat. Я отредактирую исходное сообщение, чтобы узнать, может ли кто-нибудь определить проблему. – otherdan

+0

@otherdan arraylist novels is null? – Raghunandan

ответ

0

Это место, на котором вы должны смотреть в LogCat:

01-02 18:26:06.344: E/AndroidRuntime(548): Caused by: java.lang.NullPointerException 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) 

вероятно этот призыв:

novels = md.getPieces("0"); 

возвращает нулевое значение, но от того, что я вижу, это должно произойти только тогда, когда есть исключение внутри:

public ArrayList<String> getPieces(String typePiece) { 

так что ищите проблемы в этой функции.

+0

Это, кажется, проблема, теперь я попытаюсь определить проблему в методе, который должен вернуть этот заполненный ArrayList. Благодаря! – otherdan

0

novels ArrayList является нулевым

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/widget/ArrayAdapter.java/

Caused by: java.lang.NullPointerException 
01-02 18:26:06.344: E/AndroidRuntime(548): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) 

ArrayAdapter.java:330 ​​

328 
329 public int getCount() { 
330  return mObjects.size(); 
331 } 

ArrayAdapter использует GetCount, который возвращает размер списка, указывающего novels является нуль означает, что вы должны посмотреть на

novels = md.getPieces("0"); 
+0

Это, кажется, проблема, теперь я попытаюсь определить проблему в методе, который должен вернуть этот заполненный ArrayList. Благодаря! – otherdan

+0

@otherdana также проверяет, что 'md' правильно инициализирован и не является нулевым – Raghunandan

+0

Я изменил код в теле catch, чтобы вернуть ArrayList даже при возникновении исключения, и список романов работает в этом случае, следовательно, метод должен быть проблемой. – otherdan

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