2012-09-26 83 views
1

我寫了一個類似於android中的聯繫人的應用程序。當我點擊它們時,我從一個數據庫中獲取信息並顯示在另一個視圖中。但是當我在列表視圖中單擊其中一個名稱時,我會看到一個空白屏幕(模擬器恍惚) 。請幫助,我是android編程的新手。所有的建議表示歡迎傳遞意圖值並從SQLite數據庫檢索數據

謝謝

public class Contacts extends Activity implements OnClickListener { 
    int NewContact_Request_Code = 1; 
    Button newcontact; 
    ListView listview; 
    public static final String LOG_TAG = "Contacts"; 
    int mInt = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contactview); 
     // Set the content to contactview.xml 

     // newcontact = NEW CONTACT button 
     // listview = MyList List View 
     newcontact = (Button) findViewById(R.id.baddcontact); 
     listview = (ListView) findViewById(R.id.mylist); 

     // Make a New Database 
     DBContact info = new DBContact(this); 
     // Open , get Information from database and close it 
     info.open(); 
     String[] data = info.queryAll(); 
     info.close(); 
     // listview = getListView(); 
     listview.setTextFilterEnabled(true); 
     // Display the names 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(Contacts.this, 
       android.R.layout.simple_list_item_1, data); 
     listview.setAdapter(adapter); 
     listview.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView adapterView, View view, 
        int position, long id) { 

       String nameclicked = adapterView.getItemAtPosition(position) 
         .toString(); 
       Intent viewintent = new Intent(Contacts.this, ViewContact.class); 
       viewintent.putExtra("name_clicked", nameclicked); 
       startActivity(viewintent); 

      } 
     }); 
     newcontact.setOnClickListener(this); 

    } 

    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Intent newintent = new Intent(Contacts.this, AddNewContact.class); 
     // start actiivity for result - to get the name of the new contact 
     startActivityForResult(newintent, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     // pass the value of the string via cursor and update the list 
    } 

} 

ViewCOntact.class

public class ViewContact extends Activity implements OnClickListener { 
    Button ViewPPhone, ViewHPhone, ViewOPhone, EditContact; 
    TextView ViewName; 
    TextView ViewPersonalPhone; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewcontact); 
     Bundle extras = getIntent().getExtras(); 
     String name = extras.getString("name_clicked"); 
     Long l = Long.parseLong(name); 
     DBContact getdetails = new DBContact(this); 
     getdetails.open(); 
     String returnedname = getdetails.getName(l); 
     String returnedpphone = getdetails.getPphone(l); 
     String returnedhphone = getdetails.getHphone(l); 
     String returnedophone = getdetails.getOphone(l); 
     getdetails.close(); 
     ViewName.setText(returnedname); 
     ViewPPhone.setText(returnedpphone); 
     ViewHPhone.setText(returnedhphone); 
     ViewOPhone.setText(returnedophone); 

     EditContact = (Button) findViewById(R.id.bEditContact); 
     EditContact.setOnClickListener(this); 
     ViewPPhone = (Button) findViewById(R.id.ViewPersonalPhoneNumber); 
     ViewPPhone.setOnClickListener(this); 
     ViewHPhone = (Button) findViewById(R.id.ViewHomePhoneNumber); 
     ViewHPhone.setOnClickListener(this); 
     ViewOPhone = (Button) findViewById(R.id.ViewOfficePhoneNumber); 
     ViewOPhone.setOnClickListener(this); 

    } 

    public void onClick(View view) { 
     // TODO Auto-generated method stub 
     switch (view.getId()) { 
     case R.id.ViewPersonalPhoneNumber: 
      Intent dialpersonalphone = new 
      Intent(android.content.Intent.ACTION_DIAL, 
      Uri.parse("returnedpphone")); 
      startActivity(dialpersonalphone); 
      break; 

     case R.id.ViewHomePhoneNumber: 
      Intent dialhome = new 
      Intent(android.content.Intent.ACTION_DIAL, 
      Uri.parse("returnedhphone")); 
      startActivity(dialhome); 
      break; 

     case R.id.ViewOfficePhoneNumber: 
      Intent dialoffice = new 
      Intent(android.content.Intent.ACTION_DIAL, 
      Uri.parse("returnedophone")); 
      startActivity(dialoffice); 
      break; 

     case R.id.bEditContact: 
      startActivity(new Intent("com.example.contactlist.EDITCONTACT")); 
      break; 
     } 
    } 

} 

