Note that there are some explanatory texts on larger screens.

plurals
  1. POfunction gets stuck / freezes in the return statement
    text
    copied!<p>I have a function which is supposed to return an object of arraylists but for some reason it gets stuck in the return statement. Everything before the return statement is working. I had an error where the ArrayLists only contained a single value which makes the function work, but of course returns the wrong data.</p> <pre><code>package com.burninglobster.TP; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.widget.LinearLayout; public class Chart2Activity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Object graphdata[] = graphsetup(); Log.d("This message is NOT shown", ""); List&lt;Double&gt; distances = (List&lt;Double&gt;) graphdata[0]; List&lt;Double&gt; accall = (List&lt;Double&gt;) graphdata[1]; List&lt;Double&gt; accdir = (List&lt;Double&gt;) graphdata[2]; List&lt;Double&gt; accdist = (List&lt;Double&gt;) graphdata[3]; List&lt;Double&gt; meandir = (List&lt;Double&gt;) graphdata[4]; List&lt;Double&gt; meandist = (List&lt;Double&gt;) graphdata[5]; linegraph lgraph = new linegraph(); setContentView(R.layout.splot); LinearLayout layout1 = (LinearLayout) findViewById(R.id.splot2); layout1.addView(lgraph.getView1(this, distances, accall)); LinearLayout layout2 = (LinearLayout) findViewById(R.id.splot3); layout2.addView(lgraph.getView2(this, distances, accdir, meandir)); LinearLayout layout3 = (LinearLayout) findViewById(R.id.splot4); layout3.addView(lgraph.getView2(this, distances, accdist, meandist)); } public Object[] graphsetup() { SharedPreferences rprefs; rprefs = getSharedPreferences("com.burninglobster.TP.tprefs", Context.MODE_WORLD_READABLE); double setdist = rprefs.getFloat("setdist", 0); String[] sourcesarray = rprefs.getString("sourcesarray", "Standarddef") .split(","); String setdisc = sourcesarray[rprefs.getInt("spindiscpos", 0)]; DBHelper dbHelper = new DBHelper(Chart2Activity.this); SQLiteDatabase db; db = dbHelper.getReadableDatabase(); String graphquery = "SELECT " + DBHelper.SHOOTER + "," + DBHelper.WDIR + "," + DBHelper.WSTR + "," + DBHelper.SMOD + "," + DBHelper.DIST + "," + DBHelper.R_DIST + "," + DBHelper.OS_DIST + " FROM " + DBHelper.TABLE + " WHERE " + DBHelper.SHOOTER + "='" + setdisc + "'" + " ORDER BY " + DBHelper.DIST; Cursor graphcursor = db.rawQuery(graphquery, null); int rows = graphcursor.getCount(); int ishooter = graphcursor.getColumnIndex(DBHelper.SHOOTER); int iwdir = graphcursor.getColumnIndex(DBHelper.WDIR); int iwstr = graphcursor.getColumnIndex(DBHelper.WSTR); int ismod = graphcursor.getColumnIndex(DBHelper.SMOD); int idist = graphcursor.getColumnIndex(DBHelper.DIST); int irdist = graphcursor.getColumnIndex(DBHelper.R_DIST); int iosdist = graphcursor.getColumnIndex(DBHelper.OS_DIST); List&lt;Double&gt; accall = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; accdir = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; meandir = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; accdist = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; meandist = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; accdirtemp = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; accdisttemp = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; distances = new ArrayList&lt;Double&gt;(); double dalla = 0; double ddira = 0; double ddista = 0; double ddirm = 0; double ddistm = 0; double currentdist = 0; graphcursor.moveToFirst(); if (rows &gt; 0) { currentdist = graphcursor.getDouble(idist); } for (int i = 0; i &lt; rows; i++) { // REMOVED ERROR CAUSING SINGLE VALUE IN ARRAYLISTS: // currentdist=graphcursor.getDouble(idist); if (graphcursor.getDouble(idist) &lt; (currentdist + 5)) { accdirtemp.add(graphcursor.getDouble(irdist)); accdisttemp.add(graphcursor.getDouble(iosdist)); } else { for (int u = 0; u &lt; accdirtemp.size(); u++) { ddira += Math.pow(accdirtemp.get(u), 2); ddista += Math.pow(accdisttemp.get(u), 2); dalla += Math.pow(accdirtemp.get(u), 2) + Math.pow(accdisttemp.get(u), 2); ddirm += accdirtemp.get(u); ddistm += accdisttemp.get(u); } accall.add(Math.sqrt(dalla / accdirtemp.size())); Double.toString(Math.sqrt(dalla / accdirtemp.size()))); accdir.add(Math.sqrt(ddira / accdirtemp.size())); accdist.add(Math.sqrt(ddista / accdirtemp.size())); meandir.add(ddirm / accdirtemp.size()); meandist.add(ddistm / accdirtemp.size()); distances.add(currentdist); dalla = 0; ddira = 0; ddirm = 0; ddista = 0; ddistm = 0; currentdist = graphcursor.getDouble(idist) + 5; accdirtemp.clear(); accdisttemp.clear(); accdirtemp.add(graphcursor.getDouble(irdist)); accdisttemp.add(graphcursor.getDouble(iosdist)); } graphcursor.moveToNext(); } for (int u = 0; u &lt; accdirtemp.size(); u++) { ddira += Math.pow(accdirtemp.get(u), 2); ddista += Math.pow(accdisttemp.get(u), 2); dalla += Math.pow(accdirtemp.get(u), 2) + Math.pow(accdisttemp.get(u), 2); ddirm += accdirtemp.get(u); ddistm += accdisttemp.get(u); } accall.add(Math.sqrt(dalla / accdirtemp.size())); accdir.add(Math.sqrt(ddira / accdirtemp.size())); accdist.add(Math.sqrt(ddista / accdirtemp.size())); meandir.add(ddirm / accdirtemp.size()); meandist.add(ddistm / accdirtemp.size()); distances.add(currentdist); db.close(); dbHelper.close(); Log.d("This message", " is shown"); return new Object[] { distances, accall, accdir, accdist, meandir, meandist }; } } </code></pre> <p>I have a similar function that works just fine and I can't see the difference:</p> <pre><code>package com.burninglobster.TP; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.widget.LinearLayout; public class ChartActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Object plotdata[] = plotsetup(); Log.d("This message", " is also shown"); List&lt;Double&gt; rd1 = (List&lt;Double&gt;) plotdata[0]; List&lt;Double&gt; osd1 = (List&lt;Double&gt;) plotdata[1]; List&lt;Double&gt; rd2 = (List&lt;Double&gt;) plotdata[2]; List&lt;Double&gt; osd2 = (List&lt;Double&gt;) plotdata[3]; List&lt;Double&gt; rd3 = (List&lt;Double&gt;) plotdata[4]; List&lt;Double&gt; osd3 = (List&lt;Double&gt;) plotdata[5]; scatterplot plot = new scatterplot(); setContentView(R.layout.tplot); LinearLayout layout = (LinearLayout) findViewById(R.id.chart); layout.addView(plot.getView(this, rd1, osd1, rd2, osd2, rd3, osd3)); } public Object[] plotsetup() { SharedPreferences rprefs; rprefs = getSharedPreferences("com.burninglobster.TP.tprefs", Context.MODE_WORLD_READABLE); double setdist = rprefs.getFloat("setdist", 0); String[] sourcesarray = rprefs.getString("sourcesarray", "Standarddef") .split(","); String setdisc = sourcesarray[rprefs.getInt("spindiscpos", 0)]; DBHelper dbHelper = new DBHelper(ChartActivity.this); SQLiteDatabase db; db = dbHelper.getReadableDatabase(); String plotquery = "SELECT " + DBHelper.SHOOTER + "," + DBHelper.WDIR + "," + DBHelper.WSTR + "," + DBHelper.SMOD + "," + DBHelper.DIST + "," + DBHelper.R_DIST + "," + DBHelper.OS_DIST + " FROM " + DBHelper.TABLE; Cursor plotcursor = db.rawQuery(plotquery, null); int ishooter = plotcursor.getColumnIndex(DBHelper.SHOOTER); int iwdir = plotcursor.getColumnIndex(DBHelper.WDIR); int iwstr = plotcursor.getColumnIndex(DBHelper.WSTR); int ismod = plotcursor.getColumnIndex(DBHelper.SMOD); int idist = plotcursor.getColumnIndex(DBHelper.DIST); int irdist = plotcursor.getColumnIndex(DBHelper.R_DIST); int iosdist = plotcursor.getColumnIndex(DBHelper.OS_DIST); int rows = plotcursor.getCount(); List&lt;Double&gt; rd1 = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; osd1 = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; rd2 = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; osd2 = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; rd3 = new ArrayList&lt;Double&gt;(); List&lt;Double&gt; osd3 = new ArrayList&lt;Double&gt;(); plotcursor.moveToFirst(); int disccount = 0; int array1 = 0; int array2 = 0; int array3 = 0; double cursordist; for (int i = 0; i &lt; rows; i++) { if (plotcursor.getString(0).equals(setdisc)) { cursordist = plotcursor.getDouble(idist); if (cursordist &gt; (setdist - 5) &amp;&amp; cursordist &lt; (setdist + 5)) { rd1.add(plotcursor.getDouble(irdist)); osd1.add(plotcursor.getDouble(iosdist)); array1++; } else if (cursordist &gt; (setdist) &amp;&amp; cursordist &lt; (setdist + 10)) { rd2.add(plotcursor.getDouble(irdist)); osd2.add(plotcursor.getDouble(iosdist)); array2++; } else if (cursordist &gt; (setdist - 10) &amp;&amp; cursordist &lt; (setdist)) { rd3.add(plotcursor.getDouble(irdist)); osd3.add(plotcursor.getDouble(iosdist)); array3++; } disccount++; } plotcursor.moveToNext(); } db.close(); dbHelper.close(); Log.d("This message", " is shown"); return new Object[] { rd1, osd1, rd2, osd2, rd3, osd3 }; } } </code></pre> <p>I added a 'Log.d' just before the return statement and then another just after the function call in the activity and only the first one is shown. It freezes for ½-1 minute and then shows the dialogue to wait or kill. I don't know how to get more info on the problem. Suggestions?</p>
 

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