Ответ: неправильно. [Регистрация пользователя через приложение для Android с использованием http сообщения не работает]

Я смог успешно заставить логин работать. Теперь я застрял с регистрацией. Ответ неверный.

public class Register extends Activity implements OnClickListener{

    private String mTitle = "Write.My.Action";

    private static final String LOGTAG = "tag";
    public EditText fullname, email, password;
    private Button register; 
    private ProgressDialog mDialog; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        getActionBar().setTitle(mTitle);

        fullname = (EditText) findViewById(R.id.fullname);
        email = (EditText) findViewById(R.id.editText2);
        password = (EditText) findViewById(R.id.editText1);

        register = (Button) findViewById(R.id.button1);

        register.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            mDialog = new ProgressDialog(Register.this);
            mDialog.setMessage("Attempting to Register...");
            mDialog.setIndeterminate(false);
            mDialog.setCancelable(false);
            mDialog.show();
            new Thread(new Runnable() {

                @Override
                public void run() {
                    register();

                }
            }).start();
        }

    }

     void register() {
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("myurl");

            System.out.println("httpPost is: " + httpPost);

            String fullname_input = fullname.getText().toString().trim();
            String email_input = email.getText().toString().trim();
            String password_input = password.getText().toString().trim();

            //adding data into list view so we can make post over the server

            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            nameValuePair.add(new BasicNameValuePair("fullname",  fullname_input));
            nameValuePair.add(new BasicNameValuePair("email",  email_input));
            nameValuePair.add(new BasicNameValuePair("password",  password_input));

            System.out.println("namevaluepair is: " + nameValuePair);
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

            //execute http post resquest

            HttpResponse httpResponse = httpClient.execute(httpPost);



            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            final String response = httpClient.execute(httpPost, responseHandler);

            System.out.println("Response is: " + response);

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    mDialog.dismiss();

                }
            });
            if(response.equalsIgnoreCase("Signed Up")){
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        startActivity(new Intent(Register.this, Registration_Success.class));

                    }
                });
            }else {
                showAlert();
            }

        } catch (Exception e) {
            mDialog.dismiss();
            Log.i(LOGTAG, "Exception found"+ e.getMessage());
        }

    }
     public void showAlert(){
         Register.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                AlertDialog.Builder builder = new AlertDialog.Builder(Register.this);
                builder.setTitle("Registration Error");
                builder.setMessage("Please, try registration again!")
                        .setCancelable(false)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                AlertDialog alert = builder.create();
                alert.show();

            }
        });
     }
}

Обратите внимание: все действия регистрируются в манифесте, включая разрешение на доступ в Интернет.

php файл:

include "dbconnection.php";

$fullname = $_POST['fullname'];
$email = $_POST['email'];
$password = $_POST['password'];

$insert_data = "INSERT INTO register
    Values ('', '$fullname', '$email', '$password')";

$insert_result = mysql_query($insert_data);
//echo "Signed Up";

if($insert_result){
echo "Signed Up";
}
else{
 echo "wrong!";
} 

Я не понимаю, почему он продолжает говорить, что ответ: неправильно. Надоело тратить почти день.. Я здесь, чтобы получить помощь. Извините, если мои вопросы кажутся наивными. Заранее спасибо.

5 ответов

Попробуйте использовать залп, если нет. Это быстрее, чем обычные классы HTTP-соединений. Пример:

RequestQueue queue = Volley.newRequestQueue(this);
    String url = "url";
       JSONObject juser = new JSONObject();     
       try {                   
                juser.put("locationId", locID);
                juser.put("email",  email_input);
                juser.put("password",  password_input);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, juser, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            // TODO Auto-generated method stub
            txtDisplay.setText("Response => "+response.toString());
            findViewById(R.id.progressBar1).setVisibility(View.GONE);
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO Auto-generated method stub

        }
    });

    queue.add(jsObjRequest);

Как @ Andrew T предложил, я публикую свое решение. mysql_error() помог мне отладить проблему. mysql_error() отображается в Logcat, что "таблица регистров не найдена".. но имя таблицы - регистры. Мне не хватало "s" в конце.

    $fullname = $_POST['fullname'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    $insert_data = "INSERT INTO registers(id, fullname, email, password)
        Values ('','$fullname', '$email', '$password')";

    $insert_result = mysql_query($insert_data) or die(mysql_error());
    //echo "Signed Up";

    if($insert_result){
    echo "Signed Up";
    }
    else{
     echo "wrong!";
    } 

После этого все работало идеально. Еще раз спасибо всем за ваше время и решения. Все предложения велики, но я не могу принять никакого ответа на данный момент.. извините:(

Попробуйте ниже код:-

                HttpResponse httpResponse = httpClient.execute(httpPost);

                if (httpResponse != null)
                {
                    InputStream in = httpResponse.getEntity().getContent();
                    result = ConvertStreamToString.convertStreamToString(in);
                    // System.out.println("result =>" + result);
                }

метод convertStreamToString

public String convertStreamToString(InputStream is) 
{
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    try
    {
        while ((line = reader.readLine()) != null) 
        {
            sb.append(line + "\n");
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    finally 
    {
        try 
        {
            is.close();
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

не понимают:-

 HttpResponse httpResponse = httpClient.execute(httpPost); // getting response from server 

// where you use this response and why using below line or whats the benefit of below line

                    ResponseHandler<String> responseHandler = new BasicResponseHandler();
                    final String response = httpClient.execute(httpPost, responseHandler);

Попробуйте этот код, используя AsyncTask

public class Register extends Activity implements OnClickListener{

    private String mTitle = "Write.My.Action";

    private static final String LOGTAG = "tag";
    public EditText fullname, email, password;
    private Button register; 
    private ProgressDialog mDialog; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        getActionBar().setTitle(mTitle);

        fullname = (EditText) findViewById(R.id.fullname);
        email = (EditText) findViewById(R.id.editText2);
        password = (EditText) findViewById(R.id.editText1);

        register = (Button) findViewById(R.id.button1);

        register.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            mDialog = new ProgressDialog(Register.this);
            mDialog.setMessage("Attempting to Register...");
            mDialog.setIndeterminate(false);
            mDialog.setCancelable(false);
            mDialog.show();

            new RegisterUser().execute();
        }

    }

    public class RegisterUser extends AsyncTask<Void, Void, String>
    {

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub

            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("myurl");

            System.out.println("httpPost is: " + httpPost);

            String fullname_input = fullname.getText().toString().trim();
            String email_input = email.getText().toString().trim();
            String password_input = password.getText().toString().trim();

            //adding data into list view so we can make post over the server

            List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            nameValuePair.add(new BasicNameValuePair("fullname",  fullname_input));
            nameValuePair.add(new BasicNameValuePair("email",  email_input));
            nameValuePair.add(new BasicNameValuePair("password",  password_input));

            System.out.println("namevaluepair is: " + nameValuePair);
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

            //execute http post resquest

            HttpResponse httpResponse = httpClient.execute(httpPost);



            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            final String response = httpClient.execute(httpPost, responseHandler);

            System.out.println("Response is: " + response);

            return response;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

             if(response.equalsIgnoreCase("Signed Up")){
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            startActivity(new Intent(Register.this, Registration_Success.class));

                        }
                    });
                }else {
                    showAlert();
                }
        }

    }

     public void showAlert(){
         Register.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                AlertDialog.Builder builder = new AlertDialog.Builder(Register.this);
                builder.setTitle("Registration Error");
                builder.setMessage("Please, try registration again!")
                        .setCancelable(false)
                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                AlertDialog alert = builder.create();
                alert.show();

            }
        });
     }
}

Надеюсь, это поможет вам!

Если это не работает, пожалуйста, дайте мне знать, я постараюсь помочь больше...

Следуйте этому руководству очень полезно, и понять, как работать на веб-сервисах JSON с Android.

Как подключить Android с PHP, MySQL

Другие вопросы по тегам