logcat的

09-26 02:52:11.527: W/dalvikvm(1605): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
09-26 02:52:11.558: E/AndroidRuntime(1605): FATAL EXCEPTION: main 
09-26 02:52:11.558: E/AndroidRuntime(1605): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contactlist/com.example.contactlist.ViewContact}: java.lang.NumberFormatException: Invalid long: "" 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.os.Looper.loop(Looper.java:137) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at dalvik.system.NativeStart.main(Native Method) 
09-26 02:52:11.558: E/AndroidRuntime(1605): Caused by: java.lang.NumberFormatException: Invalid long: "" 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at java.lang.Long.invalidLong(Long.java:125) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at java.lang.Long.parseLong(Long.java:346) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at java.lang.Long.parseLong(Long.java:319) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at com.example.contactlist.ViewContact.onCreate(ViewContact.java:24) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.Activity.performCreate(Activity.java:5008) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
09-26 02:52:11.558: E/AndroidRuntime(1605):  ... 11 more 

數據庫類

public class DBContact { 

    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "Name"; 
    public static final String KEY_PERSONALPHONE = "Personalnumber"; 
    public static final String KEY_HOMEPHONE = "Homenumber"; 
    public static final String KEY_OFFICEPHONE = "Officenumber"; 

    private static final String DATABASE_NAME = "Contacts"; 
    private static final String DATABASE_TABLE = "ContactList"; 
    private static final int DATABASE_VERSION = 1; 

    // Instance of the class DbHelper 
    private DbHelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 

    public static final String[] KEYS_ALL = { DBContact.KEY_ROWID, 
      DBContact.KEY_NAME, DBContact.KEY_PERSONALPHONE, 
      DBContact.KEY_HOMEPHONE, DBContact.KEY_OFFICEPHONE }; 

    private static class DbHelper extends SQLiteOpenHelper { 

     private static final String DATABASE_CREATE = "create table ContactList (_id integer primary key autoincrement, " 
       + "Name text not null, Personalnumber text not null, Homenumber text not null, Officenumber text not null); "; 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onCreate(SQLiteDatabase ourDatabase) { 
      // TODO Auto-generated method stub 
      try { 
       ourDatabase.execSQL(DATABASE_CREATE); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     }   

     @Override 
     public void onUpgrade(SQLiteDatabase ourDatabase, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      ourDatabase.execSQL("DROP TABLE IF EXISTS ContactList"); 
      onCreate(ourDatabase); 

     } 

    } 

    // Context of constructor withhin our Class 
    public DBContact(Context c) { 
     ourContext = c; 
    } 

