0

Hello guys i am developing an Rechargeapp refrence first activity reference like this

but given only one field for registering by mobile number

but i a getting errors

my error is blow

FATAL EXCEPTION: main
 Process: com.example.com.sms_sending, PID: 2036
 java.lang.NullPointerException: Attempt to invoke virtual method 'void   com.example.com.sms_sending.app.MyApplication.addToRequestQueue(com.android.volley.Request)' on a null object reference
 at com.example.com.sms_sending.activity.SmsActivity.requestForSMS(SmsActivity.java:217)
 at com.example.com.sms_sending.activity.SmsActivity.validateForm(SmsActivity.java:139)
 at com.example.com.sms_sending.activity.SmsActivity.onClick(SmsActivity.java:107)
 at android.view.View.performClick(View.java:4780)
 at android.view.View$PerformClick.run(View.java:19866)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:135)
 at android.app.ActivityThread.main(ActivityThread.java:5254)
 at java.lang.reflect.Method.invoke(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:372)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

SMSActivity

public class SmsActivity extends AppCompatActivity implements View.OnClickListener{
private static String TAG = SmsActivity.class.getSimpleName();
private ViewPager viewPager;
private ViewPagerAdapter adapter;
private Button btnRequestSms, btnVerifyOtp;
private EditText inputName, inputEmail, inputMobile, inputOtp;
private ProgressBar progressBar;
private MyApplication newapp;
private PrefManager pref;
private ImageButton btnEditMobile;
private TextView txtEditMobile;
private LinearLayout layoutEditMobile;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sms);
    viewPager = (ViewPager) findViewById(R.id.viewPagerVertical);
    inputMobile = (EditText) findViewById(R.id.inputMobile);
    inputOtp = (EditText) findViewById(R.id.inputOtp);
    btnRequestSms = (Button) findViewById(R.id.btn_request_sms);
    btnVerifyOtp = (Button) findViewById(R.id.btn_verify_otp);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    btnEditMobile = (ImageButton) findViewById(R.id.btn_edit_mobile);
    txtEditMobile = (TextView) findViewById(R.id.txt_edit_mobile);
    layoutEditMobile = (LinearLayout) findViewById(R.id.layout_edit_mobile);
            // view click listeners
    btnEditMobile.setOnClickListener(this);
    btnRequestSms.setOnClickListener(this);
    btnVerifyOtp.setOnClickListener(this);
             // hiding the edit mobile number
    layoutEditMobile.setVisibility(View.GONE);
    pref = new PrefManager(this);
    if (pref.isLoggedIn()) {
        Intent intent = new Intent(SmsActivity.this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    }
    adapter = new ViewPagerAdapter();
    viewPager.setAdapter(adapter);
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
        @Override
        public void onPageSelected(int position) {
        }
        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });
    /**
     * Checking if the device is waiting for sms
     * showing the user OTP screen
     */
    if (pref.isWaitingForSms()) {
        viewPager.setCurrentItem(1);
        layoutEditMobile.setVisibility(View.VISIBLE);
    }
}
@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_request_sms:
            validateForm();////333333 error
            break;
        case R.id.btn_verify_otp:
            verifyOtp();
            break;
        case R.id.btn_edit_mobile:
            viewPager.setCurrentItem(0);
            layoutEditMobile.setVisibility(View.GONE);
            pref.setIsWaitingForSms(false);
            break;
    }
}
/**
 * Validating user details form
 */
private void validateForm() {
    String mobile = inputMobile.getText().toString().trim();
    if (isValidPhoneNumber(mobile)) {
        // request for sms
        progressBar.setVisibility(View.VISIBLE);
        // saving the mobile number in shared preferences
        pref.setMobileNumber(mobile);
        // requesting for sms
        requestForSMS(mobile); /////22222222222 error
    } else {
        Toast.makeText(getApplicationContext(), "Please enter valid mobile number", Toast.LENGTH_SHORT).show();
    }
}
/**
 * Method initiates the SMS request on the server
 *
 * @param mobile user valid mobile number
 */
