Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NullPointerException:println需要一条消息android数据库错误_Java_Android_Error Handling - Fatal编程技术网

java.lang.NullPointerException:println需要一条消息android数据库错误

java.lang.NullPointerException:println需要一条消息android数据库错误,java,android,error-handling,Java,Android,Error Handling,我已经建立了一个数据库,它给了我这个错误 这是logcat 02-19 15:33:38.057 1273-1273/tubapps.dbtutorial E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{tubapps.dbtutorial/tubapps.dbtutorial.EditIncome}: java.la

我已经建立了一个数据库,它给了我这个错误

这是logcat

02-19 15:33:38.057    1273-1273/tubapps.dbtutorial E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{tubapps.dbtutorial/tubapps.dbtutorial.EditIncome}: java.lang.NullPointerException: println needs a message
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException: println needs a message
            at android.util.Log.println_native(Native Method)
            at android.util.Log.d(Log.java:138)
            at tubapps.dbtutorial.EditIncome.onCreate(EditIncome.java:66)
            at android.app.Activity.performCreate(Activity.java:5008)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
            at android.app.ActivityThread.access$600(ActivityThread.java:130)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
这是我的活动

public class EditIncome extends ActionBarActivity {

    DBHelper helper = new DBHelper(this);
    private Calendar calendar;
    private TextView dateView;
    private int year, month, day;

    TextView payer;
    TextView amount;
    Spinner payments;
    Spinner category;

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

        dateView = (TextView) findViewById(R.id.input_date);
        calendar = Calendar.getInstance();
        year = calendar.get(Calendar.YEAR);
        month = calendar.get(Calendar.MONTH);
        day = calendar.get(Calendar.DAY_OF_MONTH);
        showDate(year, month + 1, day);

        payer = (TextView) findViewById(R.id.input_payer);
        amount = (TextView) findViewById(R.id.input_amount);
        dateView = (TextView) findViewById(R.id.input_date);

        payments = (Spinner) findViewById(R.id.incomeNumber);
        ArrayAdapter<CharSequence> payments_adapter = ArrayAdapter.createFromResource(this,
                R.array.recurring_income, android.R.layout.simple_spinner_item);
        payments_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        payments.setAdapter(payments_adapter);

        category = (Spinner) findViewById(R.id.categoryIncome);
        ArrayAdapter<CharSequence> income_adapter = ArrayAdapter.createFromResource(this,
                R.array.category_income, android.R.layout.simple_spinner_item);
        income_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        category.setAdapter(income_adapter);

