gpt4 book ai didi

android - Android应用程式当机,没有logcat错误

转载 作者:行者123 更新时间:2023-12-03 16:24:29 26 4
gpt4 key购买 nike

我正在为将于明天到期的移动应用程序开发最终项目开发一个android应用程序,但遇到了问题。直到昨天,我的应用程序都可以在手机上正常运行,但是从那以后我就搞砸了。该程序可以完美运行,并且可以在模拟器上完成我需要的所有操作,即使自昨天以来我已经添加了所有内容,因此我认为该应用程序已完全完成并可以展示。但是,我今天在手机上运行它,发现启动以下 Activity 时该应用程序崩溃了...

public class OrderDetails extends AppCompatActivity {

private List<PhoneBook> contactList;
private ListView listView;
private TextView name, number, address, orderTotal, amountReceived, tip, mileage, grandTotal;
private Button add;
private PhonebookAdapter adapter;
PhoneBookHandler db;

double dAmountReceived;
double dTotalCost;
double dSubtract;
double dMileage;
double dGrandTotal;
double dTip;
double dAdd;
double dMilesDriven;
double dMultiply;
double dRatePerMile;
String sAmountReceived;
String sTotalCost;
String sTip;
String sMileage;
String sGrandTotal;
String sAddress;
String ratePerDelivery;
String ratePerMile;
String milesDriven;
EditText eAmountReceived;
EditText eTotalCost;
EditText eTip;
EditText eMileage;
EditText eAddress;
EditText eGrandTotal;
EditText eMilesDriven;

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

listView = (ListView) findViewById(R.id.contactlist);

db = new PhoneBookHandler(this);

contactList = db.getAllContacts();

adapter = new PhonebookAdapter(this, contactList);

eAddress = (EditText) findViewById(R.id.address);

eTotalCost = (EditText) findViewById(R.id.orderTotal);
eAmountReceived = (EditText) findViewById(R.id.amountReceived);
eTip = (EditText) findViewById(R.id.tip);
eMileage = (EditText) findViewById(R.id.mileage);
eGrandTotal = (EditText) findViewById(R.id.grandTotal);
eMilesDriven = (EditText) findViewById(R.id.milesDriven);

// use shared preferences to inflate mileage edittext with data entered in settings menu
ratePerDelivery = PreferenceManager.getDefaultSharedPreferences(this).getString("ratePerDeliveryPref", null);
ratePerMile = PreferenceManager.getDefaultSharedPreferences(this).getString("ratePerMilePref", null);

eAmountReceived.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after){}

@Override
public void onTextChanged(CharSequence s, int start,
int before, int count){}

@Override
public void afterTextChanged(Editable s)
{
if (getCurrentFocus() == eAmountReceived)
{
sAmountReceived = eAmountReceived.getText().toString();
sTotalCost = eTotalCost.getText().toString();
sMileage = eMileage.getText().toString();
sTip = eTip.getText().toString();

try
{
dAmountReceived = Double.parseDouble(sAmountReceived);
dTotalCost = Double.parseDouble(sTotalCost);

dSubtract = dAmountReceived - dTotalCost;
dMileage = Double.parseDouble(sMileage);
dGrandTotal = dSubtract + dMileage;
} catch(NumberFormatException e){}

sTip = String.valueOf(dSubtract);

DecimalFormat df = new DecimalFormat("0.00");
sTip = df.format(dSubtract);

eTip.setText(sTip);

sGrandTotal = String.valueOf(dGrandTotal);
sGrandTotal = df.format(dGrandTotal);
eGrandTotal.setText(sGrandTotal);
}
}
});


eTip.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after){}

@Override
public void onTextChanged(CharSequence s, int start,
int before, int count){}

@Override
public void afterTextChanged(Editable s) {
if (getCurrentFocus() == eTip)
{
sAmountReceived = eAmountReceived.getText().toString();
sTotalCost = eTotalCost.getText().toString();
sMileage = eMileage.getText().toString();
sTip = eTip.getText().toString();

try {
dTip = Double.parseDouble(sTip);
dTotalCost = Double.parseDouble(sTotalCost);

dAdd = dTotalCost + dTip;
dMileage = Double.parseDouble(sMileage);
dGrandTotal = dTip + dMileage;
} catch (NumberFormatException e) {
}

sAmountReceived = String.valueOf(dAdd);

DecimalFormat df = new DecimalFormat("0.00");
sAmountReceived = df.format(dAdd);

eAmountReceived.setText(sAmountReceived);

sGrandTotal = String.valueOf(dGrandTotal);
sGrandTotal = df.format(dGrandTotal);
eGrandTotal.setText(sGrandTotal);
}
}
});


