如何解决使用加载管理器数据库中的 contentprovider 在微调器中显示刚刚插入的数据
我正在尝试在微调器上显示我刚刚插入到数据库中的值。我尝试使用此方法,但仍然遇到问题。你能帮助我吗?课程位置仍然为零。
public int getIndexOfCourse(int courseId){
mCursor = mAdapterCourses.getCursor();
int coursePosition=0;
for (int i =1;i<= mAdapterCourses.getCount();i++){
mCursor.movetoPosition(i);
int temp = mCursor.getInt(mCursor.getColumnIndex(Courses._ID));
if(temp == courseId) {
coursePosition = i;
break;
}
}
return coursePosition;
}
整个Activity如下(请注意,我是一个相对较新的Android开发者,稍微解释一下会有所帮助,谢谢)
package com.waliyyullah.lecturenotes;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import com.waliyyullah.lecturenotes.LectureNoteDatabaseContract.LectureCourseInfoEntry;
import com.waliyyullah.lecturenotes.LectureNotesProviderContract.Courses;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.Calendar;
import static com.waliyyullah.lecturenotes.LectureNotesProviderContract.Notes.*;
import static com.waliyyullah.lecturenotes.LectureNotesProviderContract.Notes.COLUMN_COURSE_ID;
import static com.waliyyullah.lecturenotes.LectureNotesProviderContract.Notes.CONTENT_URI;
public class ExTradetailsActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor>,View.OnClickListener {
private static final int LOADER_COURSES = 0;
private Spinner mSpinnerCourse;
private SimpleCursorAdapter mAdapterCourses;
private String mAddaCourse;
Uri mUri;
Uri mNoteUri;
private Button mAddaNewNoteButton;
private ProgressDialog mProgressDialog;
private ImageButton mNewCourseButton;
private Cursor mCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_extra_details);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initLayout();
addCourseSpinner();
}
private void insertCourse() {
@SuppressLint("StaticFieldLeak") AsyncTask<Uri,Integer,Long> task =new AsyncTask<Uri,Long>() {
@Override
protected void onPreExecute() {
mProgressDialog = new ProgressDialog(ExTradetailsActivity.this);
mProgressDialog.setMessage("Please Wait");
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected Long doInBackground(Uri... uris) {
ContentValues newValues = new ContentValues();
newValues.put(LectureCourseInfoEntry.COLUMN_YEAR,Calendar.getInstance().getTime().getYear());
newValues.put(LectureCourseInfoEntry.COLUMN_SEMESTER,"First");
newValues.put(LectureCourseInfoEntry.COLUMN_COURSE,mAddaCourse);
mUri = getContentResolver().insert(Courses.CONTENT_URI,newValues);
return ContentUris.parseId(mUri);
}
@Override
protected void onPostExecute(Long aLong) {
getSupportLoaderManager().restartLoader(LOADER_COURSES,null,ExTradetailsActivity.this);
mSpinnerCourse.setSelection(getIndexOfCourse(Integer.parseInt(Long.toString(aLong))));
mProgressDialog.dismiss();
}
};
task.execute();
}
private void addCourseSpinner() {
mAdapterCourses = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item,new String[]{LectureCourseInfoEntry.COLUMN_COURSE},new int[]{android.R.id.text1},0);
mAdapterCourses.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinnerCourse.setAdapter(mAdapterCourses);
getSupportLoaderManager().initLoader(LOADER_COURSES,this);
}
private int getIndexOfCourseId(int courseId) {
Cursor cursor = mAdapterCourses.getCursor();
int courseIdPos = cursor.getColumnIndex(Courses._ID);
int courseRowIndex = 0;
boolean more = cursor.movetoFirst();
while (more) {
int cursorCourseId = cursor.getInt(courseIdPos);
if (courseId == cursorCourseId)
break;
courseRowIndex++;
more = cursor.movetoNext();
}
return courseRowIndex;
}
public int getIndexOfCourse(int courseId){
mCursor = mAdapterCourses.getCursor();
int coursePosition=0;
for (int i =1;i<= mAdapterCourses.getCount();i++){
mCursor.movetoPosition(i);
int temp = mCursor.getInt(mCursor.getColumnIndex(Courses._ID));
if(temp == courseId) {
coursePosition = i;
break;
}
}
return coursePosition;
}
private void initLayout() {
mSpinnerCourse = findViewById(R.id.spinner_course);
mAddaNewNoteButton = findViewById(R.id.new_note_button);
mNewCourseButton = findViewById(R.id.new_course_button);
mNewCourseButton.setonClickListener(this);
mAddaNewNoteButton.setonClickListener(this);
}
@Override
public Loader<Cursor> onCreateLoader(int id,Bundle args) {
CursorLoader loader = null;
if (id == LOADER_COURSES) {
final String[] courseColumns = {
Courses._ID,Courses.COLUMN_COURSE
};
loader = new CursorLoader(this,Courses.CONTENT_URI,courseColumns,Courses._ID);
}
return loader;
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader,Cursor data) {
if (loader.getId() == LOADER_COURSES) {
mAdapterCourses.changeCursor(data);
mAdapterCourses.notifyDataSetChanged();
}
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
if (loader.getId() == LOADER_COURSES)
mAdapterCourses.changeCursor(null);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.new_note_button:
Intent intent = new Intent(ExTradetailsActivity.this,NoteActivity.class);
startActivity(intent);
break;
case R.id.new_course_button:
LayoutInflater inflater = LayoutInflater.from(ExTradetailsActivity.this);
final View customView = inflater.inflate(R.layout.fragment_add_a_course_dialog,null);
final EditText editTextCourse = customView.findViewById(R.id.editTextCourse);
AlertDialog dialog = new AlertDialog.Builder(ExTradetailsActivity.this)
.setTitle("ADD A NEW COURSE")
.setView(customView)
.setPositiveButton("SAVE",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface,int i) {
mAddaCourse = editTextCourse.getText().toString();
if(!mAddaCourse.isEmpty()) {
insertCourse();
} else {
Toast.makeText(ExTradetailsActivity.this,"Insert a new course",Toast.LENGTH_LONG).show();
}
}
}).create();
dialog.show();
break;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。