2017-07-16 39 views
0

私はアプリ開発の初心者で、これまでのところ私のアプリは意図したとおりに動作します。たとえば、私はonCreate()メソッドで1の値を与えるインスタンス変数を一度持っています。アンドロイドスタジオから私のデバイスにアプリを起動すると、それはうまく動作し、変数の値は1です。しかし、アンドロイドスタジオを使用せずにデバイスから起動すると、変数の値は0になります。また、値が必要な変数についてNullPointerExceptionsを取得し、Android Studioから起動してもデバイスから起動したときは動作しないことに気付きました。ここで AndroidスタジオアプリはAndroidスタジオから起動しても動作しますが、起動時は起動しません

はMainActivity

public class MainActivity extends AppCompatActivity 
{ 
private ArrayList<String> arrayList; 
private ArrayList<ListItem> itemList; 
private ArrayAdapter<String> adapter; 
private EditText txtInput; 
private int payRoll; 
private String value; 
private Intent mainToPayroll; 
private int hours; 
private int earnings; 
private ArrayList<Integer> rollList; 
private ArrayList<Integer> hourList; 
private ArrayList<Integer> wageList; 

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

    rollList = new ArrayList<>(0); 
    hourList = new ArrayList<>(0); 
    wageList = new ArrayList<>(0); 
    payRoll = 1; 

    Bundle bun = getIntent().getExtras(); 
    if(bun != null) 
    { 
     rollList = bun.getIntegerArrayList("rolls"); 
     hourList = bun.getIntegerArrayList("hours"); 
     wageList = bun.getIntegerArrayList("wages"); 
     payRoll = bun.getInt("roll"); 
    } 

    ListView listView = (ListView) findViewById(R.id.listv); 
    String[] items = {}; 
    arrayList = new ArrayList<>(Arrays.asList(items)); 
    itemList = new ArrayList<>(0); 
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.txtitem, arrayList); 
    listView.setAdapter(adapter); 
    Button btAdd = (Button) findViewById(R.id.btadd); 
    mainToPayroll = new Intent(this, PayrollActivity.class); 

    if(rollList != null) 
    { 
     for (int i = 0; i < rollList.size(); i++) { 
      ListItem newItem = new ListItem(rollList.get(i), hourList.get(i), wageList.get(i)); 
      arrayList.add(newItem.toString()); 
      itemList.add(newItem); 
      adapter.notifyDataSetChanged(); 
     } 


     rollList.clear(); 
     hourList.clear(); 
     wageList.clear(); 
    } 

    btAdd.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      ListItem newItem = new ListItem(payRoll, 0, 0); 
      arrayList.add(newItem.toString()); 
      itemList.add(newItem); 
      adapter.notifyDataSetChanged(); 
      payRoll++; 
     } 
    }); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      value = (String)adapter.getItem(position); 
      ListItem item = itemList.get(position); 
      Bundle info = new Bundle(); 
      info.putString("val", value); 
      info.putInt("hours", item.getHours()); 
      info.putInt("wage", item.getWages()); 
      info.putInt("pos", position); 

      if(itemList.size() > 0) 
      { 
       for (ListItem items : itemList) 
       { 
        rollList.add(items.getPayroll()); 
        hourList.add(items.getHours()); 
        wageList.add(items.getWages()); 
       } 
      } 

      info.putIntegerArrayList("rolls", rollList); 
      info.putIntegerArrayList("hours", hourList); 
      info.putIntegerArrayList("wages", wageList); 
      info.putInt("roll", payRoll); 
      info.putBoolean("rest", restore); 


      mainToPayroll.putExtras(info); 

      startActivity(mainToPayroll); 
     } 
    }); 
} 

リストビューのアイテムはこれは私がリストビューに行くアイテム用に作成されたクラスである

public class PayrollActivity extends AppCompatActivity 
{ 
private static TextView text; 
private String payrollNumber; 
private int payrollHrs; 
private int payrollWages; 
private int position; 
private Intent payrollToMain; 
private Button returnButton; 

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

    final Bundle info = getIntent().getExtras(); 
    System.out.print(getIntent().getType()); 
    payrollNumber = info.getString("val"); 
    payrollHrs = info.getInt("hours"); 
    payrollWages = info.getInt("wage"); 
    position = info.getInt("pos"); 
    payrollToMain = new Intent(this, MainActivity.class); 
    returnButton = (Button) findViewById(R.id.btnRtrn); 

    returnButton.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Bundle thing = new Bundle(); 
      thing.putIntegerArrayList("rolls", info.getIntegerArrayList("rolls")); 
      thing.putIntegerArrayList("hours", info.getIntegerArrayList("hours")); 
      thing.putIntegerArrayList("wages", info.getIntegerArrayList("wages")); 
      thing.putInt("roll", info.getInt("roll")); 
      thing.putBoolean("rest", info.getBoolean("rest")); 
      payrollToMain.putExtras(thing); 
      startActivity(payrollToMain); 

     } 
    }); 

    text = (TextView) findViewById(R.id.title); 

    text.setText(payrollNumber); 
} 

public static void setLabelText(String val) 
{ 
    text.setText(val); 
} 

をクリックされるたびに、この活動が開始されている

public class ListItem 
{ 
private int payroll; 
private int hrs; 
private int wages; 

public ListItem(int roll, int hours, int wag) 
{ 
    payroll = roll; 
    hrs = hours; 
    wages = wag; 
} 

public int getPayroll() 
{ 
    return payroll; 
} 

public int getHours() 
{ 
    return hrs; 
} 

public int getWages() 
{ 
    return wages; 
} 

public void setPayroll(int roll) 
{ 
    payroll = roll; 
} 

public void setHrs(int hours) 
{ 
    hrs = hours; 
} 

public void setWages(int wage) 
{ 
    wages = wage; 
} 

public String toString() 
{ 
    return "Payroll " + payroll + "\n" + hrs + " hours\n$" + wages; 
} 
+0

インスタント実行を使用していますか? – ifiok

+0

私たちにいくつかのコードを教えてください、それがなければ私たちはあなたを助けません – Konrad

+0

はい、私はインスタント実行を使用しています。 –

答えて

0

私はあなたの問題はあなたのMainActivityのコードのこの作品だと思う:

Bundle bun = getIntent().getExtras(); 
if(bun != null) 
{ 
    rollList = bun.getIntegerArrayList("rolls"); 
    hourList = bun.getIntegerArrayList("hours"); 
    wageList = bun.getIntegerArrayList("wages"); 
    payRoll = bun.getInt("roll"); 
} 

getIntent().getExtras()がnull以外Bundleオブジェクトを返すかもしれませんが、バンドルがアクセスしようとしている鍵を持っていない可能性があり、その中にすべてのインスタンス変数がヌルに設定されるか、intの場合はゼロに設定されます。

この問題を回避するには、バンドル内に特定のキーが存在するかどうかをチェックし、変数があればそれを設定します。

bun.containsKey()

それとも、彼らがバンドルからそれらをロードした後にnullの場合、あなたはあなたの変数を初期化することができます。

+0

回答ありがとうございます、これは問題を解決したように見えます。アンドロイドスタジオから私のデバイスから起動したときに、アプリケーションは意図したとおりに動作するようになりました。これは本当に役に立ちました。 –

0

端末からアプリを完全にアンインストールしてから、もう一度お試しください。これは時々問題を解決します。

+0

私はそれを試みましたが、私はうまくいきませんでした。それがうまくいくまで、私はそれを試し続けます、または私は別の解決策を見つける。返信いただきありがとうございます。 –

関連する問題