Java Can';t从第二个类访问数据库帮助程序

Java Can';t从第二个类访问数据库帮助程序,java,android,database,Java,Android,Database,我在我的应用程序中创建了CurrentChanceDatabse类。它扩展了SQLiteOpenHelper。我制定了一些评估表格和数据的方法。 当我使用以下代码访问CurrentChanceDatabase类时,它在MainActivity(应用程序启动时启动的默认活动)中运行良好。所有的方法都很有效 public class MainActivity extends AppCompatActivity { CurrentChanceDatabase db; //this line //mo

我在我的应用程序中创建了CurrentChanceDatabse类。它扩展了SQLiteOpenHelper。我制定了一些评估表格和数据的方法。 当我使用以下代码访问CurrentChanceDatabase类时,它在MainActivity(应用程序启动时启动的默认活动)中运行良好。所有的方法都很有效

public class MainActivity extends AppCompatActivity {
CurrentChanceDatabase db;  //this line
//more declarations
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = new CurrentChanceDatabase(this);  //and this line
//more onCreate functions
}
现在,我想从第二个活动访问同一个数据库。我使用相同的两行代码连接到我的数据库类,但当第二个活动启动时,应用程序崩溃。我在最后解释了我的目标

代码和logcat:

MainActivity.java

package com.example.snehit.probablity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
CurrentChanceDatabase db;
EditText nameOfExperiment;
EditText noOfOutcomes;
Button ContinueBt;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    db = new CurrentChanceDatabase(this);
    ContinueBt = (Button) findViewById(R.id.continueButtton);
    registerExperimentFunction();
    db.deleteAllData();  //see the very end of this question to know about this
    force(); //continues to the seconnd class without entring any experiment. will be used for debugging once the app works.

}

public void force(){
    Button bt = (Button) findViewById(R.id.force);
    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(MainActivity.this, CurrentChanceDatabase.class);
            db.close();
            startActivity(myIntent);
        }
    });
}

public void registerExperimentFunction(){
   ContinueBt.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           nameOfExperiment = (EditText) findViewById(R.id.nameOfExperiment);
           noOfOutcomes = (EditText) findViewById(R.id.noOfChance);
           String nameOfExperimentString = nameOfExperiment.getText().toString();
           Integer noOfOutcomesInt = Integer.parseInt(noOfOutcomes.getText().toString());
           Boolean success = db.registerExperiment(nameOfExperimentString, noOfOutcomesInt);
           if (success)
               Toast.makeText(MainActivity.this,"Done Success", Toast.LENGTH_SHORT).show();
           else

               Toast.makeText(MainActivity.this,"UnDone UnSuccess", Toast.LENGTH_SHORT).show();
           Intent myIntent = new Intent(MainActivity.this, CurrentChanceDatabase.class);
           db.close();
           startActivity(myIntent);

       }
   });
}

}
AddNames.java

package com.example.snehit.probablity;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import android.widget.LinearLayout;

/**
 * Created by Snehit on 6/10/2017.
 */
public class AddNames extends AppCompatActivity {
CurrentChanceDatabase db;
LinearLayout ll;
EditText editText;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_names);
    db = new CurrentChanceDatabase(this);
    addTextBox();
}


public void addTextBox(){
    ll = (LinearLayout) findViewById(R.id.linearLayout1);
    Cursor res = db.getAllChance();
    //StringBuffer buffer = new StringBuffer();
    String chance = res.getString(res.getColumnIndex("CHANCE"));
    Integer chanceInt = Integer.parseInt(chance);
    //buffer.append(res.getString(0) + "\n");
    for(int i=0;i<chanceInt;i++)
    {
        editText = new EditText(this);
        editText.setHint("Name here");
       ll.addView(editText);
    }
}
}
添加_names.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linearLayout1">

</LinearLayout>
当数据库类从MainActivity类加载时,不会出现此错误

我想做什么

用户从activity_main.xml(MainActivity.java)注册一个实验。当用户点击continue(继续)时,名称和机会数将被放入数据库。除了数据库函数外,还会传递一个启动AddNames.java的意图。此活动从数据库中获取未完成实验*数据库中的机会数,并在add_names.xml中创建相同数量的EditText,以便用户可以命名

*未完成的实验/deleteAllData();-当用户命名了一个实验的所有机会后,它将被标记为已完成,表中的“已完成”值将从0增加到1。这个功能本来是要添加到AddNames.java中的,但是由于它甚至拒绝启动,我还没有把代码放进去。从MainActivity.java添加新实验时,其“完成”值为零。所有其他实验的“完成”值均为1。(这个东西的代码将在开发完成后发布)。因此,为了确保只有“已完成”值为0的on-experiment,我在应用程序启动时删除了所有条目。为了得到未完成的实验,我使用“WHERE COMPLETED=0”查询数据库。 谢谢大家!

