@Cpper

Почему приложение вылетает с ошибкой?

При вызове функции macsave приложение вылетает с ошибкой. Помогите пожалуйста. Не могу понять почему.
P.s. я начинающий
package com.example.steshenko.blueterm;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.sql.Struct;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_ENABLE_BT = 1;
    public String macadress = "macadress.txt";
    public EditText name;
    public String mac;
    public String named;
    private String fileName = "macadress.txt";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
        if (bluetooth == null) {
            finish();
        }
        if (!bluetooth.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        }
        InputStream inputStream = null;
        try {
            inputStream = openFileInput(fileName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        if (inputStream != null) {
            InputStreamReader isr = new InputStreamReader(inputStream);
            BufferedReader reader = new BufferedReader(isr);
            String line;
            StringBuilder builder = new StringBuilder();

            try {
                while ((line = reader.readLine()) != null) {
                    builder.append(line + "\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            name.setText(builder.toString());
        }
    }


    public void macsave (View view) {
        BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
        name = (EditText) findViewById(R.id.name);
        named = name.getText().toString();
        Set<BluetoothDevice> pairedDevices = bluetooth.getBondedDevices();

        if (pairedDevices.size() > 0) {
            // There are paired devices. Get the name and address of each paired device.
            for (BluetoothDevice device : pairedDevices) {
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress(); // MAC address
                if(deviceName == named){
                    mac = deviceHardwareAddress;
                }
            }
        }
        OutputStream outputStream = null;
        try {
            outputStream = openFileOutput(fileName, 0);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        OutputStreamWriter osw = new OutputStreamWriter(outputStream);
        try {
            osw.write(mac);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            osw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        name.setText(mac.toString());
    }

}
  • Вопрос задан
  • 614 просмотров
Решения вопроса 2
AlexMarken
@AlexMarken
Скинь лог (Logcat) ошибки.

UPD:
Cpper, посмотрел Ваш код. К сожалению, у меня на Genymotion нет Bluetooth, чтобы проверить.
Меня насторожили эти строчки в методе macsave:
OutputStream outputStream = null;
        try {
            outputStream = openFileOutput(fileName, 0);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        OutputStreamWriter osw = new OutputStreamWriter(outputStream);


1:
Для того, чтобы открыть файл в режиме Write, требуется соответствующее разрешение в Manifest. Это касается выполнения outputStream = openFileOutput(fileName, 0).
Далее...Раз у Вас нет разрешения на выполнение записи данных, outputStream останется NULL. В этом случае, при создании потока записи данных "new OutputStreamWriter(outputStream)", приложение выдаст ошибку (outputStream является NULL).

2:
Убедитесь, что открываемый файл существует ("macadress.txt"). В противном случае, его необходимо создать (требуются права на WRITE).

3:
Ещё один момент, неверно указан путь до файла. Если файл лежит в папке приложения, путь указывается следующий: "//data//data//НАЗВАНИЕ ПАКЕТА//macadress.txt".
Ответ написан
@stoptalking
непонятно что именно вы делаете для того, чтобы получить возврат. Если просто запустить и нажать "сохранить устройство", то это Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference в строке osw.write(mac);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Cpper Автор вопроса
Всем большое спасибо! Ошибка решилась, все имена и мак адреса приложение показывает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы