在项目中实现注册登录有很多种方式,一般对于初学者来说,不使用框架,采用http的post和get请求后台服务器,是一种更好理解底层源码的方式。使用框架实现注册登录虽然比自己封装post和get请求后台方便,但是不利于我们更好地理解其中的原理和机制。
实现的步骤大致分为以下几点:
1. 创建HttpPost对象,并将服务器接口地址url设置好。
2. 利用NameValuePair类设置相关参数,并将NameValuePair放入到list集合中。
3. 发起post请求获取返回实例HttpResponse。
4. 使用EntityUtils对返回值的实体进行处理(可以取得返回的字符串,也可以取得返回的byte数组),一般在服务器返回的都是json字符串。
注意事项:
1.在主线程中不能直接访问网络,要开辟子线程。
2.在子线程中不能直接更新ui。
MainActivity:
package wujie.com.myapplication11; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private String url="http://192.168.1.101:8080/SHproject/homepage/register";//服务器接口地址 private EditText name,pwd;//用户名和密码 private Button submit;//提交按钮 private TextView result;//服务器返回结果 //Handler用于接收服务端返回的数据更新ui private Handler hanlder=new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case 0: String qq= (String) msg.obj; result.setText("服务器返回: " + qq); break; } super.handleMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化数据 name= (EditText) findViewById(R.id.name); pwd= (EditText) findViewById(R.id.pwd); submit= (Button) findViewById(R.id.submit); result= (TextView) findViewById(R.id.result); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * 开辟一个子线程访问网络,否则会抛出异常 */ new Thread() { @Override public void run() { String name1=name.getText().toString().trim(); String pwd1=pwd.getText().toString().trim(); NameValuePair pair1 = new BasicNameValuePair("name", name1); NameValuePair pair2 = new BasicNameValuePair("password", pwd1); List<NameValuePair> pairList = new ArrayList<NameValuePair>(); pairList.add(pair1); pairList.add(pair2); try { HttpEntity requestHttpEntity = new UrlEncodedFormEntity( pairList); // URl是接口地址 HttpPost httpPost = new HttpPost(url); // 将请求体内容加入请求中 httpPost.setEntity(requestHttpEntity); // 需要客户端对象来发送请求 HttpClient httpClient = new DefaultHttpClient(); // 发送请求 HttpResponse response = httpClient.execute(httpPost); // 显示响应 showResponseResult(response); } catch (Exception e) { e.printStackTrace(); } } }.start(); } }); } /** * 显示响应结果到命令行和TextView * @param response */ private void showResponseResult(HttpResponse response) { if (null == response) { return; } HttpEntity httpEntity = response.getEntity(); try { InputStream inputStream = httpEntity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); String result1 = ""; String line = ""; while (null != (line = reader.readLine())) { result1 += line; } System.out.println(result1); /** * 把服务器返回的结果 发送到hanlder中,在子线程中是不允许更新ui的 */ hanlder.obtainMessage(0,result1).sendToTarget(); } catch (Exception e) { e.printStackTrace(); } } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="wujie.com.myapplication11.MainActivity" android:orientation="vertical"> <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" /> <EditText android:id="@+id/pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/submit" android:text="提交"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/result" android:textColor="#ff0000" android:textSize="20sp" android:paddingTop="18dp"/> </LinearLayout>
运行截图:
网络权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好代码网。