编辑:

我的Android清单xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.snehit.probablity">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>



<activity android:name="com.example.snehit.probablity.AddNames" android:label="@string/app_name">


</activity>

我以前不想再加上这个

再次感谢你

但当第二个活动启动时,应用程序崩溃

这显然意味着第二个活动
AddNames
未在项目清单中注册。因此,获取此错误:

android.content.ActivityNotFoundException:找不到显式活动类{com.example.sneit.probably/com.example.sneit.probably.CurrentChanceDatabase};您是否在AndroidManifest.xml中声明了此活动?

确保在清单中注册
AddNames
活动


将此添加到您的
manifest.xml

但当第二个活动启动时,应用程序崩溃

这显然意味着第二个活动
AddNames
未在项目清单中注册。因此,获取此错误:

android.content.ActivityNotFoundException:找不到显式活动类{com.example.sneit.probably/com.example.sneit.probably.CurrentChanceDatabase};您是否在AndroidManifest.xml中声明了此活动?

确保在清单中注册
AddNames
活动


将此添加到您的
manifest.xml


在使用ide中的调试工具后,我自己发现了错误。错误出现在MainActivity.java中,我在其中为continue按钮设置了button onClick函数

意图的代码应该是

Intent myIntent=newintent(MainActivity.this、AddNames.class)

我的初始代码在单击时启动CurrentChanceDatabase.java,我不想这样做


另外,在addTextBox()函数的AddNames.java类中获取未完成实验的机会数的代码是错误的。必须使用while循环以
res.moveToNext()
作为条件检索机会数。在循环中,必须检索机会数并将其转换为整数,以便在添加文本框的循环中使用。

在使用ide中的调试工具后,我自己发现了错误。错误出现在MainActivity.java中,我在其中为continue按钮设置了button onClick函数

意图的代码应该是

Intent myIntent=newintent(MainActivity.this、AddNames.class)

我的初始代码在单击时启动CurrentChanceDatabase.java,我不想这样做


另外,在addTextBox()函数的AddNames.java类中获取未完成实验的机会数的代码是错误的。必须使用while循环以
res.moveToNext()
作为条件检索机会数。在循环中,必须检索机会数并将其转换为整数,以便在添加文本框的循环中使用。

我已经在清单文件中声明了活动。我忘了把舱单的密码寄出去了。请参见已编辑的问题。另外,错误要求声明CurrentChanceActivity.java(而不是像您要求的那样声明AddNames.java)。在声明当前chance.java时,我收到一个关于“未找到匹配构造函数”的错误。我已经在清单文件中声明了该活动。我忘了把舱单的密码寄出去了。请参见已编辑的问题。另外,错误要求声明CurrentChanceActivity.java(而不是像您要求的那样声明AddNames.java)。在声明Current chance.java时,我得到一个关于“未找到匹配构造函数”的错误。
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.snehit.probablity.MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Name"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/nameOfExperiment"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="No. of outcomes"
    android:id="@+id/textView2"
    android:layout_below="@+id/nameOfExperiment"
    android:layout_centerHorizontal="true" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/noOfChance"
    android:layout_below="@+id/textView2"
    android:layout_centerHorizontal="true"
    android:inputType="number" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Continue"
    android:id="@+id/continueButtton"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Force continue"
    android:id="@+id/force"
    android:layout_below="@+id/continueButtton"
    android:layout_alignStart="@+id/textView2" />
799/com.example.snehit.probablity E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: com.example.snehit.probablity, PID: 1799
                                                                         android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.snehit.probablity/com.example.snehit.probablity.CurrentChanceDatabase}; have you declared this activity in your AndroidManifest.xml?
                                                                             at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1805)
                                                                             at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
                                                                             at android.app.Activity.startActivityForResult(Activity.java:4225)
                                                                             at android.app.Activity.startActivityForResult(Activity.java:4183)
                                                                             at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:784)
                                                                             at android.app.Activity.startActivity(Activity.java:4522)
                                                                             at android.app.Activity.startActivity(Activity.java:4490)
                                                                             at com.example.snehit.probablity.MainActivity$2.onClick(MainActivity.java:56)
                                                                             at android.view.View.performClick(View.java:5637)
                                                                             at android.view.View$PerformClick.run(View.java:22429)
                                                                             at android.os.Handler.handleCallback(Handler.java:751)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:154)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
06-10 21:43:46.216 795-807/system_process W/ActivityManager:   Force finishing activity com.example.snehit.probablity/.MainActivity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.snehit.probablity">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>



<activity android:name="com.example.snehit.probablity.AddNames" android:label="@string/app_name">


</activity>