2017-07-16 198 views
0

我是新應用程序開發人員,迄今爲止我的應用程序按預期工作,但僅在Android Studio的設備上啓動時才適用。例如,我有一個實例變量,我在onCreate()方法中給出1的值。當我從android studio啓動應用程序到我的設備上時,它工作正常,變量的值爲1.但是,當我從我的設備啓動它而不使用android studio時,變量的值爲0.我有還發現我會在我知道應該有一個值的變量上得到一堆NullPointerExceptions,並且再次從Android Studio啓動時會起作用,但在從設備啓動時不起作用。Android Studio應用程序在我從Android Studio啓動時運行,但不是從設備啓動時運行

這裏是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

您是否使用Instant Run? – 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()可能會返回一個非空Bundle對象,但包可能沒有你要訪問的鑰匙,其中如果您的實例變量的值爲int,則會將其設置爲空或零。

您可以通過簡單地檢查包中是否存在某個特定的密鑰並僅在設置變量的情況下解決此問題。

bun.containsKey()

或者,如果他們是從包加載它們後空可以初始化變量。

+0

感謝您的迴應,這似乎已經解決了問題,並且現在應用程序既可以在通過android studio運行時也可以在我的設備上運行。這真的很有幫助。 –

0

嘗試從設備上完全卸載應用程序,然後重試。這有時解決了這個問題。

+0

我曾試過,但我沒有工作。我會繼續嘗試,直到它可以工作,或者我找到另一個解決方案。謝謝回覆。 –

相關問題