2015-04-20 3 views
-1

Итак, когда я пытаюсь отобразить текст на экране, я получаю сообщение об ошибке, которое я опубликую ниже. этот текст, который будет отображаться, должен отображать фактическую переменную. Он отобразит, сколько очков игрок приобрел. Я давно ушел из Интернета. Он компилируется, но я получаю много ошибок LogCat. Вот основной класс, с которым я пытаюсь отобразить текст.Попытка отображения на вид из другого класса

public class Main extends Activity { 
    DrawingView v; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 


     LinearLayout layout1 = new LinearLayout (this); 
     FrameLayout game = new FrameLayout(this); 
     DrawingView v = new DrawingView (this); 

     TextView myText = new TextView(this); 

     Button redCircle = new Button(this); 



     redCircle.setWidth(300); 
     redCircle.setText(DrawingView.addPoints); 


     layout1.addView(myText); 
     layout1.addView(redCircle); 
     redCircle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

     game.addView(myText); 
     game.addView(v); 
     game.addView(layout1); 
     setContentView(v); 
     //redCircle.setOnClickListener((OnClickListener) this); 
    } 
    public void onClick(View v) { 
     Intent intent = new Intent(this, Main.class); 
      startActivity(intent); 

     // re-starts this activity from game-view. add this.finish(); to remove from stack 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu){ 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



} 

и вот ошибка LogCat, которую я получаю. Пожалуйста, не голосуйте, эта проблема была описана очень подробно с очень небольшими грамматическими ошибками. Я знаю всех ваших интернет-троллей, и нацисты сделают все возможное, чтобы делать то, что вы делаете лучше всего.

04-20 01:51:42.998: E/AndroidRuntime(3154): FATAL EXCEPTION: main 
04-20 01:51:42.998: E/AndroidRuntime(3154): Process: com.Tripps.thesimplegame, PID: 3154 
04-20 01:51:42.998: E/AndroidRuntime(3154): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Tripps.thesimplegame/com.Tripps.thesimplegame.Main}: android.content.res.Resources$NotFoundException: String resource ID #0x0 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.os.Looper.loop(Looper.java:135) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at java.lang.reflect.Method.invoke(Native Method) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at java.lang.reflect.Method.invoke(Method.java:372) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
04-20 01:51:42.998: E/AndroidRuntime(3154): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.content.res.Resources.getText(Resources.java:274) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.widget.TextView.setText(TextView.java:4122) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at com.Tripps.thesimplegame.Main.onCreate(Main.java:38) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.Activity.performCreate(Activity.java:5933) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
04-20 01:51:42.998: E/AndroidRuntime(3154):  ... 10 more 

здесь еще один класс может быть очень полезным или очень запутанным в любом случае здесь вы идете

public DrawingView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 

    } 
    RectF rectf = new RectF(0, 0, 200, 0); 

    private static final int w = 100; 
    public static int lastColor = Color.BLACK; 
    private final Random random = new Random(); 
    private final Paint paint = new Paint(); 
    private final int radius = 230; 
    private final Handler handler = new Handler(); 
    public static int redColor = Color.RED; 
    public static int greenColor = Color.GREEN; 
    int randomWidth = 0; 
    int randomHeight = 0; 
    public static int addPoints = 0; 

    //TextView myTextView = new TextView(this); 



    //redCircle.setWidth(300); 
    //redCircle.setText("Start Game"); 


    private final Runnable updateCircle = new Runnable() { 
     @Override 
     public void run() { 
      lastColor = random.nextInt(2) == 1 ? redColor : greenColor; 
      paint.setColor(lastColor); 
      invalidate(); 
      handler.postDelayed(this, 1000); 

     } 
    }; 

    @Override 
    protected void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     handler.post(updateCircle); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
     handler.removeCallbacks(updateCircle); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     // your other stuff here 
     if(random == null){ 
      randomWidth =(int) (random.nextInt(Math.abs(getWidth()-radius/2)) + radius/2f); 
      randomHeight = (random.nextInt((int)Math.abs((getHeight()-radius/2 + radius/2f)))); 
     }else { 
      randomWidth =(int) (random.nextInt(Math.abs(getWidth()-radius/2)) + radius/2f); 
      randomHeight = (random.nextInt((int)Math.abs((getHeight()-radius/2 + radius/2f)))); 
     } 

     canvas.drawCircle(randomWidth, randomHeight + radius/2f, radius, paint); 
    } 

    public boolean onTouch(View v, MotionEvent event) { 
    int x = (int) event.getX(); 
    int y = (int) event.getY(); 
    if(isInsideCircle(x, y) == true){ 
     //Do your things here 
     if(redColor == lastColor){ 
      Intent i = new Intent(v.getContext(), YouFailed.class); 
      v.getContext().startActivity(i); 
     } else { 
      addPoints++; 
     } 
    }else { 

    } 
    return true; 
} 