private void requestForSMS(final String mobile) {
    StringRequest strReq = new StringRequest(Request.Method.POST,
            config.Config.URL_REQUEST_SMS, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, response.toString());
            try {
                JSONObject responseObj = new JSONObject(response);
                boolean error = responseObj.getBoolean("error");
                String message = responseObj.getString("message");
                if (!error) {
                    pref.setIsWaitingForSms(true);
                    viewPager.setCurrentItem(1);
                    txtEditMobile.setText(pref.getMobileNumber());
                    layoutEditMobile.setVisibility(View.VISIBLE);
                    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(),
                            "Error: " + message,
                            Toast.LENGTH_LONG).show();
                }
                // hiding the progress bar
                progressBar.setVisibility(View.GONE);
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),
                        "Error: " + e.getMessage(),
                        Toast.LENGTH_LONG).show();
                progressBar.setVisibility(View.GONE);
            }
            Toast.makeText(getApplicationContext(),"Hello Here is Problem"+response,Toast.LENGTH_LONG).show();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();
            progressBar.setVisibility(View.GONE);
        }
    }) {
        /**
         * Passing user parameters to our server
         * @return
         */
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("key","xxxxxxxxxxxxx");
            params.put("mobile", mobile);
            Log.e(TAG, "Posting params: " + params.toString());
            return params;
        }
    };
    int socketTimeout = 60000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    strReq.setRetryPolicy(policy);

    // Adding request to request queue
  newapp.getInstance().addToRequestQueue(strReq); /////// 11111111111
}

/**
 * sending the OTP to server and activating the user
 */
private void verifyOtp() {
    String otp = inputOtp.getText().toString().trim();

    if (!otp.isEmpty()) {
        Intent grapprIntent = new Intent(getApplicationContext(), HttpService.class);
        grapprIntent.putExtra("otp", otp);
        startService(grapprIntent);
    } else {
        Toast.makeText(getApplicationContext(), "Please enter the OTP", Toast.LENGTH_SHORT).show();
    }
}

/**
 * Regex to validate the mobile number
 * mobile number should be of 10 digits length
 *
 * @param mobile
 * @return
 */
private static boolean isValidPhoneNumber(String mobile) {
    String regEx = "^[0-9]{10}$";
    return mobile.matches(regEx);
}


class ViewPagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((View) object);
    }

    public Object instantiateItem(View collection, int position) {

        int resId = 0;
        switch (position) {
            case 0:
                resId = R.id.layout_sms;
                break;
            case 1:
                resId = R.id.layout_otp;
                break;
        }
        return findViewById(resId);
    }
  }
 }

RequestQueue

public class MyApplication extends Application {

    public static final String TAG = MyApplication.class
            .getSimpleName();

    private RequestQueue mRequestQueue;

    private static MyApplication mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized MyApplication getInstance() {
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
  }

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.com.sms_sending">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".activity.SmsActivity"
        android:label="@string/title_activity_sms"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".activity.MainActivity"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize"
        />
    <!-- SMS Receiver -->
    <receiver android:name=".receiver.SmsReceiver">
        <intent-filter android:priority="99999">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>


    <!-- Intent service -->
    <service
        android:name=".services.HttpService"
        android:exported="false" />


</application>

Please help me i am tried 4 days

2 Answers2

1

Open build.gradle located under app folder and add volley library dependency by adding

com.mcxiaoke.volley:library-aar:1.0.0

.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.android.support:appcompat-v7:22.1.1"
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}
Android
  • 535
  • 5
  • 16
0

As in log:

NullPointerException: Attempt to invoke virtual method 'void
com.example.com.sms_sending.app.MyApplication.addToRequestQueue(com.android.volley.Request)' on a null object reference

means getInstance() method return null due to MyApplication class is not used by system as Application class.

In AndroidManifest.xml not adding MyApplication with name attribute. do it as:

<application
    android:name=".MyApplication" 
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
   .....
ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213