0

SQLite データベースから抽出したいくつかの変数をテキストビューに表示しようとしています。それは正しく機能し、情報を表示しますが、テキストビューでlogcatiクリックをロードすると、クラッシュして例外がスローされます。

これはlogcatです:

05-04 19:25:32.456: I/AtaquesAdapter(466): OPening DataBase Connection....
05-04 19:25:34.625: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c5
05-04 19:25:34.625: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c6
05-04 19:25:34.625: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c7
05-04 19:25:34.635: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c5
05-04 19:25:34.635: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c6
05-04 19:25:34.635: W/ResourceType(466): Too many attribute references, stopped at: 0x010102c7
05-04 19:25:36.566: W/ResourceType(466): No package identifier when getting value for resource number 0x00000000
05-04 19:25:36.566: D/AndroidRuntime(466): Shutting down VM
05-04 19:25:36.566: W/dalvikvm(466): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-04 19:25:36.596: E/AndroidRuntime(466): FATAL EXCEPTION: main
05-04 19:25:36.596: E/AndroidRuntime(466): android.content.res.Resources$NotFoundException: Resource ID #0x0
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.content.res.Resources.getValue(Resources.java:892)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.content.res.Resources.getDrawable(Resources.java:580)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.widget.TextView$HandleView.setOrientation(TextView.java:7801)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.widget.TextView$HandleView.<init>(TextView.java:7770)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.widget.TextView$InsertionPointCursorController.<init>(TextView.java:8006)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.widget.TextView.getInsertionController(TextView.java:8351)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.widget.TextView.onTouchEvent(TextView.java:6829)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.View.dispatchTouchEvent(View.java:3885)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:869)
05-04 19:25:36.596: E/AndroidRuntime(466):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1691)
05-04 19:25:36.596: E/AndroidRuntime(466):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1125)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.app.Activity.dispatchTouchEvent(Activity.java:2096)
05-04 19:25:36.596: E/AndroidRuntime(466):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1675)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2194)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1878)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.os.Looper.loop(Looper.java:130)
05-04 19:25:36.596: E/AndroidRuntime(466):  at android.app.ActivityThread.main(ActivityThread.java:3683)
05-04 19:25:36.596: E/AndroidRuntime(466):  at java.lang.reflect.Method.invokeNative(Native Method)
05-04 19:25:36.596: E/AndroidRuntime(466):  at java.lang.reflect.Method.invoke(Method.java:507)
05-04 19:25:36.596: E/AndroidRuntime(466):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-04 19:25:36.596: E/AndroidRuntime(466):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-04 19:25:36.596: E/AndroidRuntime(466):  at dalvik.system.NativeStart.main(Native Method)

これはxmlです:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ataque_description_text"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="false"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:longClickable="false"
    android:padding="16dp"
    android:textSize="20sp" >
</TextView>

私はこれらの文の有無にかかわらず試しました:

 android:clickable="false"  
 android:focusable="false"  
 android:focusableInTouchMode="false"  
 android:longClickable="false"  

これは問題のあるコードです:

public class AtaqueDescription extends Activity implements OnClickListener {
long ataque_id;
String ataque_nombre;
String ataque_dano;
String ataque_tipo;
String ataque_velocidad;

CharSequence description;

public static TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 // AT THIS POINT THE APP THROWS THE WARNINGS FOR THE FIRST TIME
        setContentView(R.layout.ataques_description);
 // AT THIS POINT THE APP THROWS THE WARNINGS AGAIN
        Bundle extras = getIntent().getExtras();

        ataque_id = extras.getLong(DBHelper.COLUMNA_ID);
        ataque_nombre = extras.getString(DBHelper.COLUMNA_NOMBRE);
        ataque_dano = extras.getString(DBHelper.COLUMNA_DANO);
        ataque_tipo = extras.getString(DBHelper.COLUMNA_TIPO);
        ataque_velocidad = extras.getString(DBHelper.COLUMNA_VELOCIDAD);