public boolean isInsideCircle(int x, int y){ 
    if ((((x - randomWidth)*(x - randomWidth)) + ((y - randomHeight)*(y - randomHeight))) < ((radius)*(radius))) 
    return true; 
    return false;  
} 











} 
+0

Можете ли вы, пожалуйста, очистить свой проект? –

+0

уже пробовал, что – devin

+1

@devin вы добавляете представления в «игру», а затем устанавливаете contentView в «v»? –

ответ

2

Ошибка находится в

int w = getResources().getInteger(Color.RED); 

getInteger() ожидает значение res. Color.RED имеет значение 0xffff0000, которое не найдено в res. Отсюда и ошибка.

Color.RED уже является целым числом. Значения ваших ресурсов также являются целыми числами. Следовательно, когда он пытается найти ресурс со значением Color.RED или 0xffff0000, он дает ошибку, поскольку такой ресурс не существует.

В зависимости от вашего кода кажется, что вы не используете XML для настройки макета. Так, как вы используете

int w = getResources().getInteger(Color.RED); 
Button redCircle = (Button) findViewById(w); 

кажется неправильным. Поскольку в вашем макете нет такого объекта. Вы должны просто создать новую кнопку.

Button redCircle = new Button(context); 

и добавьте его в макет.

Кроме того,

redCircle.setText(DrawingView.addPoints); 

setText() ожидает строки или char[]. Вероятно, вы должны изменить это также, если addPoints не является строкой. Вы также можете передать значение res, используя R.string.some_string, который вы должны определить в папке res/values. Только для демонстрации измените его на redCicle.setText("Red Circle");

DrawingView.addPoints также целое. Поэтому, когда вы передаете redCircle.setText(DrawingView.addPoints);, компилятор предполагает, что вы передаете значение res, потому что они отображаются на основе целых чисел. Здесь значение addPoints представляется равным 0, и, следовательно, компилятор ищет ресурс с значением карты 0, который не найден и, следовательно, задает ошибку android.content.res.Resources$NotFoundException: String resource ID #0x0.

TL; DR: Resource значения отображаются на основе целых чисел. setText(), findViewById(), getResources().getInteger() и т. Д. Ожидать целое число, которое отображается на этот конкретный ресурс. Если вы передадите некоторое случайное целое число (по ошибке), он будет искать этот ресурс, потому что компиляторы являются немыми (может быть, нет.) И будут генерировать исключение, если ресурс не найден.

+0

У меня была такая идея, но что бы я ее заменил? – devin

+0

Я не знаю, что такое «res»? – devin

+0

«res» - это в основном то, что вы храните в своих ресурсах. Ваши пользовательские цвета, макеты, чертежи и т. Д. Основные черты Android выглядят немного слабыми. Вы должны быстро перейти к основам. – Froyo

0
canvas.drawText("Score: " + addPoints, 120, 300, paint); 

Это правильный способ сделать это, если у кого-либо еще есть эта проблема!

Смежные вопросы