2010-12-04 2 views
8

Я очень новичок в разработке приложений для Android, и я надеюсь, что разместил это в нужном месте. Я пытаюсь узнать, как подключить Bluetooth-модуль к модулю Bluetooth. Я пытаюсь использовать код, который я нашел в справочнике, но он дает мне ошибку. Ранее я писал в java, но мне трудно понять структуру приложения для Android. В любом случае ошибка, которую я получаю, - Неизвестная ошибка: java.lang.nullPointerException. Может быть, я забыл импортировать библиотеку, которая мне нужна, или я сделал ошибку упаковки, когда я создал проект? Вот код:Новичок Разработчик: Неизвестно Ошибка: 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(); 
     } 
     } 
    }); 
    } 
} 

Это файл макета:

<?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> 

и вот файл манифеста:

<?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> 

Как я сказал, что я очень новичок в этом так Прошу прощения, если это не имеет большого смысла, но любая помощь будет очень признательна.

+4

Вы отправляете в нужное место. Что еще более важно, нам нужно увидеть трассировку стека, которая приведет к исключению nullPointerException. Обновите вопрос с помощью трассировки стека. (Если вам не хватает импорта или ссылки, программа не будет компилироваться.) – cfeduke 2010-12-04 03:23:14

ответ

2

Попробуйте отладить его шаг за шагом. Таким образом вы обнаружите причину исключения NullPointerException. Некоторое доступное поле, вероятно, будет null. После того, как вы знаете, какое поле, вы можете предотвратить NullPointerException, давая при этом упомянутое поле значение по умолчанию ..

0

удаление проекта из рабочей области и импортировать его снова лучший способ это исправить (если журнал кот пуст) ..

0

Просто исправлена ​​эта проблема в моей среде. У меня был ресурс (исходный код), связанный с моим проектом. Когда я снова открыл проект в другом рабочем пространстве, он не смог открыть файлы.

Чтобы быстро избавиться от исключения нулевого указателя, вы можете попробовать это.
Exit Eclipse
Открыть файл .project и удалить раздел.
Перезапустить затмение, очистить и построить
Теперь вы можете увидеть фактическую ошибку. Теперь вы можете исправить его в свойствах проекта.

Удачи!

Кредиты: http://blog.thehappydeveloper.com/?p=112

0

я был в состоянии исправить это:

  1. Открытие до моего файла .project и удаление записи в неправильной подключенной библиотеки
  2. Открытие файла .classpath и удаление ссылки на ту же неправильно связанную библиотеку, которая была удалена на этапе 1
0

проверить ваш проект.prop в вашей папке проекта могут иметь недопустимые записи

0

У меня была та же проблема. Это был проект закрытой библиотеки, на который ссылался мой проект. Так

  • правой кнопкой мыши на имени проекта
  • нажмите на свойства
  • выбрать андроида
  • и в части проверки библиотеки для недопустимого ссылки.
  • и если есть закрытый проект (например, андроида appcompat), попробуйте его открыть.
1

Для меня это была проблема зависимость,

в основном один проект был включен в два раза. Сообщение об ошибке вроде этого также произошло только с Android ADT Eclipse Version.

В основном, было
Проект A -> Библиотека, необходимая для использования в B.
Но также было
Проект A -> Необходимая зависимость C.

Но Кроме того,
Зависимость C-> также была зависимость в библиотеку B.

Так что библиотека B была там два раза.
Надежда раствор прозрачна, это было проблемой для меня :)

Надеется, что это помогает :) Приветствия, Майк

0

правой кнопке мыши на проекте -> Свойства -> Android -> Проверки ссылок в правом окне посмотреть, присутствуют ли все библиотеки в рабочей области, и никто не закрыт.

3

В моем случае это связано с тем, что у меня была ссылка на неиспользуемый проект appcompat_v7 (это библиотека совместимости для панель действий для работы над старым андроидом).

Как я ее решил:

правые нажал на проект, Свойство, на вкладке Android, снятую ссылка на библиотеку.

Удалены все проекты в Проводнике пакетов (они не удаляли их с диска).

Тогда я импортировал мой проект обратно, как это:

правой кнопкой мыши, импорт, существующие проекты в WorkSpace, выберите папку проекта.

Затем я перестроил его, и были некоторые ошибки, некоторые недостающие ресурсы в файлах styles.xml.

Я удалил файлы styles.xml, так как они мне не нужны.

Я удалил эту запись с androidmanifest.xml: android: theme = "@ style/AppTheme".

Смежные вопросы