dimanche 6 septembre 2015

Android Quiz App can't call second id_question from DB

I am new developer, i am making quiz app, there are categories, and each category has number of questions. I use Gridview. Categories are opening with image on MainActivity without problem. I used Adapters and Loaders. For example If I press FirstCategory the 1 question under it opening. There is TextViewQuestion and 4 RadioButtons with 4 answers and a Button to go to next question. RadioButtons are clickable. I can't write right code to go to next question by adapter. Here is my code: public class Questions {

private int id;
private Category cat_id;
private String category_id;
private String question;
private String ans_1;
private String ans_2;
private String ans_3;
private String ans_4;
private String ans_r;
private int status;
private int user_ans;


public Questions() {
}

public Questions(int id, String category_id, String question, String ans_1, String ans_2, String ans_3, String ans_4, String ans_r, int status, int user_ans) {
    this.id = id;
    this.category_id=category_id;
    this.question = question;
    this.ans_1 = ans_1;
    this.ans_2 = ans_2;
    this.ans_3 = ans_3;
    this.ans_4 = ans_4;
    this.ans_r = ans_r;
    this.status = status;
    this.user_ans = user_ans;

}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public Category getCat_id() {
    return cat_id;
}

public void setCat_id(Category cat_id) {
    this.cat_id = cat_id;
}

public String getCategory_id() {
    return category_id;
}

public void setCategory_id(String category_id) {
    this.category_id = category_id;
}

public String getQuestion() {
    return question;
}

public void setQuestion(String question) {
    this.question = question;
}

public String getAns_1() {
    return ans_1;
}

public void setAns_1(String ans_1) {
    this.ans_1 = ans_1;
}

public String getAns_2() {
    return ans_2;
}

public void setAns_2(String ans_2) {
    this.ans_2 = ans_2;
}

public String getAns_3() {
    return ans_3;
}

public void setAns_3(String ans_3) {
    this.ans_3 = ans_3;
}

public String getAns_4() {
    return ans_4;
}

public void setAns_4(String ans_4) {
    this.ans_4 = ans_4;
}

public String getAns_r() {
    return ans_r;
}

public void setAns_r(String ans_r) {
    this.ans_r = ans_r;
}

public int getStatus() {
    return status;
}

public void setStatus(int status) {
    this.status = status;
}

public int getUser_ans() {
    return user_ans;
}

public void setUser_ans(int user_ans) {
    this.user_ans = user_ans;
}

}

    public List<HashMap<String, Category>> allCat(Context context){

    SQLiteDatabase db = this.getReadableDatabase();
    List<HashMap<String, Category>> list = new ArrayList<HashMap<String, Category>>();
    String s = "select * from category";
    Cursor cursor = db.rawQuery(s, null);
    int count = 0;
    if (cursor.moveToFirst()){
        do {
            Resources resources = context.getResources();
            HashMap<String, Category> hm = new HashMap<String, Category>();
            hm.put("category", new Category(cursor.getInt(1), resources.getIdentifier(context.getPackageName() + ":drawable/" +
            cursor.getString(cursor.getColumnIndex("image")), null, null), cursor.getString(2)));
            list.add(hm);
            count ++;
        }
        while (cursor.moveToNext());
    }
    db.close();
    return list;
}

public List<Questions> allQuestions(int id){

    SQLiteDatabase db = this.getReadableDatabase();
    List<Questions> questionses = new ArrayList<Questions>();
    String st = "select * from matem where _id=" + id;
    Cursor cursor = db.rawQuery(st, null);
    if (cursor.moveToFirst()){
        do {
                    questions = new Questions(

                    cursor.getInt(0),
                    cursor.getString(1),
                    cursor.getString(2),
                    cursor.getString(3),
                    cursor.getString(4),
                    cursor.getString(5),
                    cursor.getString(6),
                    cursor.getString(7),
                    cursor.getInt(8),
                    cursor.getInt(9));

            questionses.add(questions);
        }while (cursor.moveToNext());
    }
    db.close();
    return questionses;
}


