2013-05-03 119 views
0

我已經下載了BLE示例,並且想編輯代碼。從Edittext中獲取文本

我在代碼中添加了一個編輯文本來發送數字,而不是原始代碼中的字符串「Praveen」,但是我的Galaxy S4甚至無法打開應用程序。該應用程序運行良好,沒有改變。

以下是我爲代碼所作的更改。註釋行來自原始代碼,下面的代碼行是我所做的更改。

預先感謝

public static EditText Oe; 

//public static String dummyName = "Praveen"; 
    public static String str = Oe.getText().toString(); 

public void sendAlert(BluetoothDevice device) { 
    Log.d(TAG, "sendAlert"); 
    byte[] value = null; 
    byte cat = (byte) callCategory; 
    byte cnt = (byte) dummyCount; 

    try { 
     // String s = dummyName; 
     String s = str; 
     value = s.getBytes("UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    byte[] attVal = new byte[value.length + 2]; 

    attVal[0] = cat; 
    attVal[1] = cnt; 
    for (int i = 0; i < value.length; i++) 
     attVal[i + 2] = value[i]; 

    mNewAlert.setValue(attVal); 
    mBluetoothGattServer.notifyCharacteristicChanged(device, mNewAlert, false); 

} 

爲EDITTEXT

<EditText 
    android:id="@+id/Oe" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:text="@string/Oe"/> 

的XML我已經在OnCreate

public void onCreate() { 

    Log.d(TAG, "onCreate() called"); 
    if (mBtAdapter == null) { 
     mBtAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if (mBtAdapter == null) { 
      Log.i(TAG, "adapter is null"); 
      return; 
     } 
    } 

    if (mBluetoothGattServer == null) { 
     Log.i(TAG, "mBluetoothGattServer::null"); 
     Log.i(TAG, "getting proxy::"); 
     BluetoothGattAdapter.getProfileProxy(this, mProfileServiceListener,  BluetoothGattAdapter.GATT_SERVER); 
    } 

    mSMSMMSObserver = new BluetoothSMSMMSContentObserver(); 
    mCallObserver = new CallContentObserver(); 
    getContentResolver().registerContentObserver(Uri.parse("content://mms-sms"), true, mSMSMMSObserver); 
    getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mCallObserver); 

    Oe = (EditText)findViewById(R.id.Oe); 
} 

Mainactivity部分所限定的EDITTEXT

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btn_select: 
     if (!mBluetoothAdapter.isEnabled()) { 
      Log.i(TAG, "onClick - BT not enabled yet"); 
      Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(enableIntent, REQUEST_ENABLE_BT); 

       case R.id.button_send_alert: 
       Log.e("MainActivity", "Clicked"); 
       if (mService != null) 
        mService.sendAlert(mDevice); 
+0

「我的Galaxy S4甚至無法打開應用程序」 - 您可以附加相關的logcat和/或控制檯日誌嗎? – 2013-05-03 23:48:48

+0

嗨,愛德華。你到底意味着什麼? – 2013-05-04 00:24:25

+1

^他意味着請顯示您獲得的錯誤行。 – 2013-05-04 00:25:32

回答

0

這個錯誤似乎是你沒有定義應該從哪個EditText得到文本?假設你EditText如下:

<EditText 
    android:id="@+id/name" /> 

如果你想從它那裏得到的文本,如下得到它:

public static EditText Oe; 
Oe = (EditText)findViewById(R.id.name); //You are missing this one. It defines which EditText you wish to refer to. 
public static String str = Oe.getText().toString(); 

希望它可以幫助別人請評論。您還可以結帳this答案更多。

+0

感謝您的回覆。我在OnCreate之後編寫了這個部分,並且出現了這個錯誤「ANPServerService類型的方法findViewById(int)未定義」 – 2013-05-04 00:23:54

+0

什麼是ANPServerService?您是否根據您的xml文件更改了findViewById(ID)上的ID?如果您發佈了您擁有的EditText和完整的LogCat,將會很有幫助。 – 2013-05-04 00:27:35

+0

ANPServerService是公共類。我已經用上面的代碼更新了我的評論。 – 2013-05-04 00:49:19

0

所以,這是你的問題..你還沒有引用您的編輯文本

,這是問題,但反過來引用不能在你說的具體點進行。

實際上,整件事寫得無法比擬。基本上你想要做的是從onclick()方法中的編輯文本中獲取字符串。

看到這裏,在你的onclick方法的情況下,你調用sendAlert()方法,修改它,當你讀這個。

case R.id.button_send_alert: 
     Log.e("MainActivity", "Clicked"); 
     if (mService != null) 
      mService.sendAlert(mDevice); 

1.在您如果在您檢查MSERVICE變量爲null方法,聲明編輯文本,引用它。

EditText Oe = (EditText)findViewById(R.id.name); 

2.現在,更改最後一行。

mService.sendAlert(mDevice , Oe.getText().toString());

3.你幾乎沒有,在這裏你碰到一個錯誤的方法請將SendAlert只包含一個參數。

修改sendAlert方法,如下所示。

public void sendAlert(BluetoothDevice device , String s) { 
Log.d(TAG, "sendAlert"); 
byte[] value = null; 
byte cat = (byte) callCategory; 
byte cnt = (byte) dummyCount; 

try { 
    // Using the string that's passed to it. 
    value = s.getBytes("UTF-8"); 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 
byte[] attVal = new byte[value.length + 2]; 

attVal[0] = cat; 
attVal[1] = cnt; 
for (int i = 0; i < value.length; i++) 
    attVal[i + 2] = value[i]; 

mNewAlert.setValue(attVal); 
mBluetoothGattServer.notifyCharacteristicChanged(device, mNewAlert, false); 

}

一切都應該去,因爲現在的計劃..一定要注意它的變化以後會有所幫助。知道你的代碼。