想通过ListActivity显示从数据库中查询出的公交车的车次、时间、票价和路线,查询的关键字已经从主窗口传递过来,数据表已经保存在res下的raw文件夹下了,但始终不对,终止退出,小弟还看不明白Logcat里的错误信息,大家帮帮我看看错在哪了?
BusNumInfo.java
package net.blogjava.mobile;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;import net.blogjava.mobile.db.DBService;import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;public class BusNumInfo extends ListActivity
{
private TextView tvBusNumber,tvBusTime,tvTicketPrice,tvBusLine;
private ImageView ivBusNumItem;
private String queryValue;
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath();
private final String DATABASE_FILENAME = "businfo.db";
private SQLiteDatabase database;
private BusDataAdapter busdataAdapter;
private String databaseFilename;
private SQLiteDatabase openDatabase()
{
try
{
databaseFilename = DATABASE_PATH+"/"+DATABASE_FILENAME;
if(!(new File(databaseFilename).exists()))
{
InputStream is = getResources().openRawResource(R.raw.businfo);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while((count=is.read(buffer))>0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
}
catch(Exception e)
{
}
return null;
}
public class BusDataAdapter extends CursorAdapter
{
private LayoutInflater layoutInflater;
public BusDataAdapter(Context context, Cursor c, boolean autoRequery)
{
super(context, c, autoRequery);
layoutInflater = (LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private void setView(View view,Cursor cursor)
{
ivBusNumItem = (ImageView)findViewById(R.id.ivBusNumItem);
tvBusNumber = (TextView)findViewById(R.id.tvBusNumber);
tvBusTime = (TextView)findViewById(R.id.tvBusTime);
tvTicketPrice = (TextView)findViewById(R.id.tvTicketPrice);
tvBusLine = (TextView)findViewById(R.id.tvBusLine);
ivBusNumItem.setImageResource(R.drawable.van);
tvBusNumber.setText(cursor.getString(cursor.getColumnIndex("BUSNUM")));
tvBusTime.setText(cursor.getString(cursor.getColumnIndex("TIME")));
tvTicketPrice.setText(cursor.getString(cursor.getColumnIndex("PRICE")));
tvBusLine.setText(cursor.getString(cursor.getColumnIndex("FORWARDLINE")));
}
@Override
public void bindView(View view, Context context, Cursor cursor)
{
setView(view,cursor);
} @Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
View view = layoutInflater.inflate(R.layout.busnumresult, null);
setView(view,cursor);
return view;
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
queryValue = bundle.getString("busnumber");
database = openDatabase();
String sql = "select ID,BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?";
Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
busdataAdapter = new BusDataAdapter(this,cursor,true);
setListAdapter(busdataAdapter);
}
} 找不到问题在哪,各们大侠帮俺找找
BusNumInfo.java
package net.blogjava.mobile;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;import net.blogjava.mobile.db.DBService;import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.TextView;public class BusNumInfo extends ListActivity
{
private TextView tvBusNumber,tvBusTime,tvTicketPrice,tvBusLine;
private ImageView ivBusNumItem;
private String queryValue;
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath();
private final String DATABASE_FILENAME = "businfo.db";
private SQLiteDatabase database;
private BusDataAdapter busdataAdapter;
private String databaseFilename;
private SQLiteDatabase openDatabase()
{
try
{
databaseFilename = DATABASE_PATH+"/"+DATABASE_FILENAME;
if(!(new File(databaseFilename).exists()))
{
InputStream is = getResources().openRawResource(R.raw.businfo);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while((count=is.read(buffer))>0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
}
catch(Exception e)
{
}
return null;
}
public class BusDataAdapter extends CursorAdapter
{
private LayoutInflater layoutInflater;
public BusDataAdapter(Context context, Cursor c, boolean autoRequery)
{
super(context, c, autoRequery);
layoutInflater = (LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private void setView(View view,Cursor cursor)
{
ivBusNumItem = (ImageView)findViewById(R.id.ivBusNumItem);
tvBusNumber = (TextView)findViewById(R.id.tvBusNumber);
tvBusTime = (TextView)findViewById(R.id.tvBusTime);
tvTicketPrice = (TextView)findViewById(R.id.tvTicketPrice);
tvBusLine = (TextView)findViewById(R.id.tvBusLine);
ivBusNumItem.setImageResource(R.drawable.van);
tvBusNumber.setText(cursor.getString(cursor.getColumnIndex("BUSNUM")));
tvBusTime.setText(cursor.getString(cursor.getColumnIndex("TIME")));
tvTicketPrice.setText(cursor.getString(cursor.getColumnIndex("PRICE")));
tvBusLine.setText(cursor.getString(cursor.getColumnIndex("FORWARDLINE")));
}
@Override
public void bindView(View view, Context context, Cursor cursor)
{
setView(view,cursor);
} @Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
View view = layoutInflater.inflate(R.layout.busnumresult, null);
setView(view,cursor);
return view;
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
queryValue = bundle.getString("busnumber");
database = openDatabase();
String sql = "select ID,BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?";
Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
busdataAdapter = new BusDataAdapter(this,cursor,true);
setListAdapter(busdataAdapter);
}
} 找不到问题在哪,各们大侠帮俺找找
Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
建议改一下。你用like其实又没有用到like的特性。至少要把数据改成 Cursor cursor = database.rawQuery(sql, new String[]{“%”+queryValue+“%”});