1

メニュー ボタン --> History を押して History.java クラスを開始するたびに、このアプリケーションのエラーが発生し続けます。TipBookActivity.java クラスから History.java クラスに 2 つの配列を送信するための Bundle メソッドに関係していることは確かです。

以下は TipBookActivity コードです。

public class TipBookActivity extends Activity {
/** Called when the activity is first created. */

TextView textTip,textHour,textWage;
EditText editHour,editTip;
float wage;
int precision = 100;
String sTip,sHour;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    textTip = (TextView) findViewById(R.id.tvTip);
    textHour = (TextView) findViewById(R.id.tvHour);
    textWage = (TextView) findViewById(R.id.tvWage);
    editTip = (EditText) findViewById(R.id.etTip);
    editHour = (EditText) findViewById(R.id.etHour);
    Button bSubmit = (Button) findViewById(R.id.bSubmit);
    final Bundle bTip = new Bundle();
    final Bundle bHour = new Bundle();
    final ArrayList<String> tipList = new ArrayList<String>();    
    final ArrayList<String> hourList = new ArrayList<String>();
    bSubmit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            textHour.setText(editHour.getText().toString());
            textTip.setText(editTip.getText().toString());
            wage = Float.parseFloat(textTip.getText().toString()) / Float.parseFloat(textHour.getText().toString());
            String tip = String.format("$%.2f",wage);
            textWage.setText(String.valueOf(tip) + " an hour");     
            textHour.setText(editHour.getText() + " Hour(s)");
            textTip.setText("$" + editTip.getText());
            bTip.putStringArray(sTip,new String[] {editTip.getText().toString()});
            bHour.putStringArray(sHour,new String[] {editHour.getText().toString()});
            tipList.addAll(Arrays.asList(sTip));
            hourList.addAll(Arrays.asList(sHour));
            Intent i = new Intent(TipBookActivity.this,History.class);
            i.putExtras(bTip);
            i.putExtras(bHour);
        }       
    });
}

public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);
    MenuInflater mMain = getMenuInflater();
    mMain.inflate(R.menu.main_menu,menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
    case R.id.menuHistory:
         startActivity(new Intent("com.smarticle.tipbook.HISTORY"));            
         return true;
    case R.id.menuClear:
        //set up next tutorials
        Toast display = Toast.makeText(this, "Clear History feature coming soon.", Toast.LENGTH_SHORT);
        display.show();
        return true;
    }
    return false;
}
}

History クラスのコード:

public class History extends Activity{

private ListView mainListViewTip;
private ListView mainListViewHour;
private ArrayAdapter<String>listAdapterTip;
private ArrayAdapter<String>listAdapterHour;
String sTip,sHour;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.history_main);
    Bundle bTip = this.getIntent().getExtras();
    Bundle bHour = this.getIntent().getExtras();
    String[] array1 = bTip.getStringArray(sTip);
    String[] array2 = bHour.getStringArray(sHour);
    ListView mainListViewTip = (ListView) findViewById(R.id.mainListViewTip);
    ListView mainListViewHour = (ListView) findViewById(R.id.mainListViewHour);
    ArrayList<String> tipList = new ArrayList<String>();
    ArrayList<String> hourList = new ArrayList<String>();
    tipList.addAll(Arrays.asList(sTip));
    hourList.addAll(Arrays.asList(sHour));
    listAdapterTip = new ArrayAdapter<String>(this,R.layout.simplerow,tipList);
    listAdapterHour = new ArrayAdapter<String>(this,R.layout.simplerow,hourList);
    mainListViewTip.setAdapter(listAdapterTip);
    mainListViewHour.setAdapter(listAdapterHour);
}

}

エラーの原因を特定するための助けをいただければ幸いです。コードは機能しますが (理論的にはそう思います)、実際には機能しません。一般的な考え方は、2 つの数値を EditText フィールドに入力し、それらを文字列として保存し、TextView として表示し、ArrayList として設定してから、それらをバンドルして他のクラスに送信し、ListView に表示することです。

4

2 に答える 2

1

両方のアクティビティでsTip文字列sHour文字列を初期化していない。したがって 、両方のアクティビティの場合と同様に、sTip文字Shour文字列を任意の定数値で初期化します。

String sTip="sTip",sHour="sHour";