if (ratePerMile.equals("") && !ratePerDelivery.equals(""))
{
eMileage.setText(ratePerDelivery);
}

else
{
eMilesDriven.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after){}

@Override
public void onTextChanged(CharSequence s, int start,
int before, int count){}

@Override
public void afterTextChanged(Editable s)
{
if (getCurrentFocus() == eMilesDriven)
{
sAmountReceived = eAmountReceived.getText().toString();
sTotalCost = eTotalCost.getText().toString();
sMileage = eMileage.getText().toString();
sTip = eTip.getText().toString();

try
{
milesDriven = eMilesDriven.getText().toString();
dMilesDriven = Double.parseDouble(milesDriven);
dRatePerMile = Double.parseDouble(ratePerMile);
dMultiply = dRatePerMile * dMilesDriven;
dGrandTotal = dSubtract + dMultiply;
} catch(NumberFormatException e){}

sMileage = String.valueOf(dMultiply);

DecimalFormat df = new DecimalFormat("0.00");
sMileage = df.format(dMultiply);

eMileage.setText(sMileage);

sGrandTotal = String.valueOf(dGrandTotal);
sGrandTotal = df.format(dGrandTotal);
eGrandTotal.setText(sGrandTotal);
}
}
});
}
}

public void onClick(View view)
{

name = (EditText) findViewById(R.id.name);
number = (EditText) findViewById(R.id.number);
address = (EditText) findViewById(R.id.address);
orderTotal = (EditText) findViewById(R.id.orderTotal);
amountReceived = (EditText) findViewById(R.id.amountReceived);
tip = (EditText) findViewById(R.id.tip);
mileage = (EditText) findViewById(R.id.mileage);
grandTotal = (EditText) findViewById(R.id.grandTotal);

String cName = name.getText().toString();
String num = number.getText().toString();
String cAddress = address.getText().toString();
String cOrderTotal = orderTotal.getText().toString();
String cAmountReceived = amountReceived.getText().toString();
String cTip = tip.getText().toString();
String cMileage = mileage.getText().toString();
String cGrandTotal = grandTotal.getText().toString();


int id = db.addContact(new PhoneBook(cName, num, cAddress, cOrderTotal,
cAmountReceived, cTip, cMileage, cGrandTotal));
contactList.add(new PhoneBook(id, cName, num, cAddress, cOrderTotal,
cAmountReceived, cTip, cMileage, cGrandTotal));
adapter.notifyDataSetChanged();

Toast.makeText(getApplicationContext(), "Entry Successfully Created.", Toast.LENGTH_LONG).show();
}


public void buttonClickFunction(View v)
{
Intent intent = new Intent(getApplicationContext(), display_database.class);
startActivity(intent);
}

public void sendMessage(View v)
{
eAddress = (EditText) findViewById(R.id.address);
sAddress = eAddress.getText().toString();

String map = "http://maps.google.com/maps?q=" + sAddress;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(map));
startActivity(intent);
}
}

自昨天以来,我唯一添加的是在“eMilesDriven”变量上设置的TextWatcher,它将进行计算。我唯一能想到的是,我今天更改了启动器图标,但应用程序中的其他所有功能均正常运行,因此我不确定是否是那样。我只是不明白为什么它会在我的模拟器上完美运行并在手机上崩溃。我已经多次重启Android Studio,并从手机上删除了该应用程序,然后尝试再次启动它,但是每次,它都不会给我带来logcat错误。我将不胜感激。如果明天不能解决该问题,可能只需要在模拟器上展示我的应用即可,但是我真的很想知道为什么它崩溃了。

编辑: logcat错误如下:
FATAL EXCEPTION: main
Process: com.example.boley.databaseexample, PID: 15335
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.boley.databaseexample/com.example.boley.personaldeliveryassistant.OrderDetails}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.boley.personaldeliveryassistant.OrderDetails.onCreate(OrderDetails.java:173)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:158) 
at android.app.ActivityThread.main(ActivityThread.java:7224) 
at java.lang.reflect.Method.invoke(Native Method)

最佳答案

getCurrentFocus()

Return the view in this Window that currently has focus, or null if there are none. Note that this does not look in any containing Window.



删除getCurrentFocus(),因为它将返回null。

我看到的是,您在 afterTextChanged(Editable s)中这样做,它已经指向当前的edittext。

其他可能的空指针在这里
if (ratePerMile.equals("") && !ratePerDelivery.equals(""))

改成
if (ratePerMile == null && ratePerDelivery != null)

关于android - Android应用程式当机,没有logcat错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com