Android 在onCreate外部创建arrayadapter时出错

Android 在onCreate外部创建arrayadapter时出错,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我有一个用于填充listview的ArrayAdapter,但我无法在oncreate事件之外创建它,但当时我没有数据 public class CusPickup extends Activity { private OrdersReady orderready_data[]; private ListView lView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance

我有一个用于填充listview的ArrayAdapter,但我无法在oncreate事件之外创建它,但当时我没有数据

public class CusPickup extends Activity {

private OrdersReady orderready_data[];
private ListView lView; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.orders);
这里我将得到一个空点异常

    OrderReadyAdapter adapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderready_data);
    lView = (ListView)findViewById(R.id.listView1);
    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
    lView.addHeaderView(header);
    lView.setAdapter(adapter);

getData();
}
}
这里我从HTTP get获取数据

private final Handler handler = new Handler() {

        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            String bundleResult = msg.getData().getString("RESPONSE");
                int TotalRecords = myResult.d.results.size();
                for (int i = x; i < TotalRecords; i++ ) {
                    orderready_data[i] = new OrdersReady(myResult.d.results.get(i).myStr, myDate ,invResult.d.results.get(i).numberStr, invResult.d.results.get(i).qtyInt, myAmount)
                }  
           }
}
private final Handler=new Handler(){
@凌驾
公共无效handleMessage(最终消息消息消息){
progressDialog.disclose();
String bundleResult=msg.getData().getString(“响应”);
int TotalRecords=myResult.d.results.size();
对于(int i=x;i
如果我将OrderReadyAdapter放在她身上,我会得到一个代码错误,并将“change OrderReadyAdapter(Context,Int,OrdersReady[])修改为OrderReadyAdapter(Handle,Int,OrdersReady[]),如果我修改它,我会得到更多错误

另外,我不确定我对私有OrdersReady orderready_data[]的声明是否正确,因为如果我用代码声明它,我会这样声明:OrdersReady orderready_data[]=new OrdersReady[TotalRecords]

谢谢你的帮助


新适配器

public class OrderReadyAdapter extends ArrayAdapter<OrdersReady>{

Context context; 
int layoutResourceId;    
ArrayList<OrdersReady> data = null;

public OrderReadyAdapter(Context context, int layoutResourceId, ArrayList<OrdersReady> orderReadyArray) {
    super(context, layoutResourceId, orderReadyArray);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = orderReadyArray;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    OrderHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new OrderHolder();
        holder.mytxt1 = (TextView)row.findViewById(R.id.mytxt1);
        holder.mytxt2 = (TextView)row.findViewById(R.id.mytxt2);
        holder.mytxt3 = (TextView)row.findViewById(R.id.mytxt3);
        holder.mytxt4 = (TextView)row.findViewById(R.id.mytxt4);
        holder.mytxt5 = (TextView)row.findViewById(R.id.mytxt5);

        row.setTag(holder);
    }
    else
    {
        holder = (OrderHolder)row.getTag();
    }

    OrdersReady orderready = data.get(position);
    holder.mytxt1.setText(orderready.place);
    holder.mytxt2.setText(orderready.Date);
    holder.mytxt3.setText(orderready.invoice);
    holder.mytxt4.setText(String.valueOf(orderready.Qty));
    holder.mytxt5.setText(String.valueOf(orderready.Amount));

    return row;
}

static class OrderHolder
{
    TextView mytxt1;
    TextView mytxt2;
    TextView mytxt3;
    TextView mytxt4;
    TextView mytxt5;
}
公共类OrderReadyAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
ArrayList数据=null;
public OrderReadyAdapter(上下文上下文、int layoutResourceId、ArrayList orderReadyArray){
超级(上下文、布局资源ID、orderReadyArray);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
this.data=orderReadyArray;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
OrderHolder=null;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新订单持有者();
holder.mytxt1=(TextView)row.findViewById(R.id.mytxt1);
holder.mytxt2=(TextView)row.findViewById(R.id.mytxt2);
holder.mytxt3=(TextView)row.findViewById(R.id.mytxt3);
holder.mytxt4=(TextView)row.findViewById(R.id.mytxt4);
holder.mytxt5=(TextView)row.findViewById(R.id.mytxt5);
row.setTag(支架);
}
其他的
{
holder=(OrderHolder)行。getTag();
}
OrdersReady orderready=data.get(位置);
holder.mytxt1.setText(orderready.place);
holder.mytxt2.setText(orderready.Date);
holder.mytxt3.setText(orderready.invoice);
holder.mytxt4.setText(String.valueOf(orderready.Qty));
holder.mytxt5.setText(String.valueOf(orderready.Amount));
返回行;
}
静态类订单持有者
{
TextView mytxt1;
文本视图mytxt2;
TextView mytxt3;
TextView mytxt4;
TextView mytxt5;
}

}

我建议您将OrdersReady[]更改为ArrayList。在onCreate方法中初始化它。同时将orderReady适配器设置为类字段

orderReadyArray = new ArrayList<OrderReady>();
ordersReadyAdapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderReadyArray);
lView = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
lView.addHeaderView(header);
lView.setAdapter(ordersReadyAdapter);
orderReadyArray=newArrayList();
ordersReadyAdapter=new OrderReadyAdapter(此,R.layout.listview\u item\u行,orderReadyArray);
lView=(ListView)findViewById(R.id.listView1);
视图标题=(视图)GetLayoutFlater()。充气(R.layout.listview\u header\u行,空);
lView.addHeaderView(标题);
lView.setAdapter(ordersReadyAdapter);
这应该初始化一个空的listview,因为您还没有数据

从服务器接收OrdersReady数据时,更新orderReadyArray,如下所示:

orderReadyArray.clear(); // remove old data
for (int i = x; i < TotalRecords; i++ ) {
   orderReadyArray.add(data); // add new data one by one
}
ordersReadyAdapter.notifyDataSetChanged(); // this forces the listview to repaint
orderReadyArray.clear();//删除旧数据
对于(int i=x;i
或者:

您可以创建新适配器,并在收到数据后将其分配给listview:

List<OrderReady> orderReadyArray = new ArrayList<OrderReady>(); // create a new array to hold data
for (int i = x; i < TotalRecords; i++ ) {
   orderReadyArray.add(data); // add new data one by one
}
OrderReadyAdapter ordersReadyAdapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderReadyArray);
lView.setAdapter(ordersReadyAdapter);
List orderReadyArray=new ArrayList();//创建一个新数组来保存数据
对于(int i=x;i

这将更新您的列表。如果您仍然没有看到项目,则问题出在适配器中,可能是您在getView()方法中错误地膨胀了行。

感谢您的帮助,我从下一行更改了上述问题,现在适配器有问题。我一定是更改了适配器,因为我无法添加(数据)作为(string,string,string,int,double),现在需要(int,OrderReady)将行更改为:OrdersReady OrderReady=data[position];改为OrdersReady OrderReady=data.get(position);谢谢,我让它运行了,但列表视图中没有显示任何内容。当我运行调试器时,我看到orderReadyArray.add(data)这是我如何添加数据的:orderReadyArray.add(newordersready(mydataStr,mydataStr,mydataStr,mydataInt,mydataFloat));在这之后我有一行:ordersReadyAdapter.notifyDataSetChanged();我在适配器中添加了断点,我看到我转到了适配器的声明,但它从未转到适配器的充气器部分:@Override public View getView(int position,View convertView,ViewGroup parent)充气在这里。