新手学习Android 的一些记录!利用快递100 留出来的API接口去获取物流信息,然后利用Android上的Gson解析 json数据,利用ListView显示到App上面,只是一个简单的界面
没什么技术含量
程序的结构目录 一个Model 里面对应着Jons数据中的成员
然后生成一些Get Set方法
还用定义一个Htpp类 用来获取网上的数据 最后返回字符串 在网上获取的应该是InputStream类型的,为了省事,我声明了一个工具类 放在了IOutils 包下面
一个静态方法,功能就是把InputStream装换成String 就是在网上获取Json数据转换成字符串,然后在让Gson去解析!
这个App主要拥有两个Activity 一个是让用户输入 快递公司,另一个是输入块单号! 在mainActivity启动然后携带参数跳转到第二个Activity中 在第二个Activity中有一个TextView 和一个LisView
<strong>这个是mainActivity中的代码:</strong>
package com.example.logistics;
import java.io.IOException;
import java.util.List;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
import com.example.gsonModel.DetailData;
import com.example.gsonModel.MyLogistics;
import com.example.httpUtil.HttpCallbackListener;
import com.example.httpUtil.HttpUtil;
import com.google.gson.Gson;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button btn_find;
private TextView ev_kd;
private TextView ev_dh;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ev_kd = (TextView)findViewById(R.id.ev_kd);
ev_dh = (TextView)findViewById(R.id.ev_dh);
btn_find = (Button)findViewById(R.id.btn_find);
btn_find.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
Bundle bundle=new Bundle();
bundle.putString("kdName", ev_kd.getText().toString().trim());
bundle.putString("urlAddress",ev_dh.getText().toString().trim());
intent.putExtra("message",bundle);
intent.setClass(MainActivity.this,LogisticActivity.class);
startActivity(intent);
}
});
}
}
下面这个是我用来显示具体物流信息的那个Activity代码
package com.example.logistics;
import java.util.List;
import com.example.gsonModel.DetailData;
import com.example.gsonModel.MyLogistics;
import com.example.httpUtil.HttpCallbackListener;
import com.example.httpUtil.HttpUtil;
import com.google.gson.Gson;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class LogisticActivity extends Activity {
private Handler handler;
private ListView lv_show;
private String txt;
private String kdName;
private String kdNum;
private TextView tv_message;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logistics);
Intent intent=getIntent();
Bundle bundle=intent.getBundleExtra("message");
lv_show=(ListView)findViewById(R.id.lv_show);
tv_message=(TextView)findViewById(R.id.tv_message);
kdName=bundle.getString("kdName");
kdNum=bundle.getString("urlAddress");
HttpUtil.sendOkHttpRequest("http://www.kuaidi100.com/query?type="+kdName+"&postid="+kdNum,new HttpCallbackListener() {
public void onFinish(String response) {
// TODO Auto-generated method stub
// 在这里根据返回内容执行具体逻辑
String text = response.toString();
Message msg = new Message();
Bundle data = new Bundle();
data.putString("logcontent",text);
msg.setData(data);
handler.sendMessage(msg);
}
@Override
public void onError(Exception e) {
// TODO Auto-generated method stub
// 在这里对异常进行处理
System.out.println(e);
}
});
handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
txt = data.getString("logcontent");
Gson gson = new Gson();
MyLogistics logistics = gson.fromJson(txt, MyLogistics.class);
String nu = logistics.getNu();
tv_message.setText("快递单号:"+nu+" 下面是详细物流信息");
List<DetailData> datalists = logistics.getData();
MyAdapter adapter = new MyAdapter(getApplicationContext(), R.layout.logis_item,
datalists);
lv_show.setAdapter(adapter);
}
};
}
public class MyAdapter extends ArrayAdapter<DetailData> {
private int resource;
private Context context;
public MyAdapter(Context context, int resource, List<DetailData> data) {
super(context, resource, data);
// TODO Auto-generated constructor stub
this.resource = resource;
this.context=context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
DetailData mess = getItem(position);
if (convertView == null) {
view = LayoutInflater.from(context).inflate(
resource, parent, false);
} else {
view = convertView;
}
TextView tv_time = (TextView) view.findViewById(R.id.tv_time);
TextView tv_ftime = (TextView) view.findViewById(R.id.tv_ftime);
TextView tv_context = (TextView) view.findViewById(R.id.tv_context);
TextView tv_location = (TextView) view
.findViewById(R.id.tv_location);
tv_time.setText("到达时间:" + mess.getTime());
tv_ftime.setText("发出时间:" + mess.getFtime());
tv_context.setText("物流信息:" + mess.getContext());
tv_location.setText("所在位置:" + mess.getLocation());
return view;
}
}
}
private Handler handler;
private ListView lv_show;
private String txt;
private String kdName;
private String kdNum;
private TextView tv_message;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logistics);
Intent intent=getIntent();
Bundle bundle=intent.getBundleExtra("message");
lv_show=(ListView)findViewById(R.id.lv_show);
tv_message=(TextView)findViewById(R.id.tv_message);
kdName=bundle.getString("kdName");
kdNum=bundle.getString("urlAddress");
HttpUtil.sendOkHttpRequest("http://www.kuaidi100.com/query?type="+kdName+"&postid="+kdNum,new HttpCallbackListener() {
public void onFinish(String response) {
// TODO Auto-generated method stub
// 在这里根据返回内容执行具体逻辑
String text = response.toString();
Message msg = new Message();
Bundle data = new Bundle();
data.putString("logcontent",text);
msg.setData(data);
handler.sendMessage(msg);
}
@Override
public void onError(Exception e) {
// TODO Auto-generated method stub
// 在这里对异常进行处理
System.out.println(e);
}
});
handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
txt = data.getString("logcontent");
Gson gson = new Gson();
MyLogistics logistics = gson.fromJson(txt, MyLogistics.class);
String nu = logistics.getNu();
tv_message.setText("快递单号:"+nu+" 下面是详细物流信息");
List<DetailData> datalists = logistics.getData();
MyAdapter adapter = new MyAdapter(getApplicationContext(), R.layout.logis_item,
datalists);
lv_show.setAdapter(adapter);
}
};
}
public class MyAdapter extends ArrayAdapter<DetailData> {
private int resource;
private Context context;
public MyAdapter(Context context, int resource, List<DetailData> data) {
super(context, resource, data);
// TODO Auto-generated constructor stub
this.resource = resource;
this.context=context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
DetailData mess = getItem(position);
if (convertView == null) {
view = LayoutInflater.from(context).inflate(
resource, parent, false);
} else {
view = convertView;
}
TextView tv_time = (TextView) view.findViewById(R.id.tv_time);
TextView tv_ftime = (TextView) view.findViewById(R.id.tv_ftime);
TextView tv_context = (TextView) view.findViewById(R.id.tv_context);
TextView tv_location = (TextView) view
.findViewById(R.id.tv_location);
tv_time.setText("到达时间:" + mess.getTime());
tv_ftime.setText("发出时间:" + mess.getFtime());
tv_context.setText("物流信息:" + mess.getContext());
tv_location.setText("所在位置:" + mess.getLocation());
return view;
}
}
}
联网工具类的代码
package com.example.httpUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.example.IOutils.InstreamToString;
import okhttp3.OkHttpClient;
import okhttp3.Request;
public class HttpUtil {
public static void sendOkHttpRequest(final String address,final HttpCallbackListener listener )
{
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null;
try {
URL url=new URL(address);
connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
InputStream in=connection.getInputStream();
String text = InstreamToString.convertStreamToString(in);
//System.out.println(text);
if(listener!=null)
{
//回调onFinish()方法
listener.onFinish(text);
}
} catch (Exception e) {
if(listener!=null)
{
//回调onError()方法法
listener.onError(e);
}
e.printStackTrace();
}finally{
if(connection!=null)
{
connection.disconnect();
}
}
}
}).start();
}
}
HttpCallbackListener 回调代码
package com.example.httpUtil;
public interface HttpCallbackListener {
void onFinish(String response);
void onError(Exception e);
}
转换成字符串类的 代码
package com.example.IOutils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class InstreamToString {
public static String convertStreamToString(InputStream is) {
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
StringBuilder sb=new StringBuilder();
String line=null;
try {
while((line=reader.readLine())!=null)
{
sb.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
}
效果图片,最坑的是我在设置ListView适配器的时候!!!啊啊,程序老是异常结束,各种调试,,,各种设置适配器参数,,最后结果发现,,,是我悲剧的没有
找到ListView这个组件,,,,,ListView lv_show=(ListView)findViewById(R.id.lv_show); 这次记住了!!