Note that there are some explanatory texts on larger screens.

plurals
  1. POGetting java.util.concurrent.RejectedExecutionException from asyncTask on android
    primarykey
    data
    text
    <p>I am reading a sqlite database into a tableLayout. I wan't to do this in a seperate thread instead of having a long wait with no ui updates. So I used an AsyncTask to do some of the work and publish the results. However only about 1/4th of the item in my list actually make it on to the TableLayout. It works fine without the AsyncTask. Most of the items on the list throw an error (which I caught) java.util.concurrent.RejectedExecutionException. I'm not sure why this is. Here is my code.</p> <pre><code>myDB.execSQL("CREATE TABLE IF NOT EXISTS " + TableName + " (_id INTEGER PRIMARY KEY, filepath TEXT UNIQUE, title TEXT, artist TEXT, album TEXT, time TEXT, playcount NUMERIC);"); Cursor c = myDB.rawQuery("SELECT * FROM " + TableName, null); c.moveToFirst(); if (c != null) { int color = 0xFFdfe8ea; this.startManagingCursor(c); // Loop through all Results do { try{ MyAsyncTask aTask = new MyAsyncTask(); String[]strings= {c.getString(c.getColumnIndex("title")),c.getString(c.getColumnIndex("artist")),c.getString(c.getColumnIndex("time")),c.getString(c.getColumnIndex("album")),""+color}; aTask.execute(strings); }catch(Exception e){ Log.w("****", e); } if (color == 0xFFdfe8ea) { color = 0xFFf2f8fa; } else { color = 0xFFdfe8ea; } } while (c.moveToNext()); } } catch (SQLException e) { Log.e("****", e.toString()); } finally { if (myDB != null) { myDB.close(); } } </code></pre> <p>and here is the AsyncTask</p> <pre><code>class MyAsyncTask extends AsyncTask&lt;String, Void, View&gt; { @Override protected View doInBackground(String... params) { int color = Integer.parseInt(params[4]); TableRow tr = new TableRow(MainActivity.this); tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); TextView space = new TextView(MainActivity.this); space.setText(""); space.setBackgroundColor(color); //0xFFf2f8fa alternating space.setSingleLine(); space.setPadding(2, 2, 2, 2); space.setGravity(Gravity.LEFT); space.setTextColor(0xFF000000); space.setLayoutParams(new LayoutParams( findViewById(R.id.spaceColumn).getWidth(), LayoutParams.WRAP_CONTENT)); /* Create a Button to be the row-content. */ TextView title = new TextView(MainActivity.this); title.setText(params[0]); title.setBackgroundColor(color); //0xFFf2f8fa alternating title.setSingleLine(); title.setPadding(2, 2, 2, 2); title.setGravity(Gravity.LEFT); title.setTextColor(0xFF000000); title.setEllipsize(TruncateAt.END); title.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Create a Button to be the row-content. */ TextView artist = new TextView(MainActivity.this); artist.setText(params[1]); artist.setBackgroundColor(color); //0xFFf2f8fa alternating artist.setSingleLine(); artist.setPadding(2, 2, 2, 2); artist.setGravity(Gravity.LEFT); artist.setTextColor(0xFF000000); artist.setEllipsize(TruncateAt.END); artist.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Create a Button to be the row-content. */ TextView time = new TextView(MainActivity.this); time.setText(params[2]); time.setBackgroundColor(color); //0xFFf2f8fa alternating time.setSingleLine(); time.setPadding(2, 2, 2, 2); time.setGravity(Gravity.LEFT); time.setTextColor(0xFF000000); time.setLayoutParams(new LayoutParams( findViewById(R.id.timeColumn).getWidth(), LayoutParams.WRAP_CONTENT)); /* Create a Button to be the row-content. */ TextView album = new TextView(MainActivity.this); album.setText(params[3]); album.setBackgroundColor(color); //0xFFf2f8fa alternating album.setSingleLine(); album.setPadding(2, 2, 2, 2); album.setGravity(Gravity.LEFT); album.setTextColor(0xFF000000); album.setEllipsize(TruncateAt.END); album.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Add Button to row. */ tr.addView(space); tr.addView(title); tr.addView(artist); tr.addView(time); tr.addView(album); /* Add row to TableLayout. */ return tr; } @Override protected void onPostExecute(View tr) { ((TableLayout) findViewById(R.id.tableLayout)).addView(tr, new TableLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); } @Override protected void onPreExecute() { } } </code></pre> <hr> <p>For reference this is how I fixed it.</p> <pre><code>class MyAsyncTask extends AsyncTask&lt;Void, Song, Void&gt; { @Override protected Void doInBackground(Void... params) { SQLiteDatabase myDB = openOrCreateDatabase("DatabaseName", MODE_PRIVATE, null); String TableName = "songs"; myDB.execSQL("CREATE TABLE IF NOT EXISTS " + TableName + " (_id INTEGER PRIMARY KEY, filepath TEXT UNIQUE, title TEXT, artist TEXT, album TEXT, time TEXT, playcount NUMERIC);"); Cursor c = myDB.rawQuery("SELECT * FROM " + TableName, null); c.moveToFirst(); int filepathIndex=c.getColumnIndex("filepath"); int titleIndex=c.getColumnIndex("title"); int artistIndex=c.getColumnIndex("artist"); int albumIndex=c.getColumnIndex("album"); int timeIndex=c.getColumnIndex("time"); int playcountIndex=c.getColumnIndex("playcount"); if (c != null) { int color = 0xFFdfe8ea; // this.startManagingCursor(c); // Loop through all Results do { Song song = new Song(c.getString(filepathIndex),c.getString(titleIndex),c.getString(artistIndex),c.getString(albumIndex),c.getString(timeIndex),c.getInt(playcountIndex),color); // Add to song the data from your cursor publishProgress(song); if (color == 0xFFdfe8ea) { color = 0xFFf2f8fa; } else { color = 0xFFdfe8ea; } } while (c.moveToNext()); } return null; } @Override protected void onPostExecute(Void item) { } @Override protected void onPreExecute() { } @Override protected void onProgressUpdate(Song... items) { for (Song song : items) { TableRow tr = new TableRow(MainActivity.this); tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); TextView space = new TextView(MainActivity.this); space.setText(""); space.setBackgroundColor(song.color); //0xFFf2f8fa alternating space.setSingleLine(); space.setPadding(2, 2, 2, 2); space.setGravity(Gravity.LEFT); space.setTextColor(0xFF000000); space.setLayoutParams(new LayoutParams( findViewById(R.id.spaceColumn).getWidth(), LayoutParams.WRAP_CONTENT)); /* Create a Button to be the row-content. */ TextView title = new TextView(MainActivity.this); title.setText(song.title); title.setBackgroundColor(song.color); //0xFFf2f8fa alternating title.setSingleLine(); title.setPadding(2, 2, 2, 2); title.setGravity(Gravity.LEFT); title.setTextColor(0xFF000000); title.setEllipsize(TruncateAt.END); title.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Create a Button to be the row-content. */ TextView artist = new TextView(MainActivity.this); artist.setText(song.artist); artist.setBackgroundColor(song.color); //0xFFf2f8fa alternating artist.setSingleLine(); artist.setPadding(2, 2, 2, 2); artist.setGravity(Gravity.LEFT); artist.setTextColor(0xFF000000); artist.setEllipsize(TruncateAt.END); artist.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Create a Button to be the row-content. */ TextView time = new TextView(MainActivity.this); time.setText(song.time); time.setBackgroundColor(song.color); //0xFFf2f8fa alternating time.setSingleLine(); time.setPadding(2, 2, 2, 2); time.setGravity(Gravity.LEFT); time.setTextColor(0xFF000000); time.setLayoutParams(new LayoutParams( findViewById(R.id.timeColumn).getWidth(), LayoutParams.WRAP_CONTENT)); /* Create a Button to be the row-content. */ TextView album = new TextView(MainActivity.this); album.setText(song.album); album.setBackgroundColor(song.color); //0xFFf2f8fa alternating album.setSingleLine(); album.setPadding(2, 2, 2, 2); album.setGravity(Gravity.LEFT); album.setTextColor(0xFF000000); album.setEllipsize(TruncateAt.END); album.setLayoutParams(new LayoutParams( 0, LayoutParams.WRAP_CONTENT, 1)); /* Add Button to row. */ tr.addView(space); tr.addView(title); tr.addView(artist); tr.addView(time); tr.addView(album); // Add the row to the table ((TableLayout) findViewById(R.id.tableLayout)).addView(tr, new TableLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload