Ошибка Looper.prepare от AsyncThread "doInBackground()"
Я новичок в Threading, поэтому для кого-то это может быть легко, но для меня это сложно решить. Я пытаюсь показать простым способом, что я хочу делать.
Сначала создайте некоторые объекты в MainActivity:
public class MainActivity extends AppCompatActivity {
ArrayList<Cell> cellsForDB;
public ArrayList<Cell> getCellsForDB(){
return cellsForDB;
}
protected void onCreate(Bundle savedInstanceState) {
...
batteryFromIntent = (Battery) getIntent().getSerializableExtra("batteryFromDB");
generateCellsForDB();
CellStorage cellStorage = new CellStorage(getBaseContext());
cellStorage.runCellApiTasks();
...
}
public void generateCellsForDB() {
ArrayList<Cell>() cellsForDB = new ArrayList<Cell>();
for (int i = 0; i < batteryFromIntent.getCell(); i++) {
Cell cell = new Cell();
cell.setCellNo(i + 1);
cell.setCellVoltage(0);
cell.setDensity(0);
cellsForDB.add(cell);
}
}
}
CellApiTask должен получить ArrayList, который сгенерирован, и должен записать его в базу данных SQL с помощью onPostExecute.
CellApiTask.java
public CellApiTask(Context context) {
this.context = context;
}
@Override
protected ArrayList<Cell> doInBackground(Void... params) {
MainActivity cellVoltageClass = new MainAcivity();
return cellVoltageClass.getCellsForDB();
}
@Override
protected void onPostExecute(ArrayList<Cell> cell) {
...
}
Это журнал ошибок, если я пытаюсь запустить его:
FATAL EXCEPTION: AsyncTask #3
Process: fronius.com.serviceapp_frontend, PID: 4456
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:318)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.app.Activity.<init>(Activity.java:845)
at android.support.v4.app.SupportActivity.<init>(SupportActivity.java:31)
at android.support.v4.app.BaseFragmentActivityGingerbread.<init>(BaseFragmentActivityGingerbread.java:37)
at android.support.v4.app.BaseFragmentActivityHoneycomb.<init>(BaseFragmentActivityHoneycomb.java:29)
at android.support.v4.app.BaseFragmentActivityJB.<init>(BaseFragmentActivityJB.java:30)
at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:79)
at android.support.v7.app.AppCompatActivity.<init>(AppCompatActivity.java:61)
at xxxxxx.com.xxxxx_frontend.utils.xxxxxx.MainActivity.<init>(MainActivity.java:0)
at xxxxx.com.xxxxxx_frontend.api.tasks.CellApiTask.doInBackground(CellApiTask.java:29)
at xxxxxx.com.xxxxxx_frontend.api.tasks.CellApiTask.doInBackground(CellApiTask.java:20)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)