2014-02-26 31 views
0

我有这样的代码来获得的EditText值和查询数据库查询数据库基本Android的 - 上的EditText

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 line 70:String _origem = o.getText().toString();

+0

请发布'MainActivity'类代码 –

+0

发布MainActivity – Galion

+0

您能发布您的activity_main布局文件吗? – Giacomoni

回答

0

的问题是,你试图让(你setContentView提供布局内未声明)的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。这意味着R.id. txtorigem不属于当前视图层次