每当我启动应用程序时,应用程序都会打开,但只要我单击 mainactivity 的按钮 1 或按钮 2 中的任何一个,我就会收到此错误:
java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.example.myapp/com.example.myapp.FirstActivity}: java.lang.IllegalAccessException:
void com.example.myapp.FirstActivity.<init>() is not accessible from
java.lang.Class<android.app.AppComponentFactory>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3341)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7814)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Caused by: java.lang.IllegalAccessException: void com.example.myapp.FirstActivity.<init>() is
not accessible from java.lang.Class<android.app.AppComponentFactory>
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1251)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3329)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7814)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
我正在尝试制作一个带有保存功能的井字游戏,其中所有数据都进入 SQLite 数据库,然后检索数据以玩保存的游戏。每当我按下任何按钮时,应用程序都会崩溃并出现上述错误。我在自己的手机 android 11 中运行我的应用程序。
我的代码:
主要活动 :
package com.example.myapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(this);
Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(this);
Button btn3 = findViewById(R.id.btn3);
btn3.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.btn1 :
Intent intent1 = new Intent(this, FirstActivity.class);
intent1.putExtra("KEY1", "VALUE1");
startActivity(intent1);
break;
case R.id.btn2 :
Intent intent2 = new Intent(this, SavedgameActivity.class);
intent2.putExtra("KEY2", "VALUE2");
startActivity(intent2);
break;
case R.id.btn3 :
break;
}
}
}
第一活动:
package com.example.myapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
public class FirstActivity extends AppCompatActivity implements View.OnClickListener {
ArrayList<Integer> a = new ArrayList<Integer>(9);
ArrayList<Integer> b = new ArrayList<Integer>(9);
boolean chance = true;
int c=-1,d=-1;
Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11;
TextView txtview4;
TextView txtview5;
int score1 = 0, score2 = 0;
String savename = "";
DBhelper db;
FirstActivity() {
}
public FirstActivity(boolean check, int score1, int score2, boolean chance, int c, int d, String btn)
{
this.chance = chance;
this.score1 = score1;
this.score2 = score2;
this.chance = chance;
this.c = c;
this.d = d;
btn1.setText(btn.charAt(0));
btn2.setText(btn.charAt(1));
btn3.setText(btn.charAt(2));
btn4.setText(btn.charAt(3));
btn5.setText(btn.charAt(4));
btn6.setText(btn.charAt(5));
btn7.setText(btn.charAt(6));
btn8.setText(btn.charAt(7));
btn9.setText(btn.charAt(8));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
txtview4 = findViewById(R.id.textView4);
txtview5 = findViewById(R.id.textView5);
btn1 = findViewById(R.id.button1);
btn2 = findViewById(R.id.button2);
btn3 = findViewById(R.id.button3);
btn4 = findViewById(R.id.button4);
btn5 = findViewById(R.id.button5);
btn6 = findViewById(R.id.button6);
btn7 = findViewById(R.id.button7);
btn8 = findViewById(R.id.button8);
btn9 = findViewById(R.id.button9);
btn10 = findViewById(R.id.button10);
btn11 = findViewById(R.id.button11);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
btn5.setOnClickListener(this);
btn6.setOnClickListener(this);
btn7.setOnClickListener(this);
btn8.setOnClickListener(this);
btn9.setOnClickListener(this);
btn10.setOnClickListener(this);
btn11.setOnClickListener(this);
db = new DBhelper(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.button1 :
if(chance == true) {
c = c+1;
a.add(c, 1);
btn1.setText("X");
}
else {
d = d+1;
b.add(d, 1);
btn1.setText("O");
}
break;
case R.id.button2 :
if(chance == true) {
c = c+1;
a.add(c, 2);
btn2.setText("X");
}
else {
d = d+1;
b.add(d, 2);
btn2.setText("O");
}
break;
case R.id.button3 :
if(chance == true) {
c = c+1;
a.add(c, 3);
btn3.setText("X");
}
else {
d = d+1;
b.add(d, 3);
btn3.setText("O");
}
break;
case R.id.button4 :
if(chance == true) {
c = c+1;
a.add(c, 4);
btn4.setText("X");
}
else {
d = d+1;
b.add(d, 4);
btn4.setText("O");
}
break;
case R.id.button5 :
if(chance == true) {
c = c+1;
a.add(c, 5);
btn5.setText("X");
}
else {
d = d+1;
b.add(d, 5);
btn5.setText("O");
}
break;
case R.id.button6 :
if(chance == true) {
c = c+1;
a.add(c, 6);
btn6.setText("X");
}
else {
d = d+1;
b.add(d, 6);
btn6.setText("O");
}
break;
case R.id.button7 :
if(chance == true) {
c = c+1;
a.add(c, 7);
btn7.setText("X");
}
else {
d = d+1;
b.add(d, 7);
btn7.setText("O");
}
break;
case R.id.button8 :
if(chance == true) {
c = c+1;
a.add(c, 8);
btn8.setText("X");
}
else {
d = d+1;
b.add(d, 8);
btn8.setText("O");
}
break;
case R.id.button9 :
if(chance == true) {
c = c+1;
a.add(c, 9);
btn9.setText("X");
}
else {
d = d+1;
b.add(d, 9);
btn9.setText("O");
}
break;
case R.id.button10 :
String btn = btn1.getText().toString() + btn2.getText().toString() +
btn3.getText().toString() + btn4.getText().toString() + btn5.getText().toString() +
btn6.getText().toString() + btn7.getText().toString() + btn8.getText().toString() +
btn9.getText().toString();
SavedgameActivity sga = new SavedgameActivity(false, score1, score2, chance, c, d, btn);
Intent intent = new Intent(FirstActivity.this, SavedgameActivity.class);
intent.putExtra("KEY3", "VALUE3");
startActivity(intent);
break;
case R.id.button11 :
finish();
break;
}
if(chance == true)
chance = false;
else
chance = true;
if((a.contains(1) && a.contains(2) && a.contains(3))||(a.contains(4) && a.contains(5) &&
a.contains(6))||((a.contains(7) && a.contains(8) && a.contains(9)))||(a.contains(1) && a.contains(4)
&& a.contains(7))||(a.contains(2) && a.contains(5) && a.contains(8))||(a.contains(3) && a.contains(6)
&& a.contains(9))||(a.contains(1) && a.contains(5) && a.contains(9))||(a.contains(3) && a.contains(5)
&& a.contains(7))) {
score1++;
txtview4.setText("" + score1);
btn1.setText("");
btn2.setText("");
btn3.setText("");
btn4.setText("");
btn5.setText("");
btn6.setText("");
btn7.setText("");
btn8.setText("");
btn9.setText("");
c = -1;
d = -1;
a.clear();
b.clear();
if((score1 + score2)%2 == 0)
chance = true;
else
chance = false;
}
else if((b.contains(1) && b.contains(2) && b.contains(3))||(b.contains(4) && b.contains(5) &&
b.contains(6))||((b.contains(7) && b.contains(8) && b.contains(9)))||(b.contains(1) && b.contains(4)
&& b.contains(7))||(b.contains(2) && b.contains(5) && b.contains(8))||(b.contains(3) && b.contains(6)
&& b.contains(9))||(b.contains(1) && b.contains(5) && b.contains(9))||(b.contains(3) && b.contains(5)
&& b.contains(7))) {
score2++;
txtview5.setText("" + score2);
btn1.setText("");
btn2.setText("");
btn3.setText("");
btn4.setText("");
btn5.setText("");
btn6.setText("");
btn7.setText("");
btn8.setText("");
btn9.setText("");
c = -1;
d = -1;
a.clear();
b.clear();
if ((score1 + score2) % 2 == 0)
chance = true;
else
chance = false;
}
}
}
保存游戏活动:
package com.example.myapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class SavedgameActivity extends AppCompatActivity {
boolean check = true;
int score1;
int score2;
boolean chance, dialogcheck, isupdated, isinserted;
int c;
int d;
String btn;
DBhelper db = new DBhelper(this);
TextView txt6, txt7, txt8;
Button btn12, btn13, btn14;
SavedgameActivity() {
}
public SavedgameActivity(boolean check, int score1, int score2, boolean chance, int c, int d, String
btn) {
this.check = check;
this.score1 = score1;
this.score2 = score2;
this.chance = chance;
this.c = c;
this.d = d;
this.btn = btn;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_savedgame);
if(check == false) {
falsemethod();
}
else
truemethod();
}
public void falsemethod() {
btn12 = findViewById(R.id.button12);
btn13 = findViewById(R.id.button13);
btn14 = findViewById(R.id.button14);
txt6 = findViewById(R.id.textView6);
txt7 = findViewById(R.id.textView7);
txt8 = findViewById(R.id.textView8);
Cursor savegame1 = db.getgame(txt6.getText().toString());
Cursor savegame2 = db.getgame(txt7.getText().toString());
Cursor savegame3 = db.getgame(txt8.getText().toString());
ArrayList<String> itemIds1 = new ArrayList<String>();
while(savegame1.moveToNext()) {
itemIds1.add(savegame1.getString(savegame1.getColumnIndex("id")));
}
savegame1.close();
ArrayList<String> itemIds2 = new ArrayList<String>();
while(savegame2.moveToNext()) {
itemIds2.add(savegame2.getString(savegame2.getColumnIndex("id")));
}
savegame2.close();
ArrayList<String> itemIds3 = new ArrayList<String>();
while(savegame3.moveToNext()) {
itemIds3.add(savegame3.getString(savegame3.getColumnIndex("id")));
}
savegame3.close();
if(Integer.parseInt(itemIds1.get(0)) < 1)
btn12.setText("Save");
else
btn12.setText("Override and Save");
if(Integer.parseInt(itemIds2.get(0)) < 1)
btn12.setText("Save");
else
btn12.setText("Override and Save");
if(Integer.parseInt(itemIds2.get(0)) < 1)
btn12.setText("Save");
else
btn12.setText("Override and Save");
btn12.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Integer.parseInt(itemIds1.get(0)) < 1)
isinserted = db.addgame(score1, score2, chance, c, d, btn);
else
isupdated = db.updategame(score1, score2, chance, c, d, btn,
btn12.getText().toString());
}
});
btn13.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Integer.parseInt(itemIds2.get(0)) < 1)
isinserted = db.addgame(score1, score2, chance, c, d, btn);
else
isupdated = db.updategame(score1, score2, chance, c, d, btn,
btn13.getText().toString());
}
});
btn14.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Integer.parseInt(itemIds3.get(0)) < 1)
isinserted = db.addgame(score1, score2, chance, c, d, btn);
else
isupdated = db.updategame(score1, score2, chance, c, d, btn,
btn14.getText().toString());
}
});
if((isinserted == true) || (isupdated == true))
Toast.makeText(SavedgameActivity.this, "Game Saved", Toast.LENGTH_LONG).show();
else
Toast.makeText(SavedgameActivity.this, "Game Not Saved", Toast.LENGTH_LONG).show();
}
public void truemethod() {
btn12.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor Getgame = db.getgame(txt6.getText().toString());
ArrayList<Long> itemIds = new ArrayList<Long>();
while(Getgame.moveToNext()) {
long itemId = Getgame.getLong(
Getgame.getColumnIndexOrThrow("id"));
itemIds.add(itemId);
}
Getgame.close();
if (itemIds.get(0) < 1)
Toast.makeText(SavedgameActivity.this, "Game not saved yet", Toast.LENGTH_LONG).show();
else {
FirstActivity fa = new FirstActivity(check, score1, score2, chance, c, d, btn);
Intent intent = new Intent();
intent.putExtra("KEY4", "VALUE4");
startActivity(intent);
}
}
});
}
public void setCheck(boolean check) {
this.check = check;
}
}
DBhelper 类:
package com.example.myapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class DBhelper extends SQLiteOpenHelper {
SQLiteDatabase db = this.getWritableDatabase();
SQLiteDatabase db1 = this.getReadableDatabase();
public DBhelper(@Nullable Context context) {
super(context, "Database", null, 1);
SQLiteDatabase database = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Save(id INTEGER PRIMARY KEY AUTOINCREMENT, score1 INTEGER, score2
INTEGER, chance BOOLEAN, c INTEGER, d INTEGER, btn TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public boolean addgame(int Score1, int Score2, boolean Chance, int C, int D, String Btn) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("score1", Score1);
cv.put("score2", Score2);
cv.put("chance", Chance);
cv.put("c", C);
cv.put("d", D);
cv.put("btn", Btn);
long result = db.insert("Save", null, cv);
if(result == -1)
return false;
else
return true;
}
public Cursor getgame(String a) {
Cursor res = db.query("Save", null, "id = ?", new String[]{a}, null, null, "btn DESC");
return res;
}
public boolean updategame(int Score1, int Score2, boolean Chance, int C, int D, String Btn, String
id) {
int nameid = Integer.parseInt(id);
ContentValues cv = new ContentValues();
cv.put("id", nameid);
cv.put("score1", Score1);
cv.put("score2", Score2);
cv.put("chance", Chance);
cv.put("c", C);
cv.put("d", D);
cv.put("btn", Btn);
long result = db1.update("Save", cv, "id = ?", new String[]{id});
if(result == -1)
return false;
else
return true;
}
public void closedb() {
db.close();
}
}
主要文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApp">
<activity android:name=".SavedgameActivity" />
<activity android:name=".FirstActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
请给我一个解决方案。谢谢。