        description = ataque_nombre + " con id: " + ataque_id + ", con tipo: " 
            + ataque_tipo + ", con daño: " + ataque_dano + ", con velocidad: " 
            + ataque_velocidad;
        tv = (TextView)findViewById(R.id.ataque_description_text);

        tv.setText(description.toString());

        tv.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                finish();           
        }
        });
}

public void onClick(View v) {
    finish();
}
}

私はこれらの文の有無にかかわらず試しました:

.toString()       [in  tv.setText(description.toString());]

 tv.setOnClickListener(new OnClickListener() {  
  public void onClick(View v) {  
   finish();            
  }  
 });  

 public void onClick(View v) {  
   finish();
 }

そして、これは問題のあるコードが呼び出されるコードです:

public class Ataques extends ListActivity {

@SuppressWarnings("unused")
private static final String TAG = "Ataques";

AtaquesAdapter attTable;
ListView attListView;
Cursor c;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.ataques_list);

    attTable = new AtaquesAdapter();
    attTable.open(getApplicationContext());

    c = attTable.getAllAtaques();

    startManagingCursor(c);

    if (c != null) {
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.ataques_row, c,
                new String[] { c.getColumnName(1) },
                new int[] { R.id.ataque });
        setListAdapter(adapter);
    }
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    c.moveToPosition(position);

    Intent i = new Intent(this, AtaqueDescription.class);
    i.putExtra(DBHelper.COLUMNA_ID, id);
    i.putExtra(DBHelper.COLUMNA_NOMBRE, c.getString(c.getColumnIndexOrThrow(DBHelper.COLUMNA_NOMBRE)));
    i.putExtra(DBHelper.COLUMNA_DANO, c.getString(c.getColumnIndexOrThrow(DBHelper.COLUMNA_DANO)));
    i.putExtra(DBHelper.COLUMNA_TIPO,   c.getString(c.getColumnIndexOrThrow(DBHelper.COLUMNA_TIPO)));
    i.putExtra(DBHelper.COLUMNA_VELOCIDAD,  c.getString(c.getColumnIndexOrThrow(DBHelper.COLUMNA_VELOCIDAD)));
    startActivity(i);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    c.close();
    attTable.close();
}

}

より詳細な説明:

  1. ご覧のとおり、いくつかの警告の問題もあります。同じ 3 つの警告が 2 回スローされます。プログラムがそれらをスローするコードを既にマークしています。
  2. [修正済み] 私の主な問題はクラッシュに関するものです。コードは正しく機能しているようで、正しい変数を含むテキストビューが表示されます (変数は SQLite データベースから抽出され、バンドルのエクストラを介してアクティビティ間で送信されます)。しかし、このレイアウトで画面の任意のポイントをクリックすると、プログラムは android.content.res.Resources$NotFoundException: Resource ID #0x0
    をスローします。私は多くのバリエーションを試しました (それらのほとんどは、ここのコードの下にコメントされています)。さまざまなバリエーションを試してみましたが、いずれもコードの動作に違いがあるようです。
    エミュレータの API バージョンを 10 から 16 に変更した後、例外は修正されたようです。

また、呼び出し元を次のように単純化しようとしています。

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
        Intent i = new Intent(this, AtaqueDescription.class);
        startActivity(i);
    }
}

問題のあるコードは次のようになります。

public class AtaqueDescription extends Activity implements OnClickListener {
public static TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.ataques_description);
        tv = (TextView)findViewById(R.id.ataque_description_text);    
        tv.setText("hello");
    }
}

しかし、警告と例外の両方がまだ発生しています。

お時間をありがとうございました!

編集: エミュレータの API バージョンを 10 から 16 に変更した後、例外は修正されたよう
です。

4

1 に答える 1

-1

この問題は、私が使用していたエミュレーター、16 ではなく 10 の API バージョンが原因でした。警告はまだ解決されていません。コメントでお世話になった皆様、ありがとうございました。

于 2013-05-06T11:46:23.297 に答える