简体   繁体   English

错误无法启动活动ComponentInfo

[英]Error Unable to start activity ComponentInfo

I have this error message : 我有此错误消息:

com.example.faizirrahmadi.eyeglauapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.faizirrahmadi.eyeglauapp, PID: 22114
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.faizirrahmadi.eyeglauapp/com.example.faizirrahmadi.eyeglauapp.PenyakitActivity}: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)
    at android.app.ActivityThread.access$900(ActivityThread.java:177)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5910)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
    at java.util.ArrayList.get(ArrayList.java:308)
    at com.example.faizirrahmadi.eyeglauapp.PenyakitActivity.prepareListData(PenyakitActivity.java:111)
    at com.example.faizirrahmadi.eyeglauapp.PenyakitActivity.onCreate(PenyakitActivity.java:69)
    at android.app.Activity.performCreate(Activity.java:6178)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 
    at android.app.ActivityThread.access$900(ActivityThread.java:177) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5910) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

And here is my code (java class) 这是我的代码(java类)

package com.example.faizirrahmadi.eyeglauapp;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import sistempakar.dbHelper;

 /**
 * Created by Faizir Rahmadi on 3/19/2016.
 */
 public class PenyakitActivity extends ActionBarActivity {
 ExpandableListAdapter listAdapter;
 ExpandableListView expListView;
 List<String> listDataHeader;
 HashMap<String, List<String>> listDataChild;

 Cursor cursor_gejala;
 dbHelper myDb;
 SQLiteDatabase sqliteDatabase;
 TextView nama_penyakit;


 public String bundleId;
 public String bundleKode;
 private String bundleNamaPenyakit;
 private String bundleDeskripsi;
 private String bundleGejala;
 private String bundlePenanganan;
 String a;

List<String> bundleNamaGejala;
List<String> namaGejalaList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_penyakit);

    Bundle takeData = getIntent().getExtras();
    bundleId = takeData.getString("clickedId");
    bundleKode = takeData.getString("clickedKode").toLowerCase();
    bundleNamaPenyakit = takeData.getString("clickedNamaPenyakit");
    bundleDeskripsi = takeData.getString("clickedDeskripsi");
    bundleGejala = takeData.getString("clickedGejala");
    bundlePenanganan = takeData.getString("clickedPenanganan");

    //mengubah kode gejala menjadi nama gejala yang ditampilkan
    bundleNamaGejala = Arrays.asList(bundleGejala.split("\\s*,\\s*"));

    nama_penyakit = (TextView) findViewById(R.id.textView5);
    nama_penyakit.setText(bundleNamaPenyakit);
    nama_penyakit.setAllCaps(true);


    expListView = (ExpandableListView) findViewById(R.id.expandableListView);
    namagejala(bundleNamaGejala);
    a = new String(TextUtils.join(", ", namaGejalaList));
    prepareListData();
    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
    expListView.setAdapter(listAdapter);
    Toast.makeText(this, a, Toast.LENGTH_SHORT).show();
}

//mengubah kode gejala dalam tabel RELASI menjadi nama gejala dari tabel GEJALA
public List<String> namagejala(List<String> _nama) {
    myDb = new dbHelper(this);
    sqliteDatabase = myDb.getReadableDatabase();
    String where = "";
    namaGejalaList = new ArrayList<String>();
    for (int i = 0; i < _nama.size(); i++) {
        where = where + dbHelper.COLUMN_ID_GEJALA + " IN('" + _nama.get(i).toString() + "')";
        if (i != (_nama.size() - 1)) {
            where = where + " OR ";
        }
    }
    cursor_gejala = sqliteDatabase.query(dbHelper.TABLE_GEJALA, new String[]{dbHelper.COLUMN_NM_GEJALA}, where, null, null, null, null);
    while (cursor_gejala.moveToNext()) {
        namaGejalaList.add(cursor_gejala.getString(cursor_gejala.getColumnIndex(dbHelper.COLUMN_NM_GEJALA)));
    }
    return namaGejalaList;
}

private void prepareListData() {
    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();

    listDataHeader.add("Gejala");


    List<String> deskripsi = new ArrayList<String>();
    deskripsi.add(bundleDeskripsi);

    List<String> gejala = new ArrayList<String>();
    gejala.add(a);

    List<String> penanganan = new ArrayList<String>();
    penanganan.add(bundlePenanganan);

    listDataChild.put(listDataHeader.get(0), deskripsi);
    listDataChild.put(listDataHeader.get(1), gejala);
    listDataChild.put(listDataHeader.get(2), penanganan);
}

}

I don't know how this could happend.. i have check and always there's error on prepareListData(); 我不知道怎么回事。.我检查了一下, prepareListData();上总是有错误prepareListData(); and listDataChild.put(listDataHeader.get(1), gejala); listDataChild.put(listDataHeader.get(1), gejala); I've been searching all the answer and nothing could help me Thank you for your kindess for helping me and solve this problem for the future 我一直在寻找所有的答案,没有任何帮助我,谢谢您对我的帮助,并为将来解决这个问题

List index starts from 0, so if you want get first element, you should write 列表索引从0开始,因此如果要获取第一个元素,则应编写

listDataHeader.get(0)

If the size of listDataHeader is 1, you will have an exception when you try to get element with index 1. 如果listDataHeader的大小为1,则尝试获取索引为1的元素时将出现异常。

In your code you put one item in your 在您的代码中,您将一项放入了

listDataHeader.add("Gejala");

in prepareListData() method. prepareListData()方法中。 Which is on 0 index. 哪个在0索引上。 And you are trying to access 您正在尝试访问

listDataChild.put(listDataHeader.get(1), gejala);

index 1 of listDataHeader list which is not available. listDataHeader列表的索引1不可用。 So, you get the error. 所以,您得到错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM