Android简单物流查询

来源:互联网 发布:大闸蟹 二恶英 知乎 编辑:程序博客网 时间:2024/06/10 08:57

  新手学习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   

这个是mainActivity中的代码:

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() {@Overridepublic 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 stubsuper.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);}@Overridepublic 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 stubthis.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() {@Overridepublic 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 blocke.printStackTrace();} return sb.toString();   }}




效果图片,最坑的是我在设置ListView适配器的时候!!!啊啊,程序老是异常结束,各种调试,,,各种设置适配器参数,,最后结果发现,,,是我悲剧的没有

找到ListView这个组件,,,,,ListView lv_show=(ListView)findViewById(R.id.lv_show);   这次记住了!!

原创粉丝点击