想通过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);

}

}         找不到问题在哪,各们大侠帮俺找找

解决方案 »

  1.   

    你直接把数据库文件放在sd卡里会有读写权限问题的,即使你不写数据库也有这个问题,你可以看一下log里的错误信息,建议放在/data/data/你的程序包名/databases目录下,
      

  2.   

    我作了实验,可以从cursor中取到一条记录中的一个字段,问题是多条记录的多个字段怎样才能和ListActivity相绑定呢
      

  3.   

    cursor是一个数据集。你的adapter写的有问题,  cursor.movenext方法是取得下一条记录,一般在循环里用,你应该在setview方法里做一个循环
      

  4.   

      String sql = "select ID,BUSNUM,TIME,PRICE,FORWARDLINE from businfo where BUSNUM like ?";
            Cursor cursor = database.rawQuery(sql, new String[]{queryValue});
            建议改一下。你用like其实又没有用到like的特性。至少要把数据改成 Cursor cursor = database.rawQuery(sql, new String[]{“%”+queryValue+“%”});