这里介绍一下如何让自己的Android程序具有联网功能。当然首先要有一台服务器,如果只是进行测试的话,可以使用局域网代替(手机连电脑wifi)。
要求电脑已配置好Apache+PHP环境。
下面是一个简单的Android程序,相信只要有一定的Java基础就能大概“猜懂”其中的含义。(程序可能写的不够完善)
Android程序
布局文件
<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:c android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="使用JSON解析" android:textSize="30sp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center">
MainActivity.java
package com.example.jsontest;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;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 org.Apache.http.protocol.HTTP;import org.json.JSONArray;import org.json.JSONObject;import android.os.Bundle;import android.os.Looper;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends ActionBarActivity { EditText et_id; EditText et_psw; Button btn_login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Activity_main); initView(); } private boolean check(String id, String psw) { if("".equals(id) || "".equals(psw)) return false; return true; } private void initView() { et_id = (EditText)findViewById(R.id.et_id); et_psw = (EditText)findViewById(R.id.et_psw); btn_login = (Button)findViewById(R.id.btn_login); btn_login.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //获取用户输入的用户名和密码 final String id = et_id.getText().toString().trim(); final String psw = et_psw.getText().toString().trim(); if(check(id, psw)) { new Thread() { public void run() { try { HttpPost post = new HttpPost("这里要改成服务器文件所在URL地址"); //如果传递参数个数比较多,可以对传递的参数进行封装 List params = new ArrayList(); params.add(new BasicNameValuePair("id", id)); params.add(new BasicNameValuePair("psw", psw)); //设置请求参数 post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpClient httpClient@本文9来源gao($daima.com搞@代@#码8网^搞代gaodaima码 = new DefaultHttpClient(); //发送POST请求 HttpResponse response = httpClient.execute(post); //如果服务器成功地返回响应 if(response.getStatusLine().getStatusCode() == 200) { //String msg = EntityUtils.toString(response.getEntity()); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8); StringBuilder sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); // 这里 “ + "\n" ”加不加似乎对结果没有什么影响 String line = "0"; while((line = reader.readLine()) != null) { sb.append(line + "\n"); // 这里 “ + "\n" ”加不加似乎对结果没有什么影响 } is.close(); //获取请求响应结果 String result = sb.toString(); System.out.println(result); //打包成JSON进行解析 JSONArray jsonArray = new JSONArray(result); JSONObject jsonData = null; //返回用户ID,用户密码 String userId = ""; String userPsw = ""; //使用List进行存储 List data = new ArrayList(); for(int i = 0; i < jsonArray.length(); i++) { jsonData = jsonArray.getJSONObject(i); userId = jsonData.getString("userId"); //userId是来源于服务器端php程序响应结果res的索引,根据索引获取值 userPsw = jsonData.getString("userPsw"); //userPsw是来源于服务器端php程序响应结果res的索引,根据索引获取值 data.add("用户ID:" + userId + ",用户密码:" + userPsw); //保存返回的值,可进行相应的操作,这里只进行显示 } Looper.prepare(); Toast.makeText(MainActivity.this, data.toString(), Toast.LENGTH_LONG).show(); Looper.loop(); } else { Looper.prepare(); Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show(); Looper.loop(); } } catch(Exception e) { e.printStackTrace(); } } }.start(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.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(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
而下面是一个服务器端php文件(文件内并未连接数据库的操作,如果希望的话,可以连接数据库,获取动态数据。对于php有所了解的人可以很容易的改成连接数据库获取数据的操作)
checkId.php
<?php //获取客户端发送过来的ID和密码 $id=$_POST['id']; $psw=$_POST['psw']; if($id == "admin" && $psw == "123") { $res=array(array()); $res[0]['userId']=$id; $res[0]['userPsw']=$psw; $res[1]['userId']="testId1"; $res[1]['userPsw']="testPsw1"; $res[2]['userId']="testId2"; $res[2]['userPsw']="testPsw2"; } echo json_encode($res);?>
以上就介绍了Android+PHP 使用HttpClient提交POST的请求,使用JSON解析响应,包括了gravity,Apache,Exception,索引,连接数据库方面的内容,希望对PHP教程有兴趣的朋友有所帮助。