2010-08-30 15 views
18

Ich mache meine ersten Schritte in Android und beginne mit einer sehr einfachen App, die den Fortschritt durch ein Strickmuster verfolgt und die Anweisungen für die entsprechende Zeile zeigt.Ressource nicht gefunden TextView

Ich möchte ein paar TextView-Objekte programmgesteuert aktualisieren. Die Verwendung von getViewById() scheint sie jedoch nicht richtig zu identifizieren und die App stürzt ab.

Nach Google gesucht scheint es manchmal Probleme mit dem XML-Namespace in der Layout-XML, aber meiner sieht OK. Hat das etwas mit dem Umfang zu tun?

instructions.java (dies ist die einzige Aktivität)

package uk.co.oketchup.blanketsquare; 

import android.app.Activity; 
import android.os.Bundle; 
import android.content.SharedPreferences; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.View.OnClickListener; 
import android.view.View; 

public class instructions extends Activity 
{ 
    private int mRow; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     /* retrieve row from shared preferences, or start from zero if nothing there */ 
     SharedPreferences settings = getPreferences(MODE_PRIVATE); 
     mRow = settings.getInt("row",0); 

     setContentView(R.layout.main); 

     /* associate onClick listeners with the two buttons */ 
     final Button btnIncrement = (Button) findViewById(R.id.increment); 
     btnIncrement.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Increment row 
       ++mRow; 
       calcAndUpdate(); 
      } 
     }); 

     final Button btnDecrement = (Button) findViewById(R.id.decrement); 
     btnDecrement.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Decrement row 
       --mRow; 
       calcAndUpdate(); 
      } 
     }); 
    } 

    private void calcAndUpdate() { 
    String Instructions; 
    int knit1; 
    int knit2; 
    int remaining; 

    if (mRow%2 == 1) 
     { 
     /* Odd row */ 
     knit1 = 40 - mRow; 
     Instructions = "K" + knit1; 
     remaining = knit1; 
     } 
     else 
     { 
     /* Even row */ 
     knit1 = 18 - mRow/2; 
     knit2 = knit1 + 1; 
     Instructions = "Sl 1, k" + knit1 + ", [sl 1 kwise] 2 times, k1, p2sso, k" + knit2; 
     remaining = knit1 + knit2 + 2; 
     } 

    /* Update the display */ 
    TextView tRow = (TextView) findViewById(R.id.row); 
    TextView tInstr = (TextView) findViewById(R.id.instr); 
    TextView tStRem = (TextView) findViewById(R.id.stitchremain); 

    /* Set the text */ 
    tRow.setText(mRow); 
    tInstr.setText(Instructions); 
    tStRem.setText(remaining); 

    } 

} 

/res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <TextView 
     android:id="@+id/row" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Row" 
     /> 
    <TextView 
     android:id="@+id/instr" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Instructions" 
     android:layout_below="@id/row" 
     /> 
    <Button 
     android:id="@+id/increment" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="+" 
     android:layout_alignParentBottom="true" /> 
    <Button 
     android:id="@+id/decrement" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="-" 
     android:layout_toRightOf="@id/increment" 
     android:layout_alignParentBottom="true" /> 
    <TextView 
     android:id="@+id/stitchremain" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="stitches remaining" 
     android:layout_above="@id/increment" 
     /> 
</RelativeLayout> 

Die Textview Objekte scheinen registriert worden sind ok, sie erscheinen in R.java

public static final class id { 
    public static final int decrement=0x7f050003; 
    public static final int increment=0x7f050002; 
    public static final int instr=0x7f050001; 
    public static final int row=0x7f050000; 
    public static final int stitchremain=0x7f050004; 
} 

Hier ist die Fehlermeldung in ddms angezeigt.

Uncaught handler: thread main exiting due to uncaught exception 
android.content.res.Resources$NotFoundException: String resource ID #0x1 
    at android.content.res.Resources.getText(Resources.java:200) 
    at android.widget.TextView.setText(TextView.java:2813) 
    at uk.co.oketchup.blanketsquare.instructions.calcAndUpdate(instructions.java:75) 
    at uk.co.oketchup.blanketsquare.instructions.access$100(instructions.java:11) 
    at uk.co.oketchup.blanketsquare.instructions$1.onClick(instructions.java:33) 
[etc] 

Vielen Dank für Ihre Hilfe.

Antwort

78

mRow ist eine ganze Zahl. Wenn Sie in Zeile 75 setText (mRow) aufrufen, denkt es, dass Sie versuchen, den Text mit einer String-Ressource mit ID = den Wert von mRow festzulegen.

Stattdessen tun:

tRow.setText(Integer.toString(mRow)); 
+0

konvertieren Textview sollten sicherstellen, dass es behoben ist - vielen Dank! –

+0

Hey steckte in demselben Problem! Vielen Dank ! +1 – GoodSp33d

+0

Danke dafür: D +1 – jtwigg

4

Sie immer andere Werte Zeichenfolge, bevor Sie es, wie

txtX.setText(Integer.toString(intVal)); 
Verwandte Themen