0

Dear All,

I'm developed an application that can read incoming messages. Upto now all its fine, Now my app crashing sometimes and return NullPointerException. Please find my error log below.

java.lang.RuntimeException: Unable to start receiver me.radhakrishna.buddyreader.TextMessageReceiver: java.lang.NullPointerException
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2146)
at android.app.ActivityThread.access$1500(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at me.radhakrishna.buddyreader.MainActivity.stopReading(MainActivity.java:81)
at me.radhakrishna.buddyreader.TextMessageReceiver.onReceive(TextMessageReceiver.java:59)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2139)
... 10 more

Follow my manifest file as well.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.radhakrishna.buddyreader"
    android:versionCode="14"
    android:versionName="1.2.2" >

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="me.radhakrishna.buddyreader.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="me.radhakrishna.buddyreader.MessageActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="me.radhakrishna.buddyreader.PreferActivity"
            android:label="@string/app_name" >
        </activity>
        <receiver android:name="me.radhakrishna.buddyreader.TextMessageReceiver" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

my TextMessageReceiver file.

package me.radhakrishna.buddyreader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.PhoneLookup;
import android.telephony.SmsMessage;

public class TextMessageReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){

        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            String val="";
            FileInputStream fileos;
            try {
                fileos = context.getApplicationContext().openFileInput("startup");
                byte[] input = new byte[fileos.available()];
                while(fileos.read(input) != -1){
                    val += new String(input);
                }
                if(val.equals("ON")){
                    Intent myIntent = new Intent(context, MainActivity.class);
                    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(myIntent);
                }
                fileos.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        Bundle bundle=intent.getExtras();
        Object[] messages=(Object[])bundle.get("pdus");
        SmsMessage[] sms=new SmsMessage[messages.length];

        for(int n=0;n<messages.length;n++){
            sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]);
        }

        for(SmsMessage msg:sms){
            final String mobileNum = msg.getOriginatingAddress();
            Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(mobileNum));           
            Cursor cursor= context.getContentResolver().query(uri, new String[]{PhoneLookup.DISPLAY_NAME},null,null,null);

            final MainActivity main = new MainActivity();
            main.stopReading();
            main.setSpeechSpeed();
            String messageFormat = "Message from "+mobileNum+". Message: "+msg.getMessageBody();
            FileOutputStream fos;
            try {
                fos = context.getApplicationContext().openFileOutput("lastmessage",Context.MODE_PRIVATE);
                fos.write(messageFormat.toString().getBytes());
                fos.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (cursor.getCount()>0){
                cursor.moveToFirst();
                String contactName = cursor.getString(0);
                cursor.close();

                String enteredText = "Excuse me sir, You got a message from "+contactName+". Message, "+msg.getMessageBody();
                String words = enteredText.toString();
                main.speakWords(words);
            }else{
                String enteredText = "Excuse me sir, You got a message from "+mobileNum+". Message, "+msg.getMessageBody();
                String words = enteredText.toString();
                main.speakWords(words);
            }
        }
    }
}

Guys please help me. Thanks in advance

2
Contributors
1
Reply
15
Views
5 Years
Discussion Span
Last Post by peter_budo
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.