软件支持:androidADT 4.4.2 Myeclipse 10
注:本程序服务器程序是从利用网上现有程序,由于android版本差异,导致原android程序实现时出现问题,所以自己进行了修改!原服务器程序链接:http://blog.csdn.net/woshisap
感谢原作者提供的程序参考,本文只是对android部分的实现:
1.新建android项目,名称为Link,Acivity名称为Connect(也就是MainActivity换了一个名字);
2.编写fragment.xml,只有一个listview
<ListView
android:id="@+id/conlist"
android:layout_width="match_parent"
android:layout_height="200dp"
/>
3.新建线程用于连接服务器,这里采用实现Thread(Runnable l) 的方法,代码如下:
package com.example.link;
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.os.Handler;
import android.os.Message;
/*
* 在用真机连接服务器时,本人采用的是利用pc开WiFi,手机进行连接,从而使其在同一局域网内
* 此时ip可以在pc上CMD中输入ipconfig进行查询,注意是无线局域网ip
*/
public class Linkinf implements Runnable{
Private static String url="http://192.168.*.*:8088/testjson/getjson.action";//局域网ip
//android虚拟器为"http://10.0.2.2:8088/testjson/getjson.action"
public final String AVG="linkinf";
public String string="lcc";
public Handler handler;
public Linkinf(Handler handler)
{
this.handler=handler;
}
@Override
public void run() {
// TODO Auto-generated method stub
HttpClient client=new DefaultHttpClient();
try{
HttpPost request=new HttpPost(new URI(url));
HttpResponse response=client.execute(request);
if(response.getStatusLine().getStatusCode()==200)//是否连接成功
{
HttpEntity entity=response.getEntity();
if(entity!=null)
{
string=EntityUtils.toString(entity);
Message msg=new Message();
msg.what=0x123;
msg.obj=string;
handler.sendMessage(msg);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
4.完成Connect,也就是MainActivity,具体代码如下:
package com.example.link;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class Connect extends Activity {
private HashMap<String,Object> data=null;
private List<HashMap<String,Object>> datas=null;
private ListView listview;
public Linkinf linkinf;
public String out=null;
public Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_connect);
listview=(ListView)findViewById(R.id.conlist);
handler=new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0x123)
{
out=msg.obj.toString();
getPDAServerData();
}
}
};
linkinf=new Linkinf(handler);
new Thread(linkinf).start();
}
public void getPDAServerData()
{
try{JSONArray jsonArray=null;
jsonArray = new JSONArray(out);
datas=new ArrayList<HashMap<String,Object>>();
for(int i=0;i<jsonArray.length();i++)
{
JSONObject jsonobject=(JSONObject)jsonArray.get(i);
int id=jsonobject.getInt("id");
String name=jsonobject.getString("title");
int length=jsonobject.getInt("length");
data=new HashMap<String,Object>();
data.put("id", id);
data.put("title", name);
data.put("length", length);
datas.add(data);
}
SimpleAdapter adapter=new SimpleAdapter(this,datas,R.layout.item,new String[]{"title","length"},new int[]{R.id.title,R.id.lenth});
listview.setAdapter(adapter);
}catch(Exception e){
e.printStackTrace();Toast.makeText(this, "数据失败", Toast.LENGTH_SHORT).show();}
}
注:在simpleadapter中R.layout.item就是一个简单的xml文件,里面只有两个textview,这里不再赘述!