2016-08-02 95 views
-3

我想从一个活动发送一个字符串从数字EditText到另一个。但是当我点击保存我的apk崩溃。这里是代码和logcat。Android发送字符串时崩溃

设置

public class settings extends Activity { 

    Button btnSave; 
    TextView text; 

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

     btnSave = (Button)findViewById(R.id.save); 
     final EditText passkey = (EditText)findViewById(R.id.editText); 
     text=(TextView)findViewById(R.id.textView3); 


     btnSave.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String pass = passkey.getText().toString(); 

       Intent myIntent = new Intent(settings.this, unlock.class); 
       myIntent.putExtra("String", pass); 
       startActivity(myIntent); 
      } 
     }); 
    } 
} 

解锁

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_unlock); 

     String newString; 
     if (savedInstanceState == null) { 
      Bundle extras = getIntent().getExtras(); 
      if(extras == null) { 
       newString= null; 
      } else { 
       newString= extras.getString("String"); 
      } 
     } else { 
      newString= (String) savedInstanceState.getSerializable("String"); 
     } 

的onResume()方法。

@Override 
    public void onResume() { 
     super.onResume(); 

     Intent intent = getIntent(); 

     address = intent.getStringExtra(DeviceList.EXTRA_ADDRESS); 

     BluetoothDevice device = btAdapter.getRemoteDevice(address); 

     try { 
      btSocket = createBluetoothSocket(device); 
     } catch (IOException e) { 
      Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_LONG).show(); 
     } 
     try 
     { 
      btSocket.connect(); 
     } catch (IOException e) { 
      try 
      { 
       btSocket.close(); 
      } catch (IOException e2) 
      { 
       // 
      } 
     } 
     mConnectedThread = new ConnectedThread(btSocket); 
     mConnectedThread.start(); 

     mConnectedThread.write("x"); 
    } 

设备列表

public class DeviceList extends AppCompatActivity { 

    Button btnPaired; 
    ListView devicelist; 
    private BluetoothAdapter myBluetooth = null; 
    private Set<BluetoothDevice> pairedDevices; 
    public static String EXTRA_ADDRESS = "device_address"; 

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

     btnPaired = (Button)findViewById(R.id.button); 
     devicelist = (ListView)findViewById(R.id.listView); 

     myBluetooth = BluetoothAdapter.getDefaultAdapter(); 
     if(myBluetooth == null) 
     { 

      Toast.makeText(getApplicationContext(), "Bluetooth Device Not Available", Toast.LENGTH_LONG).show(); 

      finish(); 
     } 
     else 
     { 
      if (myBluetooth.isEnabled()) 
      { } 
      else 
      { 

       Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
       startActivityForResult(turnBTon,1); 
      } 
     } 
     btnPaired.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       pairedDevicesList(); 
      } 
     }); 
    } 

    private void pairedDevicesList() 
    { 
     pairedDevices = myBluetooth.getBondedDevices(); 
     ArrayList list = new ArrayList(); 

     if (pairedDevices.size()>0) 
     { 
      for(BluetoothDevice bt : pairedDevices) 
      { 
       list.add(bt.getName() + "\n" + bt.getAddress()); 
      } 
     } 
     else 
     { 
      Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show(); 
     } 

     final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list); 
     devicelist.setAdapter(adapter); 
     devicelist.setOnItemClickListener(myListClickListener); 
    } 
    private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener() 
    { 
     public void onItemClick (AdapterView av, View v, int arg2, long arg3) 
     { 
      String info = ((TextView) v).getText().toString(); 
      String address = info.substring(info.length() - 17); 

      Intent i = new Intent(DeviceList.this, unlock.class); 

      i.putExtra(EXTRA_ADDRESS, address); 
      startActivity(i); 
     } 
    }; 

} 





  
+0

显示你的'onResume()'? –

+0

我发布了它,我希望它可以帮助 –

+0

你在做什么onResume(); –

回答

0

现在正在发生的事情,你是从two positionsdifferent values一个与device address和一个与edit text值开Single class

所以当你传递editext值设备地址为空,你的应用程序崩溃来处理这个添加验证。 if(address != null)然后连接,否则不。

@Override 
    public void onResume() { 
     super.onResume(); 

     Intent intent = getIntent(); 
     address = intent.getStringExtra(DeviceList.EXTRA_ADDRESS); 

     if(address != null){ 
     BluetoothDevice device = btAdapter.getRemoteDevice(address); 

     try { 
      btSocket = createBluetoothSocket(device); 
     } catch (IOException e) { 
      Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_LONG).show(); 
     } 
     try 
     { 
      btSocket.connect(); 
     } catch (IOException e) { 
      try 
      { 
       btSocket.close(); 
      } catch (IOException e2) 
      { 
      } 
     } 
     mConnectedThread = new ConnectedThread(btSocket); 
     mConnectedThread.start(); 
     mConnectedThread.write("x"); 
    } 
} 
+0

它现在的作品!谢谢 –

+0

@ H.Stefek欢迎您接下来提供完整的info.happy编码 –

+0

现在,当我从设置返回解锁时,无论我按哪个按钮,它都会崩溃 –

-1

您需要使用此行:

newString =extras.getString("String", null); 

,而不是这一行:

newString= extras.getString("String"); 
+0

仍然同样崩溃 –

0

onResume()你正在做

Intent intent = getIntent(); 

     address = intent.getStringExtra(DeviceList.EXTRA_ADDRESS); 

     BluetoothDevice device = btAdapter.getRemoteDevice(address); 

你什么时候通过了关键的意图DeviceList.EXTRA_ADDRESS,这里是问题。之后,您将通过该空地址找到remoteDevice。

+0

你解释日志以及解决方案? –

+0

我有3个活动,4个,但一个是加载屏幕,不计算它,一个是设备列表,它发现arduino蓝牙设备,并连接到它,然后打开解锁活动 –

+0

引起:java.lang.IllegalArgumentException:null不是一个有效的蓝牙地址。 – Aditi