Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
Android (帮助)java.lang.runtimeexception无法启动活动组件信息_Android_Runtimeexception_Main Activity - Fatal编程技术网

Android (帮助)java.lang.runtimeexception无法启动活动组件信息

Android (帮助)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

我是编程新手,如果这类问题已经被问了很多次,我很抱歉。 我对这些错误感到困惑,请帮助我。。。 这是我的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.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;