Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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 数据库错误:";NullPointerException:尝试调用虚拟方法getApplicationInfo()。。。“在空对象引用上”;_Java_Android_Database_Sqlite_Listview - Fatal编程技术网

Java 数据库错误:";NullPointerException:尝试调用虚拟方法getApplicationInfo()。。。“在空对象引用上”;

Java 数据库错误:";NullPointerException:尝试调用虚拟方法getApplicationInfo()。。。“在空对象引用上”;,java,android,database,sqlite,listview,Java,Android,Database,Sqlite,Listview,我正在构建一个简单的多活动列表应用程序,用于使用SQLite进行练习。开始时,我正试图从数据库中获取字符串以显示在列表视图中。我发现了错误 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()” 这是密码 public class MainActivity extends AppCompatActi

我正在构建一个简单的多活动列表应用程序,用于使用SQLite进行练习。开始时,我正试图从数据库中获取字符串以显示在
列表视图中。我发现了错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”

这是密码

public class MainActivity extends AppCompatActivity {
    SharedPreferences sharedPreferences;
    ArrayList<String> listItem;
    ArrayAdapter adapter;
    ListView lv = (ListView) findViewById(R.id.list_view);
    DatabaseHelper db = new DatabaseHelper(this);
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        listItem = new ArrayList<>();
        viewData();
        context = this;

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, textInput.class));
            }
        });
    }

    // cast from sql database to the listview
    private void viewData() {
        Cursor res = db.viewData();

        if (res.getCount() == 0 ){
            Toast.makeText(this,"No Data!",Toast.LENGTH_SHORT).show();
        }
        else{
            while (res.moveToNext()){
                listItem.add(res.getString(1));
            }
            adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,listItem);
            lv.setAdapter(adapter);
        }
    }
}
这是textInput活动

public class textInput extends AppCompatActivity {
SharedPreferences sharedPreferences;
//    Editor editor;
//    Context _context;
//    int PRIVATE_MODE = 0;
//    private static final String PREF_NAME = "Items";
//    public static final String NAME_LIST = "name";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_input);
    //DatabaseHelper db;

    //return's to main activity on press
    Button addButton = (Button) findViewById(R.id.addButton);
    final EditText name = (EditText) findViewById(R.id.itemName);
    final EditText url = (EditText) findViewById(R.id.itemURL);
    final EditText price = (EditText) findViewById(R.id.itemPrice);
 //   final SharedPreferences sharedPreferences = 
getApplicationContext().getSharedPreferences("items", 0);
    final DatabaseHelper db = new DatabaseHelper(this);
    addButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Checks to make sure that all fields are filled out, if yes 
then returns to MainActivity
            if (name.length() != 0 && price.length() != 0 && url.length() 
 !=0){
                boolean isInserted = 
db.insertData(name.getText().toString(),
                        price.getText().toString(),
                        url.getText().toString());
                if(isInserted == true)
                    Toast.makeText(textInput.this, "New Item Added", 
 Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(textInput.this, "Failed to Add", 
Toast.LENGTH_SHORT).show();
                //The graphic and the return to MainActivity
                Intent returnToMain = new Intent(getApplicationContext(), 
MainActivity.class);
                startActivity(returnToMain);
            }
            else{
                Toast.makeText(textInput.this, "Please fill out all 
fields!", Toast.LENGTH_SHORT).show();
            }

        }
    });
调试(错误?)日志

E/AndroidRuntime:致命异常:主
进程:com.example.xmaswishlist,PID:25470
java.lang.RuntimeException:无法实例化活动组件信息{com.example.xmaswishlist/com.example.xmaswishlist.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2841)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6944)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:327)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
位于android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:163)
在android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:157)中
位于android.content.Context.ActainStyledAttributes(Context.java:655)
位于androidx.appcompat.app.appcompatedelegateimpl.createSubDecor(appcompatedelegateimpl.java:692)
在androidx.appcompat.app.appcompatedelegateimpl.ensureubdecor(appcompatedelegateimpl.java:659)
位于androidx.appcompat.app.appcompatedelegateimpl.findViewById(appcompatedelegateimpl.java:479)
在androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:214)上
位于com.example.xmaswishlist.MainActivity。(MainActivity.java:36)
位于java.lang.Class.newInstance(本机方法)
位于android.app.Instrumentation.newActivity(Instrumentation.java:1180)
位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6944)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:327)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
我已尝试使用以下方法解决此问题:


  • setContentView
    中设置内容之前,您试图获取视图,这会导致
    异常。在
    onCreate
    中实例化
    ListView
    DatabaseHelper

    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }
    

    setContentView
    中设置内容之前,您试图获取视图,这会导致
    异常。在
    onCreate
    中实例化
    ListView
    DatabaseHelper

    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }
    
    从堆栈跟踪中:

    位于com.example.xmaswishlist.MainActivity.(MainActivity.java:36)的androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:214)

    MainActivity
    类中,您需要移动此行上的作业
    ListView lv=(ListView)findViewById(R.id.list\u视图)进入
    onCreate
    。因此,定义变量的位置,但将
    =(ListView)
    移动到
    onCreate

    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }
    
    在实例化类时,在调用
    onCreate
    之前调用
    findViewById
    ,因此,内部工作正在中断,因为活动本身尚未初始化

    您还需要在堆栈跟踪的
    onCreate

    中初始化数据库帮助程序:

    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }
    
    位于com.example.xmaswishlist.MainActivity.(MainActivity.java:36)的androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:214)

    MainActivity
    类中,您需要移动此行上的作业
    ListView lv=(ListView)findViewById(R.id.list\u视图)进入
    onCreate
    。因此,定义变量的位置,但将
    =(ListView)
    移动到
    onCreate

    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }
    
    在实例化类时,在调用
    onCreate
    之前调用
    findViewById
    ,因此,内部工作正在中断,因为活动本身尚未初始化


    您还需要在
    onCreate

    中初始化数据库帮助程序,如果您还可以添加错误日志,那就太好了。这将是更容易和更快的引脚点的问题。好的,给我几分钟,我会把它了!如果您还可以添加错误日志,那就太好了。这将是更容易和更快的引脚点的问题。好的,给我几分钟,我会把它了!谢谢你的回复!我刚刚修复了这些错误,错误是ch
    ListView lv;
    DatabaseHelper db;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ...
    
        lv = (ListView) findViewById(R.id.list_view);
        db = new DatabaseHelper(this);
        ...
    }