    // Opens the database 
    public DBContact open() throws SQLException { 
     // Constructor for DB Helper class takes in a Context 
     // Context is passed in is "ourContext" for within our class 

     ourHelper = new DbHelper(ourContext); 
     // Passes in DB Name and Version 
     // ourDatabase is of type SQLite DataBase 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

    // Closes the database connection 
    public void close() { 
     // refer to our DbHelper and close the SQLite DataBase Helper 
     ourHelper.close(); 
     ourHelper = null; 
     ourDatabase = null; 
    } 

    // Deletes the Row 
    public boolean deleteRow(long rowId) { 
     return ourDatabase.delete(DATABASE_TABLE, DBContact.KEY_ROWID + "=" 
       + rowId, null) > 0; 
    } 

    public String[] queryAll() { 
     String[] columns = new String[] { KEY_NAME }; 
     Cursor cursor = ourDatabase.query(DATABASE_TABLE, columns, null, null, 
       null, null, null); 
     if (cursor != null) { 
      try { 
     final int nameColumnIndex = cursor.getColumnIndex(KEY_NAME); 
     List<String> names = new ArrayList<String>(); 
     cursor.moveToFirst(); 
     while (cursor.moveToNext()) { 
      names.add(cursor.getString(nameColumnIndex)); 
     } 
     return names.toArray(new String[names.size()]); 
    } finally { 
     cursor.close(); 
    } 
     } 
     return null; 
     //return columns; 

    } 

    /*public Cursor queryAll(){ 
    String[] columns = new String[] {KEY_NAME}; 
     return ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
    if(data == null){ 
     columns[0] = "NO CONTACTS PRESENT"; 
     return columns; 
    }else{ 
     return columns; 
    } 


    }*/ 


    public long newRow(String name, String pphone, String hphone, String ophone) { 
     // TODO Auto-generated method stub 
     ContentValues newvalue = new ContentValues(); 
     newvalue.put(KEY_NAME, name); 
     newvalue.put(KEY_PERSONALPHONE, pphone); 
     newvalue.put(KEY_HOMEPHONE, hphone); 
     newvalue.put(KEY_OFFICEPHONE, ophone); 
     return ourDatabase.insert(DATABASE_TABLE, null, newvalue); 

    } 



    public String getName(Long l) { 
     // TODO Auto-generated method stub 
     String[] columns = new String[] { KEY_ROWID, KEY_NAME, 
       KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
       + 1, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
      String name = c.getString(1); 
      return name; 
     } 
     return null; 
    } 

    public String getPphone(Long l) { 
     // TODO Auto-generated method stub 
     String[] columns = new String[] { KEY_ROWID, KEY_NAME, 
       KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
       + 1, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
      String Pphone = c.getString(2); 
      return Pphone; 

     } 
     return null; 
    } 

    public String getHphone(Long l) { 
     // TODO Auto-generated method stub 
     String[] columns = new String[] { KEY_ROWID, KEY_NAME, 
       KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
       + 1, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
      String Hphone = c.getString(3); 
      return Hphone; 

     } 
     return null; 
    } 

    public String getOphone(Long l) { 
     // TODO Auto-generated method stub 
     String[] columns = new String[] { KEY_ROWID, KEY_NAME, 
       KEY_PERSONALPHONE, KEY_HOMEPHONE, KEY_OFFICEPHONE }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" 
       + 1, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
      String Ophone = c.getString(4); 
      return Ophone; 

     } 
     return null; 
    } 
} 
+1

請不要用大寫的第一個字母來命名變量 – njzk2

+0

好的。我會改變他們。我很新,所以我對大部分東西都很無知 – chitranna

+0

你能看到ViewContact活動中的按鈕嗎? –

回答

0
Long l = Long.parseLong(name); 

的問題..

String nameclicked = adapterView.getItemAtPosition(position) 
        .toString(); 

這裏nameclicked是一個字符串

你發送一個字符串值,並試圖將它解析爲數字格式。 所以我可以知道你爲什麼解析nameClicked?

+0

當我在列表視圖中單擊一個名稱時,我在該數據庫中爲該名稱提取數據並在另一個xml視圖中顯示它,就像在聯繫人應用程序中一樣在電話中,所以我必須通過這個名稱作爲參數 – chitranna

+0

我想說你的小事在你的聯繫人類中你顯示字符串項目作爲列表視圖,然後你得到特定的字符串在項目點擊在你的ViewContact類你的字符串值和解析到長,這是不允許的。 你明白我想說什麼嗎? –

+0

是的。但是,那麼我如何從數據庫中獲取信息以查看該聯繫人的詳細信息以及名稱 – chitranna