简体   繁体   English

Android在数据库上注册用户

[英]Android sign up user on database

I have been given a registration api to use signup a user onto the backend But it does not seem to work.Need help.Thanks. 我已经获得了一个注册api,用于在后端使用用户注册,但是它似乎不起作用。需要帮助。谢谢。

Following is the registration api followed by the code 以下是注册api和代码

Params : username, email, pwd(password), cname(company name), cmobile(company mobile number), cwebsite(company website), cfbaddress( company's fb address), cbssid(company's bssid) Link 参数:用户名,电子邮件,pwd(密码),cname(公司名称),cmobile(公司手机号码),cwebsite(公司网站),cfbaddress(公司的fb地址),cbssid(公司的bssid) 链接

public class MainActivity extends AppCompatActivity {

EditText inUsername,inEmail,inPassword,inCompanyName,inCompanyWeb,inCompanyPh,inCompanyFb,inBSSid;
TextView txt;
Button btnSignup;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    inUsername=(EditText)findViewById(R.id.input_user);
    inEmail=(EditText)findViewById(R.id.input_email_user);
    inCompanyPh=(EditText)findViewById(R.id.input_company_phone_number);
    inPassword=(EditText)findViewById(R.id.input_password_user);
    inCompanyName=(EditText)findViewById(R.id.input_company_name);
    inCompanyFb=(EditText)findViewById(R.id.input_company_fb_address);
    inBSSid=(EditText)findViewById(R.id.input_company_bssid);
    inCompanyWeb=(EditText)findViewById(R.id.input_company_website);
    txt=(TextView)findViewById(R.id.txt_response);
    btnSignup=(Button)findViewById(R.id.btn_signup_user);

    inUsername.setText("mega");
    inEmail.setText("megasu08@gmail.com");

    inPassword.setText("password");
    inCompanyName.setText("ttd");

    inCompanyWeb.setText("<website address as given>");
    inCompanyPh.setText("7896325410");

    inCompanyFb.setText("<fb address as given>");
    inBSSid.setText("48f8b3aa05c5");


    btnSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InputStream inputStream = null;
            String result = "";

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://52.74.103.52/pages/create_user_using_app");


            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

                nameValuePairs.add(new BasicNameValuePair("username", inUsername.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("email", inEmail.getText().toString()));

                nameValuePairs.add(new BasicNameValuePair("pwd", inPassword.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("cname", inCompanyName.getText().toString()));

                nameValuePairs.add(new BasicNameValuePair("cwebsite", inCompanyWeb.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("cmobile", inCompanyPh.getText().toString()));

                nameValuePairs.add(new BasicNameValuePair("cfbaddress", inCompanyFb.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("cbssid", inBSSid.getText().toString()));

                httppost.setHeader("Accept", "application/json");
                httppost.setHeader("Content-type", "application/json");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                Log.d("ERROR", httppost.getEntity().toString());
                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);

                inputStream = response.getEntity().getContent();

                // 10. convert inputstream to string
                if (inputStream != null)
                    result = convertInputStreamToString(inputStream);
                else
                    result = "Did not work!";

                Log.d("ERROR",inputStream.toString());
                Log.d("ERROR",result.toString());

                txt.setText(result);

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }

        }
    });



}
private String convertInputStreamToString(InputStream inputStream) throws IOException{
    BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
    String line = "";
    String result = "";
    while((line = bufferedReader.readLine()) != null)
        result += line;

    inputStream.close();
    return result;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

} }

LogCat : LogCat:

android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
        at libcore.io.IoBridge.connect(IoBridge.java:122)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
        at java.net.Socket.connect(Socket.java:882)
        at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:124)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:149)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
        at com.example.anupamchugh.restraunt.MainActivity$1.onClick(MainActivity.java:100)
        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)

请发布logcat。这可能是由于' NetworkOnMainThreadException '。由于在您的代码中,网络操作是从主线程执行的。

NameValuePairs and HttpClients are deprecated. 不建议使用NameValuePairs和HttpClients。 And you cannot perform networking operation in main thread. 并且您无法在主线程中执行联网操作。 For performing a post request you can use the following code. 为了执行发布请求,您可以使用以下代码。

public class RegisterUserClass {

public String sendPostRequest(String requestURL,
                               HashMap<String, String> postDataParams) {

    URL url;
    String response = "";
    try {
        url = new URL(requestURL);

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(getPostDataString(postDataParams));

        writer.flush();
        writer.close();
        os.close();
        int responseCode=conn.getResponseCode();

        if (responseCode == HttpsURLConnection.HTTP_OK) {
            BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            response = br.readLine();
        }
        else {
            response="Error Registering";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return response;
}

private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
    StringBuilder result = new StringBuilder();
    boolean first = true;
    for(Map.Entry<String, String> entry : params.entrySet()){
        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
    }

    return result.toString();
}
}

Now you just call the sendPostRequest method from an AsyncTask 现在,您只需从AsyncTask调用sendPostRequest方法

private void register(String name, String username, String password, String email) {
    class RegisterUser extends AsyncTask<String, Void, String>{
        ProgressDialog loading;
        RegisterUserClass ruc = new RegisterUserClass();


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this, "Please Wait",null, true, true);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
        }

        @Override
        protected String doInBackground(String... params) {

            HashMap<String, String> data = new HashMap<String,String>();
            data.put("name",params[0]);
            data.put("username",params[1]);
            data.put("password",params[2]);
            data.put("email",params[3]);

            String result = ruc.sendPostRequest(REGISTER_URL,data);

            return  result;
        }
    }

    RegisterUser ru = new RegisterUser();
    ru.execute(name,username,password,email);
}

Source: Visit For Detailed Explanation 来源:请访问以获取详细说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM