Получение ответа JSON с сервера после отправки данных в андроид студию - PullRequest
0 голосов
/ 02 ноября 2018

Я зарегистрировался и использую Async taks для отправки сведений о пользователе на сервер. Я хочу получить ответ от сервера, если регистрация прошла успешно или нет.

Вот код для моего async task

class backgroundTask_register_activity extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... voids) {

        String url = "http://13.232.207.9/php/register.php";

        final List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        parameters.add(new BasicNameValuePair("user_id",user_id));
        parameters.add(new BasicNameValuePair("user_fullname",reg_user_fullname.getText().toString()));
        parameters.add(new BasicNameValuePair("user_name",reg_user_name.getText().toString()));
        parameters.add(new BasicNameValuePair("user_email",reg_user_email.getText().toString()));
        parameters.add(new BasicNameValuePair("user_mobile",reg_user_mobile.getText().toString()));
        parameters.add(new BasicNameValuePair("user_city",reg_user_city.getText().toString()));
        parameters.add(new BasicNameValuePair("user_password",reg_user_password.getText().toString()));
        parameters.add(new BasicNameValuePair("user_dob",DOB_textView.getText().toString()));
        parameters.add(new BasicNameValuePair("user_gender",reg_user_gender));

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);

        try {
            httppost.setEntity(new UrlEncodedFormEntity(parameters));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            if(entity != null){
                Toast toast = Toast.makeText(getApplicationContext(),EntityUtils.toString(entity),Toast.LENGTH_SHORT);
                toast.show();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Ответ от php: {"success":1,"Message":"User added successfully"}

Так что я хочу отобразить тост-уведомление для того же. Какие изменения я должен сделать, чтобы получить ответ?

Но мой код принудительно закрывает приложение:

он в журнале ошибок:

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.prasaurus.app.psa_b2c_app, PID: 10201
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:309)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:200)
        at android.os.Handler.<init>(Handler.java:114)
        at android.widget.Toast$TN.<init>(Toast.java:356)
        at android.widget.Toast.<init>(Toast.java:101)
        at android.widget.Toast.makeText(Toast.java:266)
        at com.prasaurus.app.psa_b2c_app.RegisterActivity$backgroundTask_register_activity.doInBackground(RegisterActivity.java:145)
        at com.prasaurus.app.psa_b2c_app.RegisterActivity$backgroundTask_register_activity.doInBackground(RegisterActivity.java:119)
        at android.os.AsyncTask$2.call(AsyncTask.java:295)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
        at java.lang.Thread.run(Thread.java:818) 

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Вы должны добавить следующие вещи в свой блок try.

 try {
            httppost.setEntity(new UrlEncodedFormEntity(parameters));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            if(entity != null){
               Toast toast = Toast.makeText(getApplicationContext(),EntityUtils.toString(entity),Toast.LENGTH_SHORT);
               toast.show();
            }
      }

Вы можете использовать Toast.LENGTH_LONG для длинных гренок.

0 голосов
/ 02 ноября 2018

Добавить тост с ответом с сервера,

 try {
            httppost.setEntity(new UrlEncodedFormEntity(parameters));
            HttpResponse response = httpclient.execute(httppost);
        Toast.makeText(getApplicationContext(),"Response: "+response ,Toast.LENGTH_SHORT).show();


        }
0 голосов
/ 02 ноября 2018

После HttpResponse response = httpclient.execute(httppost) и перед вашими catch операторами проанализируйте необходимую вам часть ответа Json, запишите ее в строковую переменную и создайте Toast, передав эту переменную в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...