引起:java.lang.NumberFormatException:无效双:“”
Posted
技术标签:
【中文标题】引起:java.lang.NumberFormatException:无效双:“”【英文标题】:Caused by: java.lang.NumberFormatException: Invalid double: "" 【发布时间】:2013-04-26 12:31:32 【问题描述】:我正在编写一个程序,我试图在其中打开 ProductInformationActivity.java 中的特定项目,我点击了 ListView 项目行, 但是每当我点击项目行时,我都会收到不幸的是应用程序已停止
错误:原因:java.lang.NumberFormatException: Invalid double: ""
CartAdapter.java:
public View getView(final int position, View convertView, ViewGroup parent)
// TODO Auto-generated method stub
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.listrow_cart, null);
vi.setClickable(true);
vi.setFocusable(true);
vi.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
HashMap<String, String> prod = Constants.mItem_Detail.get(position);
Intent mViewCartIntent = new Intent
(activity,com.era.restaurant.versionoct.menu.ProductInformationActivity.class);
mViewCartIntent.putExtra("product", prod);
activity.startActivity(mViewCartIntent);
);
Logcat 说:
04-27 04:25:01.520: E/androidRuntime(1214): java.lang.RuntimeException: Unable to start activity ComponentInfocom.era.restaurant.versionoct/com.era.restaurant.versionoct.menu.ProductInformationActivity: java.lang.NumberFormatException: Invalid double: ""
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread.access$600(ActivityThread.java:141)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.os.Handler.dispatchMessage(Handler.java:99)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.os.Looper.loop(Looper.java:137)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread.main(ActivityThread.java:5041)
04-27 04:25:01.520: E/AndroidRuntime(1214): at java.lang.reflect.Method.invokeNative(Native Method)
04-27 04:25:01.520: E/AndroidRuntime(1214): at java.lang.reflect.Method.invoke(Method.java:511)
04-27 04:25:01.520: E/AndroidRuntime(1214): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-27 04:25:01.520: E/AndroidRuntime(1214): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-27 04:25:01.520: E/AndroidRuntime(1214): at dalvik.system.NativeStart.main(Native Method)
04-27 04:25:01.520: E/AndroidRuntime(1214): Caused by: java.lang.NumberFormatException: Invalid double: ""
04-27 04:25:01.520: E/AndroidRuntime(1214): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
04-27 04:25:01.520: E/AndroidRuntime(1214): at java.lang.StringToReal.parseDouble(StringToReal.java:248)
04-27 04:25:01.520: E/AndroidRuntime(1214): at java.lang.Double.parseDouble(Double.java:295)
04-27 04:25:01.520: E/AndroidRuntime(1214): at com.era.restaurant.versionoct.menu.ProductInformationActivity.onCreate(ProductInformationActivity.java:77)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.Activity.performCreate(Activity.java:5104)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-27 04:25:01.520: E/AndroidRuntime(1214): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
04-27 04:25:01.520: E/AndroidRuntime(1214): ... 11 more
【问题讨论】:
您的代码有问题。为什么要创建一个空映射,然后重新分配变量? 【参考方案1】:好吧,例如,您需要将产品项目打包到 Intent
的捆绑包中,但这意味着您的产品类应该实现 Serializable
(使用 putSerializable()
)或 Parcelable
。但是你可以使用更简单的方法 - 在您的 ProductInformationActivity
中创建 Product
类型的 public static
字段,您需要做的就是在调用 ProductInformationActivity
之前对其进行实例化,仅此而已。喜欢
@Override
public void onClick(View v)
HashMap<String, String> product = new HashMap<String, String>();
ProductInformationActivity.product = Constant.wishproducts.get(position);
// startActivity(new Intent(getBaseContext(),ProductInformationActivity.class));
Intent mViewCartIntent = new Intent(activity,ProductInformationActivity.class);
activity.startActivity(mViewCartIntent);
【讨论】:
这通常是个坏主意。会工作,但一点都不好。 HashMap 已经是可序列化的,因此在意图中传递它没有问题。 但您只需要哈希图中的一项。为什么要通过整个地图? HashMap 可能是可序列化的,但它的包含可能不是那么您对 HashMap 序列化有何期望?你会得到序列化异常。【参考方案2】:CartActivity
//...
private void initView()
//...
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id)
final HashMap<String, String> prod = Constant.wishproducts.get(pos);
final Intent viewCartIntent = new Intent(CartActivity.this, ProductInformationActivity.class);
viewCarIntent.putExtra("product", prod);
startActivity(viewCartIntent);
);
适配器
@Override
public View getView(final int position, View convertView, ViewGroup parent)
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.listrow_cart, null);
//assign text, images, etc
return vi;
【讨论】:
我相信你的代码很好,最好,但列表视图项目行点击没有响应,请帮助@DoctororDrive以上是关于引起:java.lang.NumberFormatException:无效双:“”的主要内容,如果未能解决你的问题,请参考以下文章
csharp 可能会引起问题的类的继承问题,父类后来增加的方法可能会引起子类的函数重载错误