2013-09-27 20 views
-1

我試圖根據用戶的活動獲取聯繫電話號碼(已選中)。如何解決這個問題?強制關閉並且不能獲得輸出! 我讀過很多教程,但這對我沒有多大幫助!強制關閉並沒有得到輸出

package com.example.c_p; 


    import java.util.Iterator; 
    import java.util.Set; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.database.Cursor; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.provider.ContactsContract.CommonDataKinds.Phone; 
    import android.provider.ContactsContract.Contacts; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.EditText; 
    import android.widget.Toast; 

    public class MainActivity extends Activity { 
     private static final int CONTACT_PICKER_RESULT = 1001; 
    public static final String DEBUG_TAG = null; 
     EditText emailEntry = (EditText) findViewById(R.id.invite_email); 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 
     public void doLaunchContactPicker(View view) 
     { 
     Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
       Contacts.CONTENT_URI); 
     startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
    } 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
      if (resultCode == RESULT_OK) { 
       switch (requestCode) 
       { 
       case CONTACT_PICKER_RESULT: 
        Cursor cursor = null; 
        String phone = ""; 
        try { 
         Bundle extras = data.getExtras(); 
         Set<String> keys = extras.keySet(); 
         Iterator<String> iterate = keys.iterator(); 
         while (iterate.hasNext()) { 
          String key = iterate.next(); 
          Log.v(DEBUG_TAG, key + "[" + extras.get(key) + "]"); 
         } 

         Uri result = data.getData(); 
         Log.v(DEBUG_TAG, "Got a contact result: " 
           + result.toString()); 

         // get the contact id from the Uri 
         String id = result.getLastPathSegment(); 


         cursor = getContentResolver().query(Phone.CONTENT_URI, 
           null, Phone.CONTACT_ID + "=?", new String[] { id }, 
           null); 

         int PhoneIdx = cursor.getColumnIndex(Phone.DATA); 


         if (cursor.moveToFirst()) { 
             phone = cursor.getString(PhoneIdx); 

          Log.v(DEBUG_TAG, "Got number: " + phone); 

         } else { 
          Log.w(DEBUG_TAG, "No results"); 
         } 
        } catch (Exception e) { 
         Log.e(DEBUG_TAG, "Failed to Number", e); 
        } 
        finally { 
         if (cursor != null) { 
          cursor.close(); 
         } 

         emailEntry.setText(phone); 

         if (phone.length() == 0) { 
          Toast.makeText(this, "No number found for contact.", 
            Toast.LENGTH_LONG).show(); 
         } 

        } 

        break; 
       } 

      } else { 
       Log.w(DEBUG_TAG, "Warning: activity result not ok"); 
      } 
     } 
    } 

回答

2

你有這樣的

EditText emailEntry = (EditText) findViewById(R.id.invite_email); 

onCreate。你會得到NullPointeException

更改爲

private EditText emailEntry; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    emailEntry = (EditText) findViewById(R.id.invite_email); 
} 

findViewById查找與當前膨脹的佈局id的視圖。您需要首先將內容設置爲活動,然後初始化onCreate

+0

對我來說,他真的很喜歡[RoboGuice](https://github.com/roboguice/roboguice)圖書館 – tolgap

+1

@tolgap我在標籤或問題中沒有看到與robospice有關的任何內容。確定你在正確的帖子上發佈了評論。 – Raghunandan

+0

你可以在RoboGuice(而不是RoboSpice)中使用依賴注入,並在你的'onCreate()'之外使用一種類似的語法。我也不是說他必須使用它。這只是一個建議。 – tolgap

1

視圖此行會給你一個錯誤

EditText emailEntry = (EditText) findViewById(R.id.invite_email); 

你不能嘗試設置內容之前初始化View。初始化之後setContentView()像下面

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

    // not until here 
    emailEntry = (EditText) findViewById(R.id.invite_email); 

由於您的瀏覽你的佈局存在,你無法找到他們與findViewById(),直到你有一個吹氣或膨脹的setContentView佈局()。

+0

是的,先生,它幫助了我! –