I am doing an android app which requires email verification before moving further.I have a simple edittext field where user enters their email and clicks to proceed button.On clicking to proceed button I have sent that email to server.I wish in backend the email user sends get checked first.If the email is available in the database of verified emails then the user is allowed to Proceed to next activity,else user should get some messeges that their email isn't verified.For this I did this in my android app java class
package fragment;
import android.app.Activity;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.user.timothysurvey.R;
import com.example.user.timothysurvey.activity.Introduction;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import pojo.Email;
import pojo.JSONParser;
/**
* A simple {@link Fragment} subclass.
*/
public class Ongoing extends Fragment {
Button proceed;
EditText email;
TextView surveyTitle;
String success;
private static final String url="http://192.168.0.123/survey/public/api/verifyemail";
public Ongoing() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v=inflater.inflate(R.layout.fragment_ongoing, container, false);
surveyTitle= (TextView) v.findViewById(R.id.surveyTitle);
email = (EditText) v.findViewById(R.id.email);
proceed= (Button) v.findViewById(R.id.proceed);
proceed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isConnected()) {
String emailAddress = email.getText().toString().trim();
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
if (emailAddress.matches("")) {
Toast.makeText(getContext(), "Please fill up all the fields", Toast.LENGTH_LONG).show();
} else {
if (emailAddress.matches(emailPattern)) {
new HttpAsyncTask().execute("http://192.168.0.123/survey/public/api/verifyemail");
} else
Toast.makeText(getContext(), "Invalid Email Address", Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(getContext(), "Please check your internet connection", Toast.LENGTH_LONG).show();
}
}
});
return v;
}
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", email.getText().toString()));
JSONParser jParser = new JSONParser();
JSONObject json = jParser.makeHttpRequest(url, "POST", params);
try {
success = json.getString("success");
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
if(success.equals("Email verified. Please proceed with survey"))
Toast.makeText(getContext(), "Wait For a moment", Toast.LENGTH_LONG).show();
}
}
public boolean isConnected(){
ConnectivityManager connMgr = (ConnectivityManager) getActivity().getSystemService(Activity.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
return true;
else
return false;
}
}
And this is my php code for the backend
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
// url
// :: localhost/api/verifyemail/[email protected]
// messages
// 1. No record in database
// 2. Admin has not verified your email
// 3. Email verified. Please proceed with survey
Route::get('verifyemail/{email}', function ($email) {
// first check whether user exist in database
$user = \App\SurveyUser::where('email', $email)->first();
// if user does not exist send error message
if (empty($user)) {
$user['error'] = 'No record in database';
} else {
if ($user->verified_by_admin) {
$user['success'] = 'Email verified. Please proceed with survey';
} else {
$user['error'] = 'Admin has not verified your email';
}
}
return $user;
// if exist check whether he is allowed to take survey or not
});
Route::post('verifyemail', function (Request $request) {
// check email
$email = $request->email;
$user = \App\SurveyUser::where('email', $email)->first();
if (empty($user)) {
$user['error'] = 'No record in database';
} else {
if ($user->verified_by_admin) {
$user['success'] = 'Email verified. Please proceed with survey';
} else {
$user['error'] = 'Admin has not verified your email';
}
}
return $user;
});
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
I am not getting any result from above code.Somebody Please suggest me the right way I could achieve my target.Thank you in advance
Define a global string variable :
Update HttpAsyncTask like this :
And finally create JSONParser class like this :