Android 在数据库上注册用户
Android sign up user on database
我已获得注册 api 以使用将用户注册到后端
不过好像没有work.Needhelp.Thanks.
下面是注册api后面是代码
Params : username, email, pwd(password), cname(公司名), cmobile(公司手机号), cwebsite(公司网站), cfbaddress(公司fb地址), cbssid(公司bssid)
Link
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 :
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.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)
NameValuePairs 和 HttpClients 已弃用。并且您不能在主线程中执行网络操作。要执行 post 请求,您可以使用以下代码。
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();
}
}
现在您只需从 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);
}
请post logcat.It 可能是由于“NetworkOnMainThreadException”。因为在您的代码中,网络操作是从主线程执行的。
我已获得注册 api 以使用将用户注册到后端 不过好像没有work.Needhelp.Thanks.
下面是注册api后面是代码
Params : username, email, pwd(password), cname(公司名), cmobile(公司手机号), cwebsite(公司网站), cfbaddress(公司fb地址), cbssid(公司bssid) Link
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 :
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.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)
NameValuePairs 和 HttpClients 已弃用。并且您不能在主线程中执行网络操作。要执行 post 请求,您可以使用以下代码。
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();
}
}
现在您只需从 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);
}
请post logcat.It 可能是由于“NetworkOnMainThreadException”。因为在您的代码中,网络操作是从主线程执行的。