簡體   English   中英

當我從Android Studio啟動它時,Android Studio應用程序可以運行,但從設備啟動時卻不能運行

[英]Android Studio app works when I launch it from Android Studio, but not when I launch from device

我是應用開發的新手,到目前為止,我的應用可以按預期運行,但僅當我從Android Studio在設備上啟動該應用時。 例如,我有一個實例變量,我在onCreate()方法中給了值1。 當我從android studio啟動應用程序到設備上時,它可以正常工作,並且變量的值為1。但是,當我從不使用android studio的設備中啟動應用程序時,變量的值為0。我有還發現我會在我知道應該有一個值的變量上得到很多NullPointerExceptions,並且再次從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;
}

嘗試從設備上完全卸載應用程序,然后重試。 有時可以解決問題。

我認為您的問題是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對象,但該bundle可能沒有您嘗試訪問的鍵,在這種情況下,您的所有實例變量都將被設置為int或null。

您可以通過簡單地檢查捆綁中是否存在特定鍵,然后僅設置變量來解決此問題。

bun.containsKey()

或者,從包中加載變量后,如果變量為null,則可以初始化變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM