2010-12-04 16 views
8

Soy muy nuevo en el desarrollo de aplicaciones de Android, y espero publicarlo en el lugar correcto. Estoy intentando aprender cómo hacer que el teléfono bluetooth se conecte a mi módulo bluetooth. Estoy tratando de usar el código que encontré en un libro de referencia, pero me está dando un error. Ya escribí en Java, pero me está costando entender la estructura de una aplicación de Android. De todos modos, el error que recibo es Error desconocido: java.lang.nullPointerException. ¿Me estoy olvidando de importar una biblioteca que necesito o cometí un error de empaque cuando creé el proyecto? Aquí está el código:Principiante Desarrollador: Desconocido Error: java.lang.nullPointerException

package android.app.bluetooth; 
//import java.io.InputStream; 
//import java.io.OutputStream; 
import java.util.ArrayList; 
import java.util.UUID; 
import java.io.IOException; 
import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
//import android.os.Handler; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
//import android.view.View.OnKeyListener; 
import android.widget.ArrayAdapter; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView;  
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 

public class bluetooth extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //Get the bluetooth adapter (phone) 
    configureBluetooth(); 

    //Setup ListView of discovered devices 
    setupListView(); 

    //Setup search button 
    setupSearchButton(); 

    //Setup listen button 
    setupListenButton(); 
} 

private BluetoothAdapter bluetooth; 
private BluetoothSocket socket; 
private UUID uuid = UUID.fromString("985c75a3-66ae-4b5b-9fac-894659d6f6ee"); 
private void configureBluetooth(){ 
    BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); 
    } 

//Create switchUI method that will be called once a connection is 
//established to enable views for reading and writing messages 
private ListView list; 
private void switchUI(){ 
    final TextView messageText = (TextView)findViewById(R.id.text_messages); 
    final EditText textEntry = (EditText)findViewById(R.id.text_message); 

    messageText.setVisibility(View.VISIBLE); 
    list.setVisibility(View.GONE); 
    textEntry.setEnabled(true); 
    } 

//Create server listener. Listen button will prompt user to enable discovery 
//When discovery window returns, open bluetooth socket to listen for connection  requests for discovery duration 
//Once a connection has been made, make a call to switchUI 

private static int DISCOVERY_REQUEST = 1; 
private void setupListenButton(){ 
Button listenButton = (Button)findViewById(R.id.button_listen); 
listenButton.setOnClickListener(new OnClickListener(){ 
    public void onClick(View view){ 
    Intent disc; 
    disc = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
    startActivityForResult(disc, DISCOVERY_REQUEST); 
     } 
    }); 
    } 

//Find out if user has accepted or rejected the request 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if(requestCode == DISCOVERY_REQUEST){ 
    boolean isDiscoverable = resultCode > 0; 
    if (isDiscoverable){ 
     String name = "bluetoothserver"; 
     try{ 
     final BluetoothServerSocket btserver = bluetooth.listenUsingRfcommWithServiceRecord(name, uuid); 
     AsyncTask<Integer, Void, BluetoothSocket> acceptThread = new AsyncTask<Integer, Void, BluetoothSocket>(){ 
     @Override 
     protected BluetoothSocket doInBackground(Integer ... params){ 
     try{ 
      socket = btserver.accept(params[0]*1000); 
      return socket; 
      } catch (IOException e){ 
      Log.d("BLUETOOTH", e.getMessage()); 
      } 
      return null; 
     } 
     @Override 
     protected void onPostExecute(BluetoothSocket result){ 
      if (result != null) 
      switchUI(); 
     } 
     }; 
     acceptThread.execute(resultCode); 
     } catch (IOException e){ 
     Log.d("BLUETOOTH", e.getMessage()); 
     } 
     } 
     //int discoverableDuration = resultCode; 
    } 
    } 

//Provide a means for client device to search for listening server 
private ArrayAdapter<BluetoothDevice> aa; 
private ArrayList<BluetoothDevice> foundDevices; 
private void setupListView(){ 
    aa = new ArrayAdapter<BluetoothDevice>(this, android.R.layout.simple_list_item_1, foundDevices); 
    list = (ListView)findViewById(R.id.list_discovered); 
    list.setAdapter(aa); 

    //Include onItemClickListener that will attempt to asynchronously initiate a client-side connection 
    //with the selected remote Bluetooth Device 
    //If successful, keep a reference to the socket it creates and make a call to switchUI 
    list.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> arg0, View view, int index, long arg3){ 
     AsyncTask<Integer, Void, Void> connectTask = new AsyncTask<Integer, Void, Void>(){ 
     @Override 
     protected Void doInBackground(Integer ... params){ 
     try{ 
     BluetoothDevice device = foundDevices.get(params[0]); 
     socket = device.createRfcommSocketToServiceRecord(uuid); 
     socket.connect(); 
     } catch(IOException e){ 
     Log.d("BLUETOOTH_CLIENT", e.getMessage()); 
     } 
     return null; 
     } 

     @Override 
     protected void onPostExecute(Void result){ 
     switchUI(); 
     } 
     }; 
     connectTask.execute(index); 
     } 
    }); 
    } 

//Create a broadcast receiver that listens for Bluetooth Device discovery broadcasts, 
//adds each discovered device to the array of found devices and notifies the Array Adapter 
//Discover remote bluetooth devices 
BroadcastReceiver discoveryResult = new BroadcastReceiver(){ 
@Override 
public void onReceive(Context context, Intent intent){ 
//String remoteDeviceName = intent.getStringName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); 
BluetoothDevice remoteDevice; //remote bluetooth device 
remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
if(bluetooth.getBondedDevices().contains(remoteDevice)){ 
    foundDevices.add(remoteDevice); 
    aa.notifyDataSetChanged(); 
    } 
} 
}; 

    //Register Broadcast Receiver and initiate discovery session 
    private void setupSearchButton(){ 
    Button searchButton = (Button)findViewById(R.id.button_search); 

    searchButton.setOnClickListener(new OnClickListener(){ 
     public void onClick(View view){ 
     registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 

     if (!bluetooth.isDiscovering()){ 
     foundDevices.clear(); 
     bluetooth.startDiscovery(); 
     } 
     } 
    }); 
    } 
} 