        Intent objIntent = getIntent();
        String incomeId = objIntent.getStringExtra("incomeId");
        Log.d("Reading: ", "Reading all incomes..");
        HashMap<String, String> incomeList = helper.getIncomeInfo(incomeId);
        Log.d("incomeAmount",incomeList.get("incomeAmount"));
        Log.d("incomePayer",incomeList.get("incomePayer"));
        Log.d("incomeDate",incomeList.get("incomeDate"));
        Log.d("incomeCategory",incomeList.get("incomeCategory"));
        Log.d("incomePayments",incomeList.get("incomePayments"));
        if(incomeList.size()!=0) {
            amount.setText(incomeList.get("incomeAmount"));
            payer.setText(incomeList.get("incomePayer"));
            dateView.setText(incomeList.get("incomeDate"));
            payments.setSelection(getIndex(payments, "incomePayments"));
            category.setSelection(getIndex(category, "incomeCategory"));
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_edit_income, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void setDate(View view) {
        showDialog(999);
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        if (id == 999) {
            return new DatePickerDialog(this, myDateListener, year, month, day);
        }
        return null;
    }

    private DatePickerDialog.OnDateSetListener myDateListener
            = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
            // arg1 = year
            // arg2 = month
            // arg3 = day
            showDate(arg1, arg2 + 1, arg3);
        }
    };

    private void showDate(int year, int month, int day) {
        dateView.setText(new StringBuilder().append(day).append("/")
                .append(month).append("/").append(year));
    }

    public void editIncome(View view) {
        HashMap<String, String> queryValues = new HashMap<String, String>();
        payer = (TextView) findViewById(R.id.input_payer);
        amount = (TextView) findViewById(R.id.input_amount);
        dateView = (TextView) findViewById(R.id.input_date);

        payments = (Spinner) findViewById(R.id.incomeNumber);
        ArrayAdapter<CharSequence> payments_adapter = ArrayAdapter.createFromResource(this,
                R.array.recurring_income, android.R.layout.simple_spinner_item);
        payments_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        payments.setAdapter(payments_adapter);

        category = (Spinner) findViewById(R.id.categoryIncome);
        ArrayAdapter<CharSequence> income_adapter = ArrayAdapter.createFromResource(this,
                R.array.category_income, android.R.layout.simple_spinner_item);
        income_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        category.setAdapter(income_adapter);
        Intent objIntent = getIntent();
        String incomeId = objIntent.getStringExtra("incomeId");
        queryValues.put("incomeId", incomeId);
        queryValues.put("incomeAmount", amount.getText().toString());
        queryValues.put("incomePayer", payer.getText().toString());
        queryValues.put("incomeDate", dateView.getText().toString());
        queryValues.put("incomeCategory", category.getSelectedItem().toString());
        queryValues.put("incomePayments", payments.getSelectedItem().toString());

        helper.updateIncome(queryValues);
        this.callHomeActivity(view);
    }

    public void removeIncome(View view) {
        Intent objIntent = getIntent();
        String incomeId = objIntent.getStringExtra("incomeId");
        helper.deleteIncome(incomeId);
        this.callHomeActivity(view);

    }
    public void callHomeActivity(View view) {
        Intent objIntent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(objIntent);
    }

    private int getIndex(Spinner spinner, String myString) {

        int index = 0;

        for (int i = 0; i < spinner.getCount(); i++) {
            if (spinner.getItemAtPosition(i).equals(myString)) {
                index = i;
            }
        }
        return index;
    }
}
public class EditIncome扩展了ActionBarActivity{
DBHelper=newdbhelper(this);
私人日历;
私有文本视图日期视图;
私人整数年、月、日;
文本视图付款人;
文本浏览量;
微调器支付;
微调器类别;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u edit\u income);
dateView=(TextView)findViewById(R.id.input\u date);
calendar=calendar.getInstance();
year=calendar.get(calendar.year);
month=calendar.get(calendar.month);
day=calendar.get(calendar.day/u月);
显示日期(年、月+1、日);
付款人=(TextView)findViewById(R.id.input\u付款人);
金额=(TextView)findViewById(R.id.input\U金额);
dateView=(TextView)findViewById(R.id.input\u date);
付款=(微调器)findViewById(R.id.incomeNumber);
ArrayAdapter\u adapter=ArrayAdapter.createFromResource(此,
R.array.recurrence\u income,android.R.layout.simple\u spinner\u item);
payments_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_项目);
payments.setAdapter(payments\u adapter);
类别=(微调器)findViewById(R.id.categoryIncome);
ArrayAdapter\u adapter=ArrayAdapter.createFromResource(此,
R.array.category\u income,android.R.layout.simple\u spinner\u item);
income_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉项);
类别.设置适配器(收入适配器);
Intent objIntent=getIntent();
字符串incomeId=objIntent.getStringExtra(“incomeId”);
日志d(“阅读:”,“阅读所有收入…”);
HashMap incomeList=helper.getIncomeInfo(incomeId);
Log.d(“incomeAmount”,incomeList.get(“incomeAmount”);
Log.d(“收入付款人”,收入列表.get(“收入付款人”);
Log.d(“incomeDate”,incomeList.get(“incomeDate”);
Log.d(“incomeCategory”,incomeList.get(“incomeCategory”);
Log.d(“incomePayments”,incomeList.get(“incomePayments”);
如果(incomeList.size()!=0){
amount.setText(incomeList.get(“incomeAmount”));
payer.setText(incomeList.get(“incomePayer”);
dateView.setText(incomeList.get(“incomeDate”);
支付。设置选择(getIndex(支付,“收入支付”);
类别选择(getIndex(类别,“incomeCategory”);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu\u edit\u income,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共作废设置日期(查看){
showDialog(999);
}
@凌驾
受保护的对话框onCreateDialog(int id){
//TODO自动生成的方法存根
如果(id==999){
返回新的DatePickerDialog(this,myDateListener,year,month,day);
}
返回null;
}
私有DatePickerDialog.OnDateSetListener myDateListener
=新建DatePickerDialog.OnDateSetListener(){
@凌驾
公共void onDateSet(日期选择器arg0、int arg1、int arg2、int arg3){
//TODO自动生成的方法存根
//arg1=年
//arg2=月份
//arg3=天
显示日期(arg1、arg2+1、arg3);
}
};
私有无效显示日期(整数年、整数月、整数日){
dateView.setText(新的StringBuilder().append(天).append(“/”)
.append(月)。append(“/”)。append(年));
}
公共收入(视图){
HashMap queryValues=新HashMap();
付款人=(TextView)findViewById(R.id.input\u付款人);
金额=(TextView)findViewById(R.id.input\U金额);
dateView=(TextView)findViewById(R.id.input\u date);
付款=(微调器)findViewById(R.id.incomeNumber);
ArrayAdapter\u adapter=ArrayAdapter.createFromResource(此,
R.array.recurrence\u income,android.R.layout.simple\u spinner\u item);
payments_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_项目);
payments.setAdapter(payments\u adapter);
类别=(微调器)findViewById(R.id.categoryIncome);
ArrayAdapter\u adapter=ArrayAdapter.createFromResource(此,
R.array.category\u income,android.R.layout.simple\u spinner\u item);
income_adapter.setDropDownViewResource(android.R.layout.simple_微调器_下拉项);
类别.设置适配器(收入适配器);
Intent objIntent=getIntent();
字符串incomeId=objIntent.getStringExtra(“incomeId”);
查询值。put(“incomeId”,incomeId);
queryValues.put(“incomeAmount”,amount.getText().toString());
queryValues.put(“incomePayer”,payer.getText().toString());
queryValues.put(“incomeDate”,dateView.getText().toString());
queryValues.put(“incomeCategory”,category.getSelectedItem().toString());
queryValues.put(“incomePayments”,payments.getSelectedItem().toString());
helper.updateIncome(查询值);
此.callHomeActivity(视图);
}
公共空间