這裡介紹如何讓自己的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/<strong>Activity</strong>_vertical_margin" android:paddingLeft="@dimen/<strong>Activity</strong>_horizontal_margin" android:paddingRight="@dimen/<strong>Activity</strong>_horizontal_margin" android:paddingTop="@dimen/<strong>Activity</strong>_vertical_margin" tools:c android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:<strong>gravity</strong>="center" android:text="使用JSON解析" android:textSize="30sp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:<strong>gravity</strong>="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="账号" android:textSize="20sp" android:layout_marginRight="20dp" /> <EditText android:id="@+id/et_id" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:<strong>gravity</strong>="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="密码" android:textSize="20sp" android:layout_marginRight="20dp" /> <EditText android:id="@+id/et_psw" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> <Button android:id="@+id/btn_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录"/> </LinearLayout>
連接資料庫
,取得動態資料。 phppackage 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.<strong>Apache</strong>.http.HttpEntity;
import org.<strong>Apache</strong>.http.HttpResponse;
import org.<strong>Apache</strong>.http.NameValuePair;
import org.<strong>Apache</strong>.http.client.HttpClient;
import org.<strong>Apache</strong>.http.client.entity.UrlEncodedFormEntity;
import org.<strong>Apache</strong>.http.client.methods.HttpPost;
import org.<strong>Apache</strong>.http.impl.client.DefaultHttpClient;
import org.<strong>Apache</strong>.http.message.BasicNameValuePair;
import org.<strong>Apache</strong>.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.Bundle;
import android.os.Looper;
import android.support.v7.app.ActionBar<strong>Activity</strong>;
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 Main<strong>Activity</strong> extends ActionBar<strong>Activity</strong> {
EditText et_id;
EditText et_psw;
Button btn_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.<strong>Activity</strong>_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<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", id));
params.add(new BasicNameValuePair("psw", psw));
//设置请求参数
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpClient httpClient = 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<String> data = new ArrayList<String>();
for(int i = 0; i < jsonArray.length(); i++) {
jsonData = jsonArray.getJSONObject(i);
userId = jsonData.getString("userId"); //userId是来源于服务器端php程序响应结果res的<strong>索引</strong>,根据<strong>索引</strong>获取值
userPsw = jsonData.getString("userPsw"); //userPsw是来源于服务器端php程序响应结果res的<strong>索引</strong>,根据<strong>索引</strong>获取值
data.add("用户ID:" + userId + ",用户密码:" + userPsw); //保存返回的值,可进行相应的操作,这里只进行显示
}
Looper.prepare();
Toast.makeText(Main<strong>Activity</strong>.this, data.toString(), Toast.LENGTH_LONG).show();
Looper.loop();
}
else {
Looper.prepare();
Toast.makeText(Main<strong>Activity</strong>.this, "登录失败", Toast.LENGTH_LONG).show();
Looper.loop();
}
}
catch(<strong>Exception</strong> 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 <strong>Activity</strong> in <strong>AndroidManifest.xml</strong>.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}