点击添加闪退

点击添加闪退

package com.hala.dataresoverdemo;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;

public class Main2Activity extends AppCompatActivity {

    ContentResolver resolver;
    private EditText name,age,id;
    private RadioGroup radioGroup;
    private String gender;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        name=(EditText)findViewById(R.id.name);
        age=(EditText)findViewById(R.id.age);
        id=(EditText)findViewById(R.id.id);
        radioGroup=(RadioGroup)findViewById(R.id.gender);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
                if(checkedId==R.id.male){
                    gender="男";
                }else{
                    gender="女";
                }
            }
        });
    }

    public void operate(View v){
        String mname=name.getText().toString();
        String mage=age.getText().toString();
        switch (v.getId()){
            case R.id.insert:
                //参数一:URI(统一资源定位符)
                //参数二:values
                ContentValues values=new ContentValues();
                values.put("name",mname);
                values.put("age",mage);
                values.put("gender",gender);
                //这里的uri就是ContentProvider中insert方法的返回值,可以从这里获得id
                Uri uri=resolver.insert(Uri.parse("content://com.hala.myprovide"),values);
                long id= ContentUris.parseId(uri);
                Toast.makeText(this, "添加成功,新学生的学号是:"+id, Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

reslover文件

package com.hala.dataproviderdemo;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

public class MyContentProvider extends ContentProvider {
    public MyContentProvider() {
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // Implement this to handle requests to delete one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO: Implement this to handle requests to insert a new row.
        Log.e("TAG","调用了dataprovider中的insert方法");
        long id=db.insert("info_db",null,values);
        //将id追加到uri后边,这个id就是数据库中那个主键_id
        return ContentUris.withAppendedId(uri, id);
    }


    SQLiteDatabase db;
    /**
     * 在ContentProvider(dataproviderdemo第一次启动)创建时调用
     * @return
     */
    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        SQLiteOpenHelper helper=new SQLiteOpenHelper(getContext(),"stu.db",null,1) {
            @Override
            public void onCreate(SQLiteDatabase db) {
                String sql="create table info_tb (_id integer primary key autoincrement, "+
                        "name varchar(20),"+
                        "age integer,"+
                        "gender varchar(2))";
                db.execSQL(sql);
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

            }
        };

        db=helper.getReadableDatabase();
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        // TODO: Implement this to handle requests to update one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

provider文件

http://img1.sycdn.imooc.com//climg/5aa947b10001846d13310488.jpg


报错

03-14 23:58:55.442 3833-3833/com.hala.dataresoverdemo E/AndroidRuntime: FATAL EXCEPTION: main

                                                                        Process: com.hala.dataresoverdemo, PID: 3833

                                                                        java.lang.IllegalStateException: Could not execute method for android:onClick

                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)

                                                                            at android.view.View.performClick(View.java:6256)

                                                                            at android.view.View$PerformClick.run(View.java:24701)

                                                                            at android.os.Handler.handleCallback(Handler.java:789)

                                                                            at android.os.Handler.dispatchMessage(Handler.java:98)

                                                                            at android.os.Looper.loop(Looper.java:164)

                                                                            at android.app.ActivityThread.main(ActivityThread.java:6541)

                                                                            at java.lang.reflect.Method.invoke(Native Method)

                                                                            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)

                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

                                                                         Caused by: java.lang.reflect.InvocationTargetException

                                                                            at java.lang.reflect.Method.invoke(Native Method)

                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)

                                                                            at android.view.View.performClick(View.java:6256) 

                                                                            at android.view.View$PerformClick.run(View.java:24701) 

                                                                            at android.os.Handler.handleCallback(Handler.java:789) 

                                                                            at android.os.Handler.dispatchMessage(Handler.java:98) 

                                                                            at android.os.Looper.loop(Looper.java:164) 

                                                                            at android.app.ActivityThread.main(ActivityThread.java:6541) 

                                                                            at java.lang.reflect.Method.invoke(Native Method) 

                                                                            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 

                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

                                                                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.ContentResolver.insert(android.net.Uri, android.content.ContentValues)' on a null object reference

                                                                            at com.hala.dataresoverdemo.Main2Activity.operate(Main2Activity.java:54)

                                                                            at java.lang.reflect.Method.invoke(Native Method) 

                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 

                                                                            at android.view.View.performClick(View.java:6256) 

                                                                            at android.view.View$PerformClick.run(View.java:24701) 

                                                                            at android.os.Handler.handleCallback(Handler.java:789) 

                                                                            at android.os.Handler.dispatchMessage(Handler.java:98) 

                                                                            at android.os.Looper.loop(Looper.java:164) 

                                                                            at android.app.ActivityThread.main(ActivityThread.java:6541) 

                                                                            at java.lang.reflect.Method.invoke(Native Method) 

                                                                            at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 

                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

空指针异常。 ContentResolver resolver;resolver为空吧。Main2Activity类中operate()那一块。祝:学习愉快

  • 慕UI6705487 提问者 #1
    非常感谢!
    2018-03-15 21:07:03
提问者 慕UI6705487 2018-03-15 17:09:33
Jeremy936399 2018-03-15 04:30:50

从程序报错的地方能看出来是空指针的问题,在Main2Activity54的位置,你可以看看contentvalue里面的值是不是空的,没有传进去

  • 提问者 慕UI6705487 #1
    没有传进去要怎么办呢,需要添加什么语句吗
    2018-03-15 13:30:25
  • 这种情况下看代码我不太好确定具体是哪里错了,你可以用Log看一下报错的地方的value值,把它打印出来看看是不是空的,如果是空的,你就往前找,看看是你的getvalue的方法错了还是哪里有问题
    2018-03-15 13:33:11
  • 提问者 慕UI6705487 回复 Jeremy936399 #3
    log可以打出来(见上边回复),values不是空的,但还是一样的报错
    2018-03-15 17:09:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师