2014-02-26 6 views
0

내가이 글고에서 값을 얻을 코드 및 쿼리 데이터베이스가에 쿼리 데이터베이스 기본안드로이드 - 글고

는 MainActivity :

public class MainActivity extends Activity { 

private ArrayList<String> results = new ArrayList<String>(); 
private String tableName = "horarios"; 
private SQLiteDatabase newDB; 
Button bt_search; 
private ListView lv; 

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

    TestAdapter mDbHelper = new TestAdapter(getBaseContext()); 
    mDbHelper.createDatabase(); 
    bt_search = (Button)findViewById(R.id.btnsearch); 
    bt_search.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      setContentView(R.layout.activity_main); 
      openAndQueryDatabase(); 
      displayResultList(); 
     } 
    }); 



} 
public void back(View v) { 

setContentView(R.layout.main); 

} 

private void displayResultList() { 
    lv = (ListView) findViewById(R.id.list); 


    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
      this, 
      android.R.layout.simple_list_item_1, 
      results); 

    lv.setAdapter(arrayAdapter); 

} 

private void openAndQueryDatabase() { 
    try { 
     EditText o = (EditText)findViewById(R.id.txtorigem); 
     EditText d = (EditText)findViewById(R.id.txtdestino); 
     String _origem = o.getText().toString(); 
     String _destino = d.getText().toString(); 
     DBHelper dbHelper = new DBHelper(this.getApplicationContext()); 
     newDB = dbHelper.getWritableDatabase(); 
     Cursor c = newDB.rawQuery("SELECT origem, destino, hora FROM " + tableName +" WHERE origem='"+_origem+"' and destino='"+_destino+"'", null); 

     if (c != null) { 
      if (c.moveToFirst()) { 
       do { 
        String origem = c.getString(c.getColumnIndex("origem")); 
        String destino = c.getString(c.getColumnIndex("destino")); 
        String hora = c.getString(c.getColumnIndex("hora")); 
        results.add("Origem: " + origem + ", Destino: " + destino +" - Hora: "+hora); 
       }while (c.moveToNext()); 
      } 
     }   
    } catch (SQLiteException se) { 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
    } finally { 
     if (newDB != null) 
      newDB.close(); 
    } 
} 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<ListView 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/btn_back" > 
</ListView> 

<Button 
    android:id="@+id/btn_back" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:text="Retroceder" 
    android:onClick="back" /> 

</RelativeLayout> 

메신저 노력 쿼리 데이터베이스를 기반으로 두 EditText의 가치에,하지만 뭔가 잘못하고있어 :

02-26 06:30:31.626: E/AndroidRuntime(14068): FATAL EXCEPTION: main 
02-26 06:30:31.626: E/AndroidRuntime(14068): Process: com.example.app.arr, PID: 14068 
02-26 06:30:31.626: E/AndroidRuntime(14068): java.lang.NullPointerException 
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity.openAndQueryDatabase(MainActivity.java:70) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity.access$0(MainActivity.java:66) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.example.app.arr.MainActivity$1.onClick(MainActivity.java:39) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.view.View.performClick(View.java:4438) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.view.View$PerformClick.run(View.java:18422) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Handler.handleCallback(Handler.java:733) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Handler.dispatchMessage(Handler.java:95) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.os.Looper.loop(Looper.java:136) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at java.lang.reflect.Method.invokeNative(Native Method) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at java.lang.reflect.Method.invoke(Method.java:515) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-26 06:30:31.626: E/AndroidRuntime(14068): at dalvik.system.NativeStart.main(Native Method) 

나는이 오류가 EditText에서 가치를 얻으려고 시도하지만 해결책을 찾아 내지 못한다는 것을 깨달았습니다. MainActivity 줄 70 : String _origem = o.getText().toString();

+0

'MainActivity' 클래스 코드를 게시하십시오. –

+0

MainActivity 게시 됨 – Galion

+0

activity_main 레이아웃 파일을 게시 할 수 있습니까? – Giacomoni

답변

0

문제는 당신이 얻을하려고하는 것입니다 (당신이 setContentView 제공 레이아웃 내에서 선언되지 않음) R.id. txtorigem 현재 뷰 계층에 속하는하지 않는 의미 txtorigemtxtdestino,하지만 당신은 setContentView(R.layout.activity_main);를 사용하고 있는지하기 전에, EditTexts이 없습니다. main 레이아웃에 txtorigemtxtdestino이 포함되어 있다고 가정하고 setContentView 앞에 openAndQueryDatabase();을 호출하십시오.

bt_search.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     openAndQueryDatabase(); 
     setContentView(R.layout.activity_main); 
     displayResultList(); 
    } 
}); 

희망 하시겠습니까?

+0

으로 게시되었습니다. 감사합니다. "setContentView (R.layout.activity_main);" "displayResultList()"도 시작됩니다. – Galion

0

getText()은 null을 반환하지 않으므로 findViewById는 null을 반환합니다. 즉,