【发布时间】:2017-06-26 13:59:51
【问题描述】:
在我开始单击一个特定按钮 rate-button 之前,我的应用程序运行良好。每次单击此按钮时,应用程序都会崩溃,并且我会在 log cat 中收到此消息:
22808/com.nileworx.guesstheplace E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nileworx.guesstheplace, PID: 22808
java.lang.ClassCastException: com.nileworx.guesstheplace.GameActivity cannot be cast to com.nileworx.guesstheplace.MainActivity
at com.nileworx.guesstheplace.CustomDialog$11.onClick(CustomDialog.java:283)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-25 06:46:03.423 1642-2032/system_process W/ActivityManager: Force finishing activity com.nileworx.guesstheplace/.GameActivity
我相信gameactivity有问题,只有一个错误:
@Override
protected void onResume() {
super.onResume();
if (!mSharedPreferences.getString("placesNum", "0").equals("0")) {
String updatesDlgMsg = String.format(getResources().getString(R.string.updatesDlg), mSharedPreferences.getString("placesNum", "0"));
dialog.showDialog(R.layout.blue_dialog, "updatesDlg", updatesDlgMsg, mSharedPreferences.getString("placesJSON", ""));
e.putString("placesNum", "0");
e.commit();
}
}
第 6 行代码,出现如下信息的问题:
格式字符串“updatesDlg”不是一个有效的格式字符串,所以它应该 不传递给 String.format less... (Ctrl+F1) 如果字符串包含 '%' 字符,则该字符串可能是一个格式化字符串,它将 从 Java 代码传递给 String.format 以替换每个 '%' 发生具有特定值。此 lint 警告检查两个 相关问题:(1)格式化字符串无效,含义 那个 String.format 会在运行时抛出异常 使用格式字符串。 (2) 包含 '%' 的字符串不是 格式化字符串被传递给 String.format 调用。在这个 如果需要将“%”转义为“%%”。注意:并非所有字符串 看起来像格式化字符串是供使用的 字符串.格式;例如,它们可能包含旨在用于 android.text.format.Time#format()。林特不能总是弄清楚 字符串是日期格式,因此您可能会收到错误警告 情景。有关如何执行的信息,请参阅抑制帮助主题 在这种情况下抑制错误
我不知道如何解决这个问题,我已经尝试了 2 个多小时来解决它。
我的评分按钮代码
private void rateDlg(final Dialog dialog, final String marketLink) {
Button rateBtn = (Button) dialog.findViewById(R.id.rateBtn);
// if button is clicked, close the custom dialog
rateBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sou.playSound(R.raw.buttons);
dialog.dismiss();
MainActivity mainAct = (MainActivity) context;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("playstorelink, changed for stackoverflow"));
if (!mainAct.MyStartActivity(intent)) {
// Market (Google play) app seems not
// installed, let's try
// to open a webbrowser
intent.setData(Uri.parse("playstorelink, changed for stackoverflow"));
if (!mainAct.MyStartActivity(intent)) {
// Well if this also fails, we have run
// out of options,
// inform the user.
Toast.makeText(context, "Could not open Android market, please install the market app.", Toast.LENGTH_SHORT).show();
} else {
editor.putInt("usingNum", 100);
editor.commit();
}
} else {
editor.putInt("usingNum", 100);
editor.commit();
}
}
});
Button laterBtn = (Button) dialog.findViewById(R.id.laterBtn);
// if button is clicked, close the custom dialog
laterBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sou.playSound(R.raw.buttons);
editor.putInt("usingNum", 0);
editor.commit();
dialog.dismiss();
}
});
}
【问题讨论】:
-
也许你应该发布
rateButton的代码。 -
这是我得到的消息,当我滚动到第二个代码的第 6 行代码时
-
请不要关闭问题,因此,具有有效答案的问题被认为对社区有益,因为这可能会帮助其他人。如果它解决了您的问题,请接受答案。谢谢!
-
不要关闭问题,如果它有助于解决您的问题,请接受我的回答,或者将其作为资源开放给其他人...