public class QuestionsLoaders extends AsyncTaskLoader>{

public int id;

// public int page;

public QuestionsLoaders(Context context, int id) {
    super(context);
    this.id=id;

// this.page=page; }

@Override
public List<Questions> loadInBackground() {
    return new DbHelper(getContext()).allQuestions(id);
}

}

public class QuestionsAdapter extends BaseAdapter implements View.OnClickListener, OnCheckedChangeListener {

Context context;
LayoutInflater inflater;
DbHelper dbHelper;
List<Questions> questionses;
public Questions questionsClass;
private Button btn_next;
private RadioGroup radioGroup;
private RadioButton rb;

public QuestionsAdapter() {

}

public QuestionsAdapter(Context context, List<Questions> questionsList) {
    if (questionsList != null) {
        this.questionses = questionsList;
        this.context = context;
        inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        dbHelper = new DbHelper(this.context);
    }

}

@Override
public int getCount() {
    return questionses.size();
}

@Override
public Object getItem(int position) {
    return questionses.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}


@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    final View view = inflater.inflate(R.layout.question_list, null);

    final Questions questions = questionses.get(position);

    final TextView question = (TextView) view.findViewById(R.id.textQuestion);
    question.setText(questions.getQuestion());

    final RadioButton radAns1 = (RadioButton) view.findViewById(R.id.radAns1);
    radAns1.setText(questions.getAns_1());

    final RadioButton radAns2 = (RadioButton) view.findViewById(R.id.radAns2);
    radAns2.setText(questions.getAns_2());

    final RadioButton radAns3 = (RadioButton) view.findViewById(R.id.radAns3);
    radAns3.setText(questions.getAns_3());

    final RadioButton radAns4 = (RadioButton) view.findViewById(R.id.radAns4);
    radAns4.setText(questions.getAns_4());

    final TextView textAns = (TextView) view.findViewById(R.id.textAns);
    textAns.setText("Right answer:" + questions.getAns_r());

    btn_next = (Button) view.findViewById(R.id.btn_next);
    btn_next.setOnClickListener(this);

    return view;
}

@Override
public void onClick(View view) {
    if (view==btn_next){
        RadioButton rb = (RadioButton) view.findViewById(radioGroup.getCheckedRadioButtonId());

    }

}

@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
    switch (i) {
        case R.id.radAns1:
            break;
        case R.id.radAns2:
            break;
        case R.id.radAns3:
            break;
        case R.id.radAns4:
            break;
    }
}

}

public class FirstCategory extends BaseActivity implements LoaderManager.LoaderCallbacks<List<Questions>>{

DbHelper dbHelper;
private ListView listView;
List<Questions> allQuestions = new ArrayList<Questions>();
int intent;

// private Button btn_next;

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

    dbHelper = new DbHelper(this);
    intent = getIntent().getExtras().getInt("listid");

    listView = (ListView)findViewById(R.id.listView);
    listView.setAdapter(new QuestionsAdapter(getApplicationContext(), allQuestions));

// btn_next = (Button)findViewById(R.id.btn_next);

    getSupportLoaderManager().restartLoader(0, null, this).forceLoad();

}


@Override
public Loader<List<Questions>> onCreateLoader(int id, Bundle args) {
    switch (id){
        case 1:
            return new QuestionsLoaders(this, intent);
    }
    return new QuestionsLoaders(this, intent);
}


@Override
public void onLoadFinished(Loader<List<Questions>> loader, List<Questions> data) {
    List s = (List) data;
    listView.setAdapter(new QuestionsAdapter(getApplicationContext(), s));
}

@Override
public void onLoaderReset(Loader<List<Questions>> loader) {
    refreshDate();
}

private void refreshDate() {
    getSupportLoaderManager().restartLoader(0, null, this).forceLoad();
}

}

And Android Studio isn't importing Button and RadioButton, when i try to import studio giving me AppCompatButton. I copy their imports from other project. import android.widget.RadioButton; import android.widget.Button; Is it an error or what is it? I try to write many codes but couldn't take a result, so i asking fron professionals, how can i call next question by clicking btn_next. Thanks.

Aucun commentaire:

Enregistrer un commentaire