Android (帮助)java.lang.runtimeexception无法启动活动组件信息
我是编程新手,如果这类问题已经被问了很多次,我很抱歉。 我对这些错误感到困惑,请帮助我。。。 这是我的MainActivity.javaAndroid (帮助)java.lang.runtimeexception无法启动活动组件信息,android,runtimeexception,main-activity,Android,Runtimeexception,Main Activity,我是编程新手,如果这类问题已经被问了很多次,我很抱歉。 我对这些错误感到困惑,请帮助我。。。 这是我的MainActivity.java package id.romi.androidquiz; import java.util.Collections; import java.util.List; import id.romi.androidquiz.entity.Quiz; import id.romi.androidquiz.util.DBAdapter; import id.rom
package id.romi.androidquiz;
import java.util.Collections;
import java.util.List;
import id.romi.androidquiz.entity.Quiz;
import id.romi.androidquiz.util.DBAdapter;
import id.romi.androidquiz.util.Utils;
import com.actionbarsherlock.app.SherlockActivity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends SherlockActivity implements OnClickListener
{
private static final String TAG = MainActivity.class.getName();
private TextView soal, user, txtScore, soalCounter, Timer;
private Button btnNext;
private RadioGroup rg_answer;
private RadioButton rb_A, rb_B, rb_C, rb_D;
private DBAdapter mDb;
private List<Quiz> mListQuiz;
private Quiz mQuiz;
private CountDownTimer mCountDownTimer;
private int mScore;
private int mTime = 0;
private int currentSoal = 0;
private static final int milisecond = 1000;
private static final int second = 90;
private static final int detik = second * milisecond;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//savedInstanceState instance dbAdapter
mDb = DBAdapter.getInstance(this);
// get data soal
mListQuiz = mDb.getAllSoal();
// acak list
Collections.shuffle(mListQuiz);
setupView();
// tampilkan input username
showInputUser();
}
private void mulaiQuiz()
{
setupSoal();
setupTimer();
}
private void showInputUser()
{
LayoutInflater mInflater = LayoutInflater.from(this);
View v = mInflater.inflate(R.layout.input_user, null);
final AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.setView(v);
dialog.setTitle("Input Username");
final Button btnOk = (Button) v.findViewById(R.id.btnOk);
final EditText inputUser = (EditText) v.findViewById(R.id.inputUser);
btnOk.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
user.setText(inputUser.getText().toString());
mulaiQuiz();
dialog.dismiss();
}
});
dialog.show();
}
private void setupTimer()
{
mCountDownTimer = new CountDownTimer(detik, 1000)
{
@Override
public void onTick(long millisUntilFinished)
{
// TODO Auto-generated method stub
Timer.setText("time: " + millisUntilFinished / 1000 + "detik");
mTime = (int) (millisUntilFinished / 1000);
}
@Override
public void onFinish()
{
// TODO Auto-generated method stub
Timer.setText("time: 0 detik");
Toast.makeText(MainActivity.this, "Waktu Habis", Toast.LENGTH_SHORT).show();
}
};
mCountDownTimer.start();
}
private void setupSoal()
{
Utils.TRACE(TAG, "Soal ke - " + currentSoal);
Utils.TRACE(TAG, "Size - " + mListQuiz.size());
//clear checked radiobutton
rg_answer.clearCheck();
//get soal berdasar index
mQuiz = mListQuiz.get(currentSoal);
//set counter soal
soalCounter.setText("Soal ke -" + (currentSoal + 1));
//set soalnya
soal.setText(mQuiz.getSoal());
rb_A.setText("A. " + mQuiz.getJawaban_a());
rb_B.setText("B. " + mQuiz.getJawaban_b());
rb_C.setText("C. " + mQuiz.getJawaban_c());
rb_D.setText("D. " + mQuiz.getJawaban_d());
currentSoal++;
}
private void setupView()
{
soal = (TextView) findViewById(R.id.txtSoal);
soalCounter = (TextView) findViewById(R.id.txtSoalCount);
txtScore = (TextView) findViewById(R.id.txtScore);
user = (TextView) findViewById(R.id.txtUser);
Timer = (TextView) findViewById(R.id.timer);
txtScore.setText("Score : " + mScore);
rb_A = (RadioButton) findViewById(R.id.rb_A);
rb_B = (RadioButton) findViewById(R.id.rb_B);
rb_C = (RadioButton) findViewById(R.id.rb_C);
rb_D = (RadioButton) findViewById(R.id.rb_D);
rg_answer = (RadioGroup) findViewById(R.id.rgAnswer);
btnNext = (Button) findViewById(R.id.btnNext);
btnNext.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
if (v == btnNext)
{
if(getAnswer().equals(mQuiz.getJawaban_benar().toUpperCase()))
{
mScore += 10;
txtScore.setText("Score" + mScore);
// setupSoal();
}
if(currentSoal < mListQuiz.size())
{
setupSoal();
}
else
{
mTime = second - mTime;
Bundle bundle = new Bundle();
bundle.putString("user", user.getText().toString());
bundle.putInt("score", mScore);
bundle.putInt("time", mTime);
Intent i = new Intent(MainActivity.this, ResultActivity.class);
i.putExtras(bundle);
startActivity(i);
finish();
}
Utils.TRACE(TAG, "Your score" + mScore);
}
}
private String getAnswer()
{
int id = rg_answer.getCheckedRadioButtonId();
if (id == R.id.rb_A )
{
return "A";
} else if (id == R.id.rb_B )
{
return "B";
} else if (id == R.id.rb_C )
{
return "C";
} else if (id == R.id.rb_D )
{
return "D";
}
return "";
}
}
我添加了DBAdapter.java
package id.romi.androidquiz.util;
import id.romi.androidquiz.entity.Quiz;
import java.util.ArrayList;
import java.util.List;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DBAdapter extends SQLiteAssetHelper {
private static final String DB_NAME ="db_quiz";
private static final int DB_VER = 1;
public static final String TABLE_SOAL ="tb_soal";
public static final String COL_SOAL_ID ="id";
public static final String COL_SOAL_SOAL ="soal";
public static final String COL_SOAL_JAWABAN_A ="jawaban_a";
public static final String COL_SOAL_JAWABAN_B ="soal";
public static final String COL_SOAL_JAWABAN_C ="soal";
public static final String COL_SOAL_JAWABAN_D ="soal";
private static DBAdapter dbInstance = null;
private static SQLiteDatabase db;
private String COL_SOAL_JAWABAN_BENAR;
private DBAdapter(Context context)
{
super(context, DB_NAME, null, DB_VER);
}
public static DBAdapter getInstance(Context context)
{
if(dbInstance == null)
{
dbInstance = new DBAdapter(context);
db = dbInstance.getWritableDatabase();
}
return dbInstance;
}
@Override
public synchronized void close()
{
super.close();
if (dbInstance != null)
{
dbInstance.close();
}
}
public List<Quiz> getAllSoal()
{
List<Quiz> listSoal = new ArrayList<Quiz>();
Cursor cursor = db.query(TABLE_SOAL, new String[]
{
COL_SOAL_ID,
COL_SOAL_SOAL,
COL_SOAL_JAWABAN_A,
COL_SOAL_JAWABAN_B,
COL_SOAL_JAWABAN_C,
COL_SOAL_JAWABAN_D,
COL_SOAL_JAWABAN_BENAR
}, null, null, null, null, null, null);
if (cursor.moveToFirst())
{
do
{
Quiz quiz = new Quiz();
quiz.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COL_SOAL_ID)));
quiz.setSoal(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_SOAL)));
quiz.setJawaban_a(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_A)));
quiz.setJawaban_b(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_B)));
quiz.setJawaban_c(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_C)));
quiz.setJawaban_d(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_D)));
quiz.setJawaban_benar(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_BENAR)));
listSoal.add(quiz);
} while (cursor.moveToNext());
}
return listSoal;
}
}
package id.romi.androidquick.util;
导入id.romi.androidquick.entity.quick;
导入java.util.ArrayList;
导入java.util.List;
导入com.readystatesoftware.sqliteasset.sqliteassetper;
导入android.content.Context;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
公共类DBAdapter扩展了SQLiteAssetHelper{
私有静态最终字符串DB\u NAME=“DB\u quick”;
专用静态最终整数DB_VER=1;
公共静态最终字符串表\u SOAL=“tb\u SOAL”;
公共静态最终字符串COL_SOAL_ID=“ID”;
公共静态最终字符串COL_SOAL_SOAL=“SOAL”;
公共静态最终字符串COL_SOAL_JAWABAN_A=“JAWABAN_A”;
公共静态最终字符串COL_SOAL_JAWABAN_B=“SOAL”;
公共静态最终字符串COL_SOAL_JAWABAN_C=“SOAL”;
公共静态最终字符串COL_SOAL_JAWABAN_D=“SOAL”;
私有静态DBAdapter dbInstance=null;
私有静态数据库;
私人字符串COL_SOAL_JAWABAN_BENAR;
专用DBAdapter(上下文)
{
super(上下文、数据库名称、null、数据库版本);
}
公共静态DBAdapter getInstance(上下文)
{
if(dbInstance==null)
{
dbInstance=新的DBAdapter(上下文);
db=dbInstance.getWritableDatabase();
}
返回dbInstance;
}
@凌驾
公共同步作废关闭()
{
super.close();
if(dbInstance!=null)
{
dbInstance.close();
}
}
公共列表getAllSoal()
{
List listSoal=new ArrayList();
Cursor Cursor=db.query(表_SOAL,新字符串[])
{
COL_SOAL_ID,
科鲁索阿尔,
索阿尔·贾瓦巴纳上校,
索阿尔·贾瓦班布上校,
苏阿尔·贾瓦班克上校,
苏阿尔·贾瓦班德上校,
科鲁·索勒·贾瓦班·贝纳尔
},null,null,null,null,null,null,null,null);
if(cursor.moveToFirst())
{
做
{
测验=新测验();
setId(cursor.getInt(cursor.getColumnIndexOrThrow(COL_SOAL_ID));
quick.setSoal(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_SOAL));
quick.setJawaban_a(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_a));
quick.setJawaban_b(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_b));
quick.setJawaban_c(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_c));
quick.setJawaban_d(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_d));
setJawaban_benar(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_benar));
添加列表(测验);
}while(cursor.moveToNext());
}
返回列表;
}
}
希望你们能帮助我解决我的应用程序问题
它告诉我们错误出现在DBAdapter.java中的代码:
“quick.setJawaban_benar(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_benar));”
和MainActivity.java中的代码:“mlistquick=mDb.getAllSoal()”
方法getAllSoal()在main中,活动取自DBAdapter.java`日志猫中的这一行
package id.romi.androidquiz.util;
import id.romi.androidquiz.entity.Quiz;
import java.util.ArrayList;
import java.util.List;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DBAdapter extends SQLiteAssetHelper {
private static final String DB_NAME ="db_quiz";
private static final int DB_VER = 1;
public static final String TABLE_SOAL ="tb_soal";
public static final String COL_SOAL_ID ="id";
public static final String COL_SOAL_SOAL ="soal";
public static final String COL_SOAL_JAWABAN_A ="jawaban_a";
public static final String COL_SOAL_JAWABAN_B ="soal";
public static final String COL_SOAL_JAWABAN_C ="soal";
public static final String COL_SOAL_JAWABAN_D ="soal";
private static DBAdapter dbInstance = null;
private static SQLiteDatabase db;
private String COL_SOAL_JAWABAN_BENAR;
private DBAdapter(Context context)
{
super(context, DB_NAME, null, DB_VER);
}
public static DBAdapter getInstance(Context context)
{
if(dbInstance == null)
{
dbInstance = new DBAdapter(context);
db = dbInstance.getWritableDatabase();
}
return dbInstance;
}
@Override
public synchronized void close()
{
super.close();
if (dbInstance != null)
{
dbInstance.close();
}
}
public List<Quiz> getAllSoal()
{
List<Quiz> listSoal = new ArrayList<Quiz>();
Cursor cursor = db.query(TABLE_SOAL, new String[]
{
COL_SOAL_ID,
COL_SOAL_SOAL,
COL_SOAL_JAWABAN_A,
COL_SOAL_JAWABAN_B,
COL_SOAL_JAWABAN_C,
COL_SOAL_JAWABAN_D,
COL_SOAL_JAWABAN_BENAR
}, null, null, null, null, null, null);
if (cursor.moveToFirst())
{
do
{
Quiz quiz = new Quiz();
quiz.setId(cursor.getInt(cursor.getColumnIndexOrThrow(COL_SOAL_ID)));
quiz.setSoal(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_SOAL)));
quiz.setJawaban_a(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_A)));
quiz.setJawaban_b(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_B)));
quiz.setJawaban_c(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_C)));
quiz.setJawaban_d(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_D)));
quiz.setJawaban_benar(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_BENAR)));
listSoal.add(quiz);
} while (cursor.moveToNext());
}
return listSoal;
}
}
10-27 05:30:40.517: E/AndroidRuntime(822): Caused by: java.lang.ClassNotFoundException:
Didn't find class "android.view.Linearlayout" on path:
DexPathList[[zip file "/data/app/id.romi.androidquiz-1.apk"],nativeLibraryDirectories=[/data/app-lib/id.romi.androidquiz-1, /system/lib]]
我想说,您可能在布局
文件中将线性布局
声明为
<Linearlayout>
通过这种方式,您可以比较id
s,如果需要,还可以使用switch
语句,IMHO,如果您将此代码用于其他视图
s,它看起来比一堆if/else
语句更干净
Logcat
这将极大地帮助您进行初步的自我调试,并使您能够更好地理解当您被卡住时要发布的代码中最相关的部分。布局文件的格式不正确 您有一个名为
Linearlayout
的视图,而不是布局的第42行上的Linearlayout
学习阅读LogCat,因为它非常有助于准确地告诉您问题是什么:
原因:android.view.InflateException:二进制XML文件行#42:膨胀类Linearlayout时出错
原因:java.lang.ClassNotFoundException:未找到类“android.view.Linearlayout”
编辑
编辑原始帖子后,您现在出现另一个错误,与第一个错误完全无关:
原因:java.lang.NullPointerException
onCreate(MainActivity.java:65)
根据你的日志,这就是你的错误所在。如果LogCat抛出错误,请尝试扫描熟悉的名称和行号,正如我所说的,这是一个非常好的调试工具,因为它准确地显示了失败的地方。您是否有文件
activity\u main.xml
?张贴。。这里好像少了点什么。我把它改成了大写,但仍然强制关闭。新的错误是什么?你清理并重建了项目吗?我已经清理了。。。从logcat上的22个错误现在减少为11个错误。。。它仍然是一样的,应用程序总是强制关闭,那么我如何扫描并找到使用logcat失败的地方呢?查找由:引起的,然后扫描您识别的东西,在这种情况下,MainActivity.java:65
我已改为大写,但logcat上仍然有这些错误。。。现在看来,java.lang.NullPointerException是另一个问题。有些内容是空的。查看我关于如何阅读logcat的链接,它会告诉你哪一行有null
。请检查我上面的编辑帖子。我觉得COL\u SOAL\u JAWABAN\u BENAR
是null
,因为你从未初始化过它…私有字符串COL\u SOAL\u JAWABAN\u BENAR代码>是AAA
<Linearlayout>
<LinearLayout>
@Override
public void onClick(View v)
{
int id = v.getId(); // get the id of the View clicked then switch on it below
switch (id)
{
case R.id.btnNext:
//code if btnNext was clicked
break;
case R.id.idOfAnotherView:
// more code
break;
default:
//default code
break;