Java ListView赢得';t从SQLite填充
我遵循本教程: 试图从SQLite数据库中填充自定义的Java ListView赢得';t从SQLite填充,java,android,xml,sqlite,listview,Java,Android,Xml,Sqlite,Listview,我遵循本教程: 试图从SQLite数据库中填充自定义的ListView,但它不会填充。我运行应用程序时没有错误。它只是无法填充。我已经看了很多次视频了——两次,三次检查代码都没有用。我还确保数据确实被插入到了数据库中——确实如此。我已经用SQLite浏览器检查过了 我试图使用display\u character\u row.xml在MainActivity.java中填充一个ListView,该视图由自定义边框char\u list\u border\u style.xml修改 我希望一些更有
ListView
,但它不会填充。我运行应用程序时没有错误。它只是无法填充。我已经看了很多次视频了——两次,三次检查代码都没有用。我还确保数据确实被插入到了数据库中——确实如此。我已经用SQLite浏览器检查过了
我试图使用display\u character\u row.xml
在MainActivity.java
中填充一个ListView
,该视图由自定义边框char\u list\u border\u style.xml
修改
我希望一些更有经验的人能看看我,帮我摆脱困境
谢谢你抽出时间
以下是所有内容:
BackgroundTask.java
public class BackgroundTask extends AsyncTask <String,CharacterDisplay,String> {
Context ctx;
CharacterAdapter characterAdapter;
Activity activity;
ListView listView;
BackgroundTask(Context ctx) {
this.ctx = ctx;
activity = (Activity) ctx;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
String method = params[0];
DatabaseOperations databaseOperations = new DatabaseOperations(ctx);
if (method.equals("add_info")) {
String name = params[1];
SQLiteDatabase db = databaseOperations.getWritableDatabase();
databaseOperations.putInfo(db, name);
return "One row inserted";
} else if (method.equals("get_info")) {
listView = (ListView) activity.findViewById(R.id.char_list);
SQLiteDatabase db = databaseOperations.getReadableDatabase();
Cursor cursor = databaseOperations.getInfo(db);
characterAdapter = new CharacterAdapter(ctx, R.layout.display_character_row);
String sName;
while (cursor.moveToNext()) {
sName = cursor.getString(cursor.getColumnIndex(TableData.TableInfo.NAME));
CharacterDisplay characterDisplay = new CharacterDisplay(sName);
publishProgress(characterDisplay);
}
return "get_info";
}
return null;
}
@Override
protected void onProgressUpdate(CharacterDisplay... values) {
characterAdapter.add(values[0]);
}
@Override
protected void onPostExecute(String result) {
if (result.equals("get_info")) {
listView.setAdapter(characterAdapter);
} else {
Toast.makeText(ctx,result, Toast.LENGTH_LONG).show();
}
}
}
CharacterAdapter.java
public class CharacterAdapter extends ArrayAdapter {
List list = new ArrayList();
static class CharacterHolder {
TextView tx_name;
}
public CharacterAdapter(Context context, int resource) {
super(context, resource);
}
public void add(Character object) {
list.add(object);
super.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
CharacterHolder characterHolder;
if (row == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.display_character_row, parent, false);
characterHolder = new CharacterHolder();
characterHolder.tx_name = (TextView) row.findViewById(R.id.char_name);
row.setTag(characterHolder);
} else {
characterHolder = (CharacterHolder) row.getTag();
}
CharacterDisplay characterDisplay = (CharacterDisplay) getItem(position);
characterHolder.tx_name.setText(characterDisplay.getdName().toString());
return row;
}
}
CharacterDisplay.java
public class CharacterDisplay {
private String dName;
public CharacterDisplay(String dName) {
this.setdName(dName);
}
public String getdName() {
return dName;
}
public void setdName(String dName) {
this.dName = dName;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity
implements CreateNewChar_Fragment.OnFragmentInteractionListener {
public void onFragmentInteraction(Uri uri){
}
public void showCreateNewChar_Fragment() {
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
CreateNewChar_Fragment createNewChar_fragment = new CreateNewChar_Fragment();
createNewChar_fragment.show(ft, "createnewchar_fragment");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.execute("get_info");
}
@Override
protected void onResume() {
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.execute("get_info");
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
startActivity(new Intent(this, Settings.class));
return true;
} else if (id == R.id.tabs) {
}
if (id == R.id.createcharacter) {
showCreateNewChar_Fragment();
return true;
}
if (id == R.id.rulebook) {
startActivity(new Intent(this, Rulebook.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/char_list" />
</RelativeLayout>
显示字符行.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="75dp" >
<TextView
android:layout_width="fill_parent"
android:layout_height="75dp"
android:id="@+id/char_name"
android:text=""
android:textStyle="bold"
android:gravity="center"
android:textAppearance="?android:textAppearanceLarge"
android:background="@drawable/char_list_border_style"
android:layout_margin="5dp" />
</RelativeLayout>
char\u list\u border\u style.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="3dp"
android:color="#000000" />
<corners
android:radius="10dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
您是否检查了字符适配器
。它是否包含值?不确定这是否与您的问题有关,但不应在每个数据库中创建新的DatabaseOperations实例doInBackground@RandyFreak我试图将它移到外部,但它导致应用程序崩溃,出现AsyncTask错误#1。@PhanVănlin我正在查看代码,但我不确定你在说什么,我应该找。你愿意详细说明一下吗?
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="3dp"
android:color="#000000" />
<corners
android:radius="10dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>