2015-10-13 99 views
0

好吧,所以我创建了一个活动“区域”,其中的按钮和文本视图的网格视图,因此您可以看到按钮上的区域名称。 当你点击按钮,它会带你到“表”活动,你实际上看到+表的数量(地区名称+表的数量),但当我点击区域应用程序崩溃,因为它赢得' t在表格活动中获取该区域的名称。从另一个活动获取名称

我知道这很混乱,我尽我最大努力与我的解释,我把这两个适配器,一个地区和第二个表格,以最短的方式,请告诉我我做错了什么。

地区的适配器:

public ArrayList<Area> areas; 

public static LayoutInflater inflater = null; 

public MyAreaAdapter(Context mContext, ArrayList<Area> areas) { 
    this.mContext = mContext; 
    this.areas = areas; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public MyAreaAdapter(Activity_Table activity_zone){ 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    TextView textView; 
    ImageView imageView; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.imagebutton_layout, null); 
    } 

     ImageView myImageView = (ImageView) convertView.findViewById(R.id.myImageView); 
     TextView areaName = (TextView) convertView.findViewById(R.id.areaName); 

    areaName.setText(areas.get(position).getName()); 

    return convertView; 
} 

,这是表的适配器:

ArrayList<Area> areas; 
ArrayList<Table> tables; 

public static LayoutInflater inflater = null; 

public MyTableAdapter(Context mContext, ArrayList<Table> tables) { 
    this.mContext = mContext; 
    this.tables = tables; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public MyTableAdapter(Activity_Table activity_table){ 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView textView; 
    ImageView imageView; 


    if (convertView == null){ 
     convertView = inflater.inflate(R.layout.imageview_table_layout, null); 
    } 

    ImageView tableImageView = (ImageView) convertView.findViewById(R.id.tableImageView); 
    TextView tableName = (TextView) convertView.findViewById(R.id.tableName); 

    tableName.setText(areas.get(position).getName() + " " + areas.get(position).getNumOFTables()); 

    return convertView; 
} 

错误日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference 

这是它崩溃行:

TableName.setText(areas.get(position).getName() + " " + areas.get(position).getNumOFTables()); 

这是调用我的表适配器类:

GridView gridView; 
ArrayList<Table> tables; 
ImageView imageView; 
MyTableAdapter adapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_activity__table); 

    Intent startIntent = getIntent(); 
    String numTables = startIntent.getStringExtra("numTables"); 

    gridView = (GridView) findViewById(R.id.gridView2); 

    OrdersDBAdapter.OrdersDBHelper ordersDBHelper = new OrdersDBAdapter.OrdersDBHelper(Activity_Table.this); 
    tables = new ArrayList<Table>(); 

    for (int i = 0; i < Integer.parseInt(numTables); i++) { 
     tables.add(new Table()); 
    }   
    adapter = new MyTableAdapter(Activity_Table.this, tables); 

    gridView.setAdapter(adapter); 

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      startActivity(new Intent(getApplicationContext(), MyOrderMainActivity.class)); 
     } 
    }); 
} 

编辑

我加了这段代码到我的适配器,意图:

public MyTableAdapter(Context mContext, ArrayList<Table> tables, String area_name, String numTables) { 
     this.mContext = mContext; 
     this.tables = tables; 
     this.area_name = area_name; 
     this.numTables = numTables; 

     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

我得到这个错误:

Error:(43, 19) error: no suitable constructor found for MyTableAdapter(Activity_Table,ArrayList) constructor MyTableAdapter.MyTableAdapter(Context,ArrayList,String,String) is not applicable (actual and formal argument lists differ in length) constructor MyTableAdapter.MyTableAdapter(Activity_Table) is not applicable (actual and formal argument lists differ in length)

+0

你的arrayList区域是初始化的吗?在哪里调用适配器类?你得到这个异常是因为你的数组列表是空的吗?张贴你已经初始化并调用适配器的类。 – Ritesh

+0

@Ritesh我发布了它,请检查出来 –

+0

好吧,我已经发布了一段代码,你在哪里存储一个空对象?你还可以在你正在初始化区域的地方发布代码吗? – Ritesh

回答

1

你的应用程序崩溃,因为你想没有实例它来检索areas ArrayList中的数据。因此,没有应用程序检索数据,因此错误。

确保您areas ArrayList中具有有效数据,例如通过在其构造你的areas名单的副本供你的适配器:

public MyTableAdapter(Context mContext, ArrayList<Table> tables, ArrayList<Area> areas) { 
    this.mContext = mContext; 
    this.tables = tables; 
    this.areas = areas; 

    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
+0

这已经完成,我没有发布它,但我已经在我的适配器中。 –

+0

你还有同样的错误吗?如果你改变了你的适配器,就像你说的那样,它应该可以工作,否则你会得到一个不同的错 –

+0

错误:(42,19)误差:实测MyTableAdapter(Activity_Table,ArrayList的

) 构造MyTableAdapter.MyTableAdapter没有合适的构造(上下文,ArrayList的
,ArrayList的)是不适用 (实际和正式的参数列表的长度不同) 构造函数MyTableAdapter.MyTableAdapter(Activity_Table)不适用 (实际和正式参数列表的长度不同) –

0

退房这部分代码。

for (int i = 0; i < Integer.parseInt(numTables); i++) { 
     //What are you adding here.. an empty table object? 
     tables.add(new Table()); 
    }   
    adapter = new MyTableAdapter(Activity_Table.this, tables); 
+0

这是计算表的数量的循环。我发布了更多的代码与我得到的错误。 –

0

既然您还没有发布完整的代码,我假设您使用了两种不同的活动。一个使用MyAreaAdapter,另一个使用MyTableAdapter,所以我们称它们为MyAreaActivityMyTableActivity。有了这个,我明白你并不需要MyTableActivity中的所有区域。我想你应该在用于启动MyTableActivityMyAreaActivity意图通过表的区域名称和编号:

Intent i = new Intent(this, MyTableActivity.class); 
i.putExtra("area_name", area.getName()); 
i.putExtra("area_tables", area.getNumOFTables()); 
startActivity(i); 

然后,在MyTableActivity

Intent intent = getIntent(); 
String area_name = intent.getExtras().getString("area_name"); 
int area_tables = intent.getExtras().getInt("area_tables"); 

并将其传递给MyTableAdapter

String area_name; 
int area_tables 

public MyTableAdapter(Context mContext, ArrayList<Table> tables, String area_name, int area_tables) { 
    this.mContext = mContext; 
    this.tables = tables; 
    this.area_name = area_name; 
this.area_tables = area_tables; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView textView; 
    ImageView imageView; 


    if (convertView == null){ 
     convertView = inflater.inflate(R.layout.imageview_table_layout, null); 
    } 

    ImageView tableImageView = (ImageView) convertView.findViewById(R.id.tableImageView); 
    TextView tableName = (TextView) convertView.findViewById(R.id.tableName); 

    tableName.setText(area_name + " " + area_tables); 

    return convertView; 
} 

如果您需要该区域的更多信息,可以使用Serializable来传递整个对象o r Parcelable

如果这不是你的问题,请给我们更多的细节并发布你的更新代码。否则,将很难帮助你。

+0

我得到这个错误:错误:(43,19)错误:发现MyTableAdapter(Activity_Table,ArrayList的

) 构造MyTableAdapter.MyTableAdapter(上下文,ArrayList的
,字符串,字符串)没有合适的构造是不适用 (实际和形式参数列表长度不同) 构造函数MyTableAdapter.MyTableAdapter(Activity_Table)不适用 (实际和正式参数列表的长度不同) –