首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算工作时间和现金

计算工作时间和现金
EN

Stack Overflow用户
提问于 2015-09-01 16:47:18
回答 4查看 130关注 0票数 1

我想计算工作时间和挣来的现金(让我们说它每小时20英里-这就是为什么我在我的申请中乘以20 )。

我使用SharedPreferences,这样我就可以从应用程序中出来,它仍然记得当我按下“开始”按钮时,我也在使用Calendar.getInstance(),但是当我使用12小时格式时,我将不会有计算工作时间的问题(如果我在上午8点开始,晚上9点结束,那么工作时间将被减去start,9-8,这是一个小时,所以这将是错误的)。

一开始我使用了INTs,但是我一直工作到零小时,因为您不能在INTs中工作0.3小时,它会将它减少到零,我更改为Doubles,但令人惊讶的是SharedPreferences中没有getDoubleputDouble,所以我切换到Floats,但是现在我收到错误,应用程序崩溃。

这里是我的代码:

代码语言:javascript
运行
复制
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    prefs = getSharedPreferences("myPrefsKey", 0);
    textView = (TextView) findViewById(R.id.textView);
    buttonStart = (Button) findViewById(R.id.start);
    buttonStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "onClick: starting");
            c = Calendar.getInstance();
            begmin = c.get(Calendar.MINUTE);
            beghour = c.get(Calendar.HOUR_OF_DAY);
            SharedPreferences.Editor edit = prefs.edit();
            edit.putInt("key1", begmin);
            edit.putInt("key2", beghour);
        }
    });
    buttonStop = (Button) findViewById(R.id.stop);
    buttonStop.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "onClick: stopping");
            Calendar c = Calendar.getInstance();
            finmin = c.get(Calendar.MINUTE);
            finhour = c.get(Calendar.HOUR_OF_DAY);
            if (finhour >= beghour)
                workhour = finhour - beghour;
            else
                workhour = 12 - beghour + finhour;
            workmin = finmin - begmin;
            hourcashto = (float)(workhour * 20);
            mincashto = (float)(20 * (workmin / 60));
            cashto = hourcashto + mincashto;
            cash = prefs.getFloat("key", 0);
            cash = cash + cashto;
            SharedPreferences.Editor edit = prefs.edit();
            edit.putFloat("key", cash);
            edit.commit();
            textView.setText("cash now: " + cashto + " cash total including today: " + cash + " \n" + "Time today: " + workhour + ":" + workmin);
        }
    });
}

这里是Logcat输出:

代码语言:javascript
运行
复制
09-01 19:44:19.811  17344-17344/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: firstappdevelopment.work, PID: 17344
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Float
        at android.app.SharedPreferencesImpl.getFloat(SharedPreferencesImpl.java:253)
        at firstappdevelopment.work.MainActivity$2.onClick(MainActivity.java:57)
        at android.view.View.performClick(View.java:5254)
        at android.view.View$PerformClick.run(View.java:21179)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6837)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)

很抱歉,如果它是半个logcat,我使用搜索"MainActivity“,因为在中有自动滚动,我无法到达崩溃和复制。线MainActivity.java:57 refers to:

代码语言:javascript
运行
复制
cash = prefs.getFloat("key", 0);

据我所知,它说现金是一个int,但是看看我的构造函数(?):

代码语言:javascript
运行
复制
    private static final String TAG = "ServicesDemo";
private Button buttonStart, buttonStop;
private int begmin, beghour, finmin, finhour, workhour, workmin;
private float cash, cashto, hourcashto, mincashto;
private Calendar c;
private TextView textView;
private SharedPreferences prefs;

谢谢大家的帮助。

编辑,完整的Code+XML

代码语言:javascript
运行
复制
    package firstappdevelopment.work;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Calendar;

     public class MainActivity extends Activity {
    private static final String TAG = "ServicesDemo";
    private Button buttonStart, buttonStop;
    private int begmin, beghour, finmin, finhour, workhour, workmin;
    private float cash, cashto, hourcashto, mincashto;
    private Calendar c;
    private TextView textView;
    private SharedPreferences prefs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        prefs = getSharedPreferences("myPrefsKey", 0);
        textView = (TextView) findViewById(R.id.textView);
        buttonStart = (Button) findViewById(R.id.start);
        buttonStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.d(TAG, "onClick: starting");
                c = Calendar.getInstance();
                begmin = c.get(Calendar.MINUTE);
                beghour = c.get(Calendar.HOUR_OF_DAY);
                SharedPreferences.Editor edit = prefs.edit();
                edit.putInt("key1", begmin);
                edit.putInt("key2", beghour);
            }
        });
        buttonStop = (Button) findViewById(R.id.stop);
        buttonStop.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.d(TAG, "onClick: stopping");
                Calendar c = Calendar.getInstance();
                finmin = c.get(Calendar.MINUTE);
                finhour = c.get(Calendar.HOUR_OF_DAY);
                if (finhour >= beghour)
                    workhour = finhour - beghour;
                else
                    workhour = 12 - beghour + finhour;
                workmin = finmin - begmin;
                hourcashto = (float)(workhour * 20);
                mincashto = (float)(20 * (workmin / 60));
                cashto = hourcashto + mincashto;
                cash = prefs.getFloat("key", 0f);
                cash = cash + cashto;
                SharedPreferences.Editor edit = prefs.edit();
                edit.putFloat("key", cash);
                edit.commit();
                textView.setText("cash now: " + cashto + " cash total including today: " + cash + " \n" + "Time today: " + workhour + ":" + workmin);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

XML:

代码语言:javascript
运行
复制
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="START"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Total:"
        android:layout_alignTop="@+id/stop"
        android:layout_toRightOf="@+id/stop"
        android:layout_toEndOf="@+id/stop"
       />

    <Button
        android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="STOP"
        android:layout_alignTop="@+id/start"
        android:layout_toRightOf="@+id/start"
        android:layout_toEndOf="@+id/start" />

     </RelativeLayout>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-01 17:13:09

所以你知道问题就在这里

代码语言:javascript
运行
复制
cash = prefs.getFloat("key", 0)

我觉得你的代码很好!但是,正如您所说的,您最初是在"key"的共享首选项中存储一些整数值。你去掉那些值了吗?我建议您尝试将cash = prefs.getFloat("key", 0)更改为cash = prefs.getFloat("key_new", 0)。这可能是愚蠢的问题,你忽略了!

注意,如果cash = prefs.getFloat("key_new", 0)中存在0、0f或0.0f的问题,那么它将给出编译时错误。

票数 -1
EN

Stack Overflow用户

发布于 2015-09-01 16:51:27

因此,从接收到的ClassCastException错误中,如果0值不存在,则尝试从SharedPreferences传递一个默认值。

cash = prefs.getFloat("key", 0)更改为cash = prefs.getFloat("key", 0.0)

票数 1
EN

Stack Overflow用户

发布于 2015-09-01 17:02:16

由于您有此例外:

代码语言:javascript
运行
复制
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Float

你的问题是:

代码语言:javascript
运行
复制
cash = prefs.getFloat("key", 0);

必须:

代码语言:javascript
运行
复制
cash = prefs.getFloat("key", 0.0f);

或者您的变量cash被定义为int!你必须改为:

代码语言:javascript
运行
复制
float cash;

有关getFloat()方法的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32336952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档