2013-10-28 3 views
1

프로그래밍에 익숙하지 않습니다.이 질문 유형이 이미 여러 번 요청 된 경우 죄송합니다. 내가 도와주세요 이러한 오류 너무 혼란 스러워요은 ... 여기 내 MainActivity.java(도움) java.lang.runtimeexception이 (가) 활동을 시작할 수 없습니다. componentinfo

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 ""; 
    } 

} 

내 AndroidManifest.xml을

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="id.romi.androidquiz" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.Sherlock.Light" > 
     <activity 
      android:name="id.romi.androidquiz.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="id.romi.androidquiz.ResultActivity" 
      android:label="@string/title_activity_result" 
      ></activity> 
    </application> 

</manifest> 

입니다 그리고 마지막으로이 내 로그 캣은

10-28 00:40:52.024: I/SQLiteAssetHelper(807): successfully opened database db_quiz 
10-28 00:40:52.034: D/AndroidRuntime(807): Shutting down VM 
10-28 00:40:52.034: W/dalvikvm(807): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
10-28 00:40:52.054: E/AndroidRuntime(807): FATAL EXCEPTION: main 
10-28 00:40:52.054: E/AndroidRuntime(807): java.lang.RuntimeException: Unable to start activity ComponentInfo{id.romi.androidquiz/id.romi.androidquiz.MainActivity}: java.lang.NullPointerException 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.os.Looper.loop(Looper.java:137) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-28 00:40:52.054: E/AndroidRuntime(807): at java.lang.reflect.Method.invokeNative(Native Method) 
10-28 00:40:52.054: E/AndroidRuntime(807): at java.lang.reflect.Method.invoke(Method.java:525) 
10-28 00:40:52.054: E/AndroidRuntime(807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-28 00:40:52.054: E/AndroidRuntime(807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-28 00:40:52.054: E/AndroidRuntime(807): at dalvik.system.NativeStart.main(Native Method) 
10-28 00:40:52.054: E/AndroidRuntime(807): Caused by: java.lang.NullPointerException 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.database.sqlite.SQLiteCursor.getColumnIndex(SQLiteCursor.java:178) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:301) 
10-28 00:40:52.054: E/AndroidRuntime(807): at id.romi.androidquiz.util.DBAdapter.getAllSoal(DBAdapter.java:95) 
10-28 00:40:52.054: E/AndroidRuntime(807): at id.romi.androidquiz.MainActivity.onCreate(MainActivity.java:65) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.Activity.performCreate(Activity.java:5133) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-28 00:40:52.054: E/AndroidRuntime(807): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
10-28 00:40:52.054: E/AndroidRuntime(807): ... 11 more 

내 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; 
} 
} 
코드 "quiz.setJawaban_benar(cursor.getString(cursor.getColumnIndexOrThrow(COL_SOAL_JAWABAN_BENAR)));" 및 MainActivity.Java :

6,당신 모두가 오류 코드 DBAdapter.java에 있는지 내 응용 프로그램 문제 그것은 알 수 를 해결하기 위해 도와 수 있기를 바랍니다 MainActivity에서 "mListQuiz = mDb.getAllSoal();" 방법 getAllSoal은() DBAdapter.java

에서 가져옵니다
+0

'activity_main.xml' 파일이 있습니까? 그것을 게시 .. 뭔가 누락 된 것 같습니다 .. –

답변

3

`당신의 로그 캣이 줄에서

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> 
layout 파일에 LinearLayout를 선언 말 것

그것이 있어야

<LinearLayout> 

통지 모두 수도 "L"의

와 종료 태그가 아마 같은 방법입니다. 그것들을 점검하고 올바르지 않은 경우 수정하십시오. 문제가 아닌 경우 activity_main.xml을 게시하시기 바랍니다.

오프 주제에

당신의 onClick() 당신은 View들 비교하고 있지만, 그래서 더이

@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; 

이 같을 것 Viewid의 비교 일반적 낫다 당신은 id을 비교하고 있습니다. 또한 문을 사용할 수 있습니다. 원한다면 IMHO가 if/else 진술보다 더 깨끗하게 보입니다. 다른 View에이 코드를 사용합니다.

이 예비 자기 디버깅에 엄청난 도움을 당신이 붙어있을 때 코드의 대부분의 관련 부분은 무엇을 게시 할 수 있습니다 더 잘 이해 할 수

Check out this answer on reading your logcat 로그 캣.

+0

자본으로 변경되었지만 여전히 logcat에 그 오류가 ... 지금 그것은 등장 java.lang.nullpointerexception –

+0

그렇다면 그것은 별도의 문제입니다. 뭔가 'null'입니다. logcat을 읽는 방법에 대한 내 링크를 보면 어떤 줄에'null '이 있는지 알려줄 것입니다. – codeMagic

+0

위의 편집 내 위의 확인하십시오 –

0

레이아웃 파일의 형식이 잘못되었습니다.

당신은 당신의 레이아웃의 라인 # 42 대신 LinearLayoutLinearlayout라는 전망을 가지고

는 문제가 정확히 무엇을 이야기에 많은 도움이 될 것입니다으로, 로그 캣을 읽을 수 알아보기 :

android.view.InflateException :

가에 의한 바이너리 XML 파일 라인 # 42 :

클래스를 찾지 못했습니다 "android.view.Linearlayout"java.lang.ClassNotFoundException가 : 있는 LinearLayout 오류 팽창 클래스에 의한 java.lang.NullPointerException이 MainActivity.onCreate (MainActivity.java :에 의한

:

편집

원래의 게시물을 편집 한 후, 당신은 지금 다른 첫 번째와 전혀 관계가없는 오류를 가지고 : 65)

LogCat에 따르면, 여기에 오류가 있습니다. LogCat에서 익숙한 이름과 행 번호를 검사하여 오류가 발생하면 디버깅을위한 정말 좋은 도구 인 것처럼 말했습니다. 정확히 어디에서 실패했는지 보여줍니다.

+0

자본으로 변경했지만 여전히 강제로 닫습니다 –

+0

새로운 오류가 무엇입니까? 프로젝트를 청소하고 다시 만들었습니까? –

+0

나는 그것을 지웠다 ... logcat의 22 개 오류에서 이제 11 개 더 많은 오류가 줄어든다 ... 여전히 동일하고, 앱은 항상 닫는다. –