2013-06-21 4 views
0

я хочу, чтобы отобразить свою таблицу SQL в диалоговом окне оповещения с помощью TableRow с inflater вручную сделать таблицу в score.xml Main.javaИсключение нулевого указателя при SetText

//table3 
       Cursor gethighscorealter=highscoreDB.rawQuery("SELECT*FROM HIGHSCORE3"+ 
          " ORDER BY TIME asc, MOVE asc ;" 
          , null); 
        if(gethighscorealter.getCount()>0){ 
         gethighscorealter.moveToFirst(); 
         timer= gethighscorealter.getLong(gethighscorealter.getColumnIndex("TIME")); 
         move = gethighscorealter.getInt(gethighscorealter.getColumnIndex("MOVE")); 
         grid = gethighscorealter.getInt(gethighscorealter.getColumnIndex("GRID")); 
         textView31.setText(""+timer); 
         textView32.setText(""+move); 
         textView33.setText(""+grid); 
        }else{ 
         //textView31.setText("-");textView32.setText("-");textView33.setText("-"); 
        } 

score.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/table_score" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:stretchColumns="*" > 
<TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:selectable="false" 
     android:focusable="false" 
      > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left|center_vertical" 
      android:singleLine="true" 
      android:text="TIME" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="MOVE" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="GRID" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

    </TableRow> 
    <TableRow 
     android:id="@+id/tableRow2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:selectable="false" 
     android:focusable="false" 
      > 

     <TextView 
      android:id="@+id/textView31" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left|center_vertical" 
      android:singleLine="true" 
      android:text="TIME" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

     <TextView 
      android:id="@+id/textView32" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="MOVE" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

     <TextView 
      android:id="@+id/textView33" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="GRID" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      /> 

    </TableRow> 

LogCat

06-21 14:05:03.169: E/AndroidRuntime(1504): FATAL EXCEPTION: main 
06-21 14:05:03.169: E/AndroidRuntime(1504): java.lang.NullPointerException 
06-21 14:05:03.169: E/AndroidRuntime(1504):  at skripsi.slidame.PuzzleActivity.highscore(PuzzleActivity.java:280) 
06-21 14:05:03.169: E/AndroidRuntime(1504):  at skripsi.slidame.PuzzleActivity.onOptionsItemSelected(PuzzleActivity.java:143) 
06-21 14:05:03.169: E/AndroidRuntime(1504):  at android.app.Activity.onMenuItemSelected(Activity.java:2548) 

Java: 280 должен быть textView31.setText(""+timer); , когда я проверил таймер с тостами я получил значение

это думаю, я получил nullexception от textview

OnCreate метод

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //db 
     String DB_PATH= getApplicationContext().getFilesDir().getPath(); 
     highscoreDB = SQLiteDatabase.openDatabase(DB_PATH+slidameBoard.DB_NAME,null,SQLiteDatabase.CREATE_IF_NECESSARY); 
     new countleft(START_DELAY, INTERVAL); 
     //sensor 
     sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL); 
     //lebar 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut 
     wm.getDefaultDisplay().getMetrics(displayMetrics); 
     lebar = displayMetrics.widthPixels; 
     setContentView(R.layout.activity_slidame4); 
    textView31 = (TextView)findViewById(R.id.textView31); 
    textView32 = (TextView)findViewById(R.id.textView32); 
    textView33 = (TextView)findViewById(R.id.textView33); 
    textView41 = (TextView)findViewById(R.id.textView41); 
    textView42 = (TextView)findViewById(R.id.textView42); 
    textView43 = (TextView)findViewById(R.id.textView43); 
    } 

метод надуйте

AlertDialog.Builder showhighscore =new AlertDialog.Builder(this); 
      LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(R.layout.score, null);//score 
      showhighscore.setCancelable(false); 
      showhighscore.setTitle(" "); 
      showhighscore.setView(layout); 
      showhighscore.setIcon(R.drawable.menu_icon); 
      showhighscore.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        dialog.cancel(); 
        onResume(); 
       } 
      }); 
       showhighscore.show(); 
+0

разместить свой код с надуть зрения и назначение TextView кода как findviewbyId! –

+0

textview undefined – Vyacheslav

+0

Не могли бы вы выделить строку 280 PuzzleActivity, пожалуйста? Вот где ошибка. Благодаря! –

ответ

2

, вы должны инициализировать свои представления в методе onCreate, чтобы связать элементы макета с вашим действием ivity элементы:

TextView time,...; 

OnCreate

setContentView(R.layout.yourLayout); 
time = (TextView)findViewById(R.id.textView1); 
... 

EDIT Смотря ваши изменения я вижу, что вы установили contentView с R.layout.activity_slidame4, но ваш файл макета XML называется score.xml. Попробуйте:

setContentView(R.layout.score); 

вместо

setContentView(R.layout.activity_slidame4); 
0

Либо таймер имеет нулевое значение, или нет R.id.textView31. Попробуйте распечатать их перед исключением и посмотреть, какой из них дает исключение.

Edit:

Вы уверены, что R.id.textView31 существует?

если да, то попытайтесь увидеть, какое значение вы имеете в TextView:

if (textView31 != null) 
    Log.d("me", textView31.getText()); 
else 
    Log.d("me", "textview is null!!!"); 
+0

Я получил значение таймер 30, когда я использую 'log.i', я получил сообщение null, когда settext в textview, но я объявляю textview в' onCreate() ' – user2375628

+0

ответ отредактирован, попробуйте – Oleksiy