また、TipBookActivityから、startActivityにインテントを渡していないため、最初にIntent iをグローバルに宣言してから、アクティビティを次のように開始します。

   TextView textTip,textHour,textWage;
    EditText editHour,editTip;
    float wage;
    int precision = 100;
    String sTip,sHour;
    Intent i; // declare here

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
textTip = (TextView) findViewById(R.id.tvTip);
    textHour = (TextView) findViewById(R.id.tvHour);
    textWage = (TextView) findViewById(R.id.tvWage);
    editTip = (EditText) findViewById(R.id.etTip);
    editHour = (EditText) findViewById(R.id.etHour);
    Button bSubmit = (Button) findViewById(R.id.bSubmit);
    final Bundle bTip = new Bundle();
    final Bundle bHour = new Bundle();
    final ArrayList<String> tipList = new ArrayList<String>();    
    final ArrayList<String> hourList = new ArrayList<String>();
    bSubmit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            textHour.setText(editHour.getText().toString());
            textTip.setText(editTip.getText().toString());
            wage = Float.parseFloat(textTip.getText().toString()) / Float.parseFloat(textHour.getText().toString());
            String tip = String.format("$%.2f",wage);
            textWage.setText(String.valueOf(tip) + " an hour");     
            textHour.setText(editHour.getText() + " Hour(s)");
            textTip.setText("$" + editTip.getText());
            bTip.putStringArray(sTip,new String[] {editTip.getText().toString()});
            bHour.putStringArray(sHour,new String[] {editHour.getText().toString()});
            tipList.addAll(Arrays.asList(sTip));
            hourList.addAll(Arrays.asList(sHour));
            i = new Intent(TipBookActivity.this,History.class);
            i.putExtras(bTip);
            i.putExtras(bHour);
        }       
    });
}
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
        case R.id.menuHistory:
             startActivity(i));        // start Activity here by passing intent    
             return true;
于 2012-07-27T04:21:01.013 に答える
0

あなたが従っているアプローチは完全に間違っています。一度に 1 つの Bundle をインテントに入れることができ、2 つのバンドル、sTip、および sHours を入れています。

2 番目のバンドル sHours は最初のものをオーバーライドします。null ポインター例外の主な原因は、代わりにすべての値 (この場合は 2 つの文字列配列) を 1 つのバンドルに入れる必要があると思います。そのバンドルをインテントに入れます。

次のようにします。

public class TipBookActivity extends Activity {
/** Called when the activity is first created. */

TextView textTip,textHour,textWage;
EditText editHour,editTip;
float wage;
int precision = 100;
String sTip="sTip";
String sHour="sHour";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    textTip = (TextView) findViewById(R.id.tvTip);
    textHour = (TextView) findViewById(R.id.tvHour);
    textWage = (TextView) findViewById(R.id.tvWage);
    editTip = (EditText) findViewById(R.id.etTip);
    editHour = (EditText) findViewById(R.id.etHour);
    Button bSubmit = (Button) findViewById(R.id.bSubmit);
    final Bundle bundle= new Bundle();
     final ArrayList<String> tipList = new ArrayList<String>();    
    final ArrayList<String> hourList = new ArrayList<String>();
    bSubmit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            textHour.setText(editHour.getText().toString());
            textTip.setText(editTip.getText().toString());
            wage = Float.parseFloat(textTip.getText().toString()) / Float.parseFloat(textHour.getText().toString());
            String tip = String.format("$%.2f",wage);
            textWage.setText(String.valueOf(tip) + " an hour");     
            textHour.setText(editHour.getText() + " Hour(s)");
            textTip.setText("$" + editTip.getText());
            bundle.putStringArray(sTip,new String[] {editTip.getText().toString()});
            bundle.putStringArray(sHour,new String[] {editHour.getText().toString()});
            tipList.addAll(Arrays.asList(sTip));
            hourList.addAll(Arrays.asList(sHour));
            Intent i = new Intent(TipBookActivity.this,History.class);
            i.putExtras(bundle);

        }       
    });
}

public boolean onCreateOptionsMenu(Menu menu){
    super.onCreateOptionsMenu(menu);
    MenuInflater mMain = getMenuInflater();
    mMain.inflate(R.menu.main_menu,menu);
    return true;
}

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
    case R.id.menuHistory:
         startActivity(new Intent("com.smarticle.tipbook.HISTORY"));            
         return true;
    case R.id.menuClear:
        //set up next tutorials
        Toast display = Toast.makeText(this, "Clear History feature coming soon.", Toast.LENGTH_SHORT);
        display.show();
        return true;
    }
    return false;
}
}

履歴アクティビティでは:

public class History extends Activity{

private ListView mainListViewTip;
private ListView mainListViewHour;
private ArrayAdapter<String>listAdapterTip;
private ArrayAdapter<String>listAdapterHour;
String sTip="sTip";
String sHour="sHour";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.history_main);
        Bundle bundle= this.getIntent().getExtras();
        String[] array1 = bundle.getStringArray(sTip);
        String[] array2 = bundle.getStringArray(sHour);
        ListView mainListViewTip = (ListView) findViewById(R.id.mainListViewTip);
        ListView mainListViewHour = (ListView) findViewById(R.id.mainListViewHour);
        ArrayList<String> tipList = new ArrayList<String>();
        ArrayList<String> hourList = new ArrayList<String>();
        tipList.addAll(Arrays.asList(sTip));
        hourList.addAll(Arrays.asList(sHour));
        listAdapterTip = new ArrayAdapter<String>(this,R.layout.simplerow,tipList);
        listAdapterHour = new ArrayAdapter<String>(this,R.layout.simplerow,hourList);
        mainListViewTip.setAdapter(listAdapterTip);
        mainListViewHour.setAdapter(listAdapterHour);
    }

    }
于 2012-07-27T04:39:37.710 に答える