在AsyncTask中从SQLite数据库加载数据时活动中断

时间:2018-07-08 11:01:26

标签: java android sqlite

我已经搜索了我的问题。类似的问题是here,但不是答案。

这是我的活动代码:

public class HistoryActivity extends AppCompatActivity {

RecyclerView recyclerView;
RecyclerReviewedLocaionAdaptor recyclerAdaptor;
ArrayList<String> id;
ArrayList<String> cnic;
ArrayList<String> details;
ProgressDialog progressDialog;
NumberDB numberDB;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);


    // recycler view

    recyclerView = (RecyclerView) findViewById(R.id.recyclerViewReviewedLocation);

    new loadData().execute();
    recyclerAdaptor = new RecyclerReviewedLocaionAdaptor(id, cnic, details);

    recyclerView.setAdapter(recyclerAdaptor);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

}

public void loadData()
{
    id=new ArrayList<String>();
    cnic=new ArrayList<String>();
    details=new ArrayList<String>();
    numberDB=new NumberDB(getApplicationContext(), "Users", null, 1);
    Cursor cursor=numberDB.getData();

    if (cursor.moveToFirst()){
        do{
            String idData = cursor.getString(cursor.getColumnIndex(NumberDB.KEY_ID));
            String cnicData = cursor.getString(cursor.getColumnIndex(NumberDB.sentFrom));
            String detailsData = cursor.getString(cursor.getColumnIndex(NumberDB.details));
            // do what ever you want here
            id.add(idData);
            id.add(cnicData);
            id.add(detailsData);
        }while(cursor.moveToNext());
    }
    cursor.close();
}



class loadData extends AsyncTask<Void, Void, Void>
{

    @Override
    protected Void doInBackground(Void... voids) {

        id.clear();
        cnic.clear();
        details.clear();
        try{
           loadData();

        }catch (Exception e)
        {
            Log.i("Database", "Error fetching Data");
        }

        return null;
    }


    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Toast.makeText(HistoryActivity.this, "Complete", Toast.LENGTH_SHORT).show();
    }
}

我得到的错误是:

  E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.abdullahsaleem.meravote, PID: 31721
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.abdullahsaleem.meravote/com.example.abdullahsaleem.meravote.HistoryActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2505)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2577)

1 个答案:

答案 0 :(得分:0)

您要先清除arrayList,然后再对其进行初始化