Este es el archivo de diseño:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<EditText 
android:id="@+id/text_message" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:enabled="false" 
/> 
<Button 
android:id="@+id/button_search" 
android:text="Search for listener" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_above="@id/text_message" 
/> 
<Button 
android:id="@+id/button_listen" 
android:text="Listen for connection" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_above="@id/button_search" 
/> 
<ListView 
android:id="@+id/list_discovered" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_above="@id/button_listen" 
android:layout_alignParentTop="true" 
/> 
<TextView 
android:id="@+id/text_messages" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_above="@id/button_listen" 
android:layout_alignParentTop="true" 
android:visibility="gone" 
/> 
</RelativeLayout> 

y aquí está el archivo de manifiesto:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionCode="1" 
    android:versionName="1.0" package="android.app.bluetooth"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".bluetooth" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 
<uses-permission android:name="android.permission.BLUETOOTH"/> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
</manifest> 

Como he dicho soy muy nuevo en esto de modo Me disculpo si esto no tiene mucho sentido, pero cualquier ayuda sería muy apreciada.

+4

Está publicando al lugar correcto. Más importante aún, necesitamos ver el seguimiento de la pila que da como resultado la nullPointerException. Por favor, actualice la pregunta con el seguimiento de la pila. (Si le faltaba una importación o referencia, entonces el programa no compilaría.) – cfeduke

+0

Perdóneme, pero ¿cómo hago eso? Traté de agregar Thread.dumpStack(); pero cuando intento ejecutar el programa, dice 'Tu proyecto contiene errores, por favor corrígelos antes de ejecutar tu aplicación'. – Patty

+1

agregue el volcado de error de logcat –

Respuesta

2

Pruebe a depurarlo paso a paso. De esta manera encontrará la causa de la NullPointerException. Algún campo al que acceda probablemente sea nulo. Una vez que sepa qué campo, se puede evitar que el NullPointerException dando a dicho campo un valor por defecto ..

0

borrar proyecto de espacio de trabajo y la importación de nuevo es la mejor manera de solucionar este problema (si es gato registro vacío) ..

0

Acabo de solucionar este problema en mi entorno. Tenía un recurso (código fuente) vinculado a mi proyecto. Cuando volví a abrir el proyecto en un espacio de trabajo diferente no pudo abrir los archivos.

Para deshacerse rápidamente de la excepción del puntero nulo, puede intentarlo.
Salir de Eclipse
Abra el archivo .project y elimine la sección.
Reiniciar eclipse, limpiar y compilar
Ahora puede ver el error real. Ahora puede arreglarlo en las propiedades del proyecto.

¡Buena suerte!

Créditos: http://blog.thehappydeveloper.com/?p=112

0

que era capaz de solucionar este problema:

  1. La apertura de mi archivo .project y eliminación de una entrada a una biblioteca vinculada incorrecta
  2. Al abrir el archivo y .classpath eliminar la referencia a la misma biblioteca incorrectamente vinculada que se eliminó en el paso 1
0

Revise su proyecto.prop erties dentro de la carpeta del proyecto puede tener entradas no válidas

0

Tuve el mismo problema. Era de un proyecto de biblioteca cerrado al que se hizo referencia desde mi proyecto.Así

  • clic derecho sobre el nombre del proyecto
  • clic en las propiedades
  • seleccione androide cheque parte
  • y en la biblioteca una referencia no válida.
  • y si hay un proyecto cerrado (como andcom appcompat) intente abrirlo.
1

Para mí fue un problema dependencia,

básicamente uno se incluyó proyecto dos veces. El mensaje de error como este también solo ocurrió con Android ADT Eclipse Version.

Básicamente, hubo
Proyecto A -> Needing Library B.
Pero también estaba
Proyecto A -> Necesitando dependencia C.

pero, además,
Dependencia C-> también tenían la dependencia a la Biblioteca B.

Así que la Biblioteca B estaba allí dos veces.
Esperamos que la solución es clara, que era el problema para mí :)

espero que ayude :) Saludos, Mike

0

Haga clic derecho sobre el proyecto -> propiedades -> androide -> comprobar las referencias en la ventana derecha, ver si todas las bibliotecas de referencia están presentes en el espacio de trabajo y ninguna está cerrada

3

En mi caso, tenía que ver con el hecho de que tenía una referencia a un proyecto no utilizado, appcompat_v7 (esta es una biblioteca de compatibilidad para barra de acción para trabajar en Android más antiguo).

Cómo lo resolví:

hace clic derecho en el proyecto, Propiedades, en la ficha de Android, referencia extraído de la biblioteca.

Eliminado todos los proyectos en el Explorador de paquetes (no los eliminó del disco).

Entonces me importan mi proyecto de nuevo, como esto:

clic derecho, Importación, Proyectos existentes en el área de trabajo, seleccione la carpeta del proyecto.

Luego lo reconstruí, y hubo algunos errores, algunos recursos faltantes en los archivos de styles.xml.

Eliminé los archivos styles.xml, ya que no los necesitaba.

He eliminado esta entrada desde AndroidManifest.xml: android: theme = "@ estilo/AppTheme".

Cuestiones relacionadas