В настоящее время я сталкиваюсь с проблемой при создании представлений списков на основе данных моей базы данных. Я попытался создать класс сущности для хранения переменной 2 (ID & DESCR), извлеченной из базы данных, и сохранил ее в списке массивов. Затем я создал другой список String, чтобы сохранить переменную (DESCR), которую я хочу отобразить, и поместить в список.Создание представлений списков из данных, полученных из базы данных
PS: Я вставил журнал для проверки в populateList(), чтобы проверить, выполнял ли я метод populateList() или нет, и он не появился в моем журнале cat.
Вот мой код:
package com.example.businesscalculatorassignment;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.InputType;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
public class HistoryActivity extends Activity implements OnItemClickListener {
private TextView tvHis;
private TableRow row1;
private SQLiteAdapter mySQLiteAdapter;
private ListView lv;
DatabaseHelper myDbHelper = new DatabaseHelper(this);
private SQLiteDatabase sqLiteDatabase;
private ListAdapter HTListAdapter;
private ArrayList<HistoryTrans> HTArrayList = new ArrayList<HistoryTrans>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// db testing
lv = new ListView(this);
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDbHelper.openDataBase();
} catch (SQLException sqle) {
throw sqle;
}
lv.setOnItemClickListener(this);
HTListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, populateList());
lv.setAdapter(HTListAdapter);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.HORIZONTAL);
ll.addView(lv);
setContentView(ll);
}
@SuppressWarnings("deprecation")
public List<String> populateList() {
mySQLiteAdapter.openToRead();
String test = "testing";
Log.d("test", test);
List<String> descList = new ArrayList<String>();
String ID = new String();
String DESCR = new String();
Log.d("ID", ID);
Log.d("DESCR", DESCR);
String[] columns = new String[] { ID, DESCR };
Cursor cursor = sqLiteDatabase.query(SQLiteAdapter.MYDATABASE_TABLE,
columns, null, null, null, null, null);
while (cursor.moveToNext()) {
ID = cursor.getString(cursor.getColumnIndex(ID));
DESCR = cursor.getString(cursor.getColumnIndex(DESCR));
HistoryTrans HT = new HistoryTrans();
HT.setID(ID);
HT.setDESCR(DESCR);
HTArrayList.add(HT);
descList.add(DESCR);
Log.d("ID", ID);
Log.d("DESCR", DESCR);
}
mySQLiteAdapter.close();
return descList;
}
@Override
protected void onResume() {
super.onResume();
HTListAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, populateList());
lv.setAdapter(HTListAdapter);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(getApplicationContext(), "Clicked on :" + arg2, Toast.LENGTH_SHORT).show();
// We want to redirect to another Activity when the user click an item on the ListView
Intent HistoryResultIntent = new Intent(this, HIstoryResult.class);
// We have to identify what object, does the user clicked, because we are going to pass only clicked object details to the next activity
// What we are going to do is, get the ID of the clicked item and get the values from the ArrayList which has
//same array id.
HistoryTrans clickedObject = HTArrayList.get(arg2);
// We have to bundle the data, which we want to pass to the other activity from this activity
String IDbuffer = new String();
IDbuffer = clickedObject.getID();
// Attach the bundled data to the intent
HistoryResultIntent.putExtra("ID",IDbuffer);
// Start the Activity
startActivity(HistoryResultIntent);
}
}
Вот мой класс сущности только в случае необходимого отчета кошка
package com.example.businesscalculatorassignment;
import java.io.Serializable;
import java.util.ArrayList;
public class HistoryTrans implements Serializable{
private String ID;
private String DESCR;
private ArrayList<String> IDList = new ArrayList<String>();
private ArrayList<String> DescrList = new ArrayList<String>();
public HistoryTrans(String iD, String dESCR) {
super();
ID = iD;
DESCR = dESCR;
}
public HistoryTrans() {
}
public String getDESCR() {
return DESCR;
}
public void setDESCR(String dESCR) {
DESCR = dESCR;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
}
Вход
04-02 21:56:08.400: E/AndroidRuntime(5125): in writeCrashedAppName, pkgName :com.example.businesscalculatorassignment
04-02 21:56:08.400: D/AndroidRuntime(5125): file written successfully with content: com.example.businesscalculatorassignment StringBuffer : ;com.example.businesscalculatorassignment
04-02 21:56:08.400: E/AndroidRuntime(5125): FATAL EXCEPTION: main
04-02 21:56:08.400: E/AndroidRuntime(5125): Process: com.example.businesscalculatorassignment, PID: 5125
04-02 21:56:08.400: E/AndroidRuntime(5125): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.businesscalculatorassignment/com.example.businesscalculatorassignment.HistoryActivity}: java.lang.NullPointerException
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.os.Handler.dispatchMessage(Handler.java:102)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.os.Looper.loop(Looper.java:136)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread.main(ActivityThread.java:5021)
04-02 21:56:08.400: E/AndroidRuntime(5125): at java.lang.reflect.Method.invokeNative(Native Method)
04-02 21:56:08.400: E/AndroidRuntime(5125): at java.lang.reflect.Method.invoke(Method.java:515)
04-02 21:56:08.400: E/AndroidRuntime(5125): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
04-02 21:56:08.400: E/AndroidRuntime(5125): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
04-02 21:56:08.400: E/AndroidRuntime(5125): at dalvik.system.NativeStart.main(Native Method)
04-02 21:56:08.400: E/AndroidRuntime(5125): Caused by: java.lang.NullPointerException
04-02 21:56:08.400: E/AndroidRuntime(5125): at com.example.businesscalculatorassignment.HistoryActivity.populateList(HistoryActivity.java:71)
04-02 21:56:08.400: E/AndroidRuntime(5125): at com.example.businesscalculatorassignment.HistoryActivity.onCreate(HistoryActivity.java:59)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.Activity.performCreate(Activity.java:5231)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
04-02 21:56:08.400: E/AndroidRuntime(5125): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-02 21:56:08.400: E/AndroidRuntime(5125): ... 11 more
Спасибо заранее помогает при условии!
Вы печатали 'IDbuffer = clickedObject.getID();'? Здесь вы получили идентификатор? –
@NewDeveloper Я просто попытался просмотреть его через журнал, и он не показывал его. Я сомневаюсь, что это покажет что-то слишком, потому что интерфейс даже не сгенерирован, когда я пытаюсь запустить эту страницу, так что это невозможно, что я делаю щелчок и запускаю прослушиватель onitemclick. – JamesYTL
Я думаю, что вы не создали объект для 'mySQLiteAdapter'. Может быть, это будет проблемой. Из вашего журнала ошибка происходит в строке 72. Пожалуйста, проверьте это. –