大家好,在网上东拼西凑组个了小程序。环境是android 通过.net webservice 与数据库通讯
现在遇到这样两个问题,简音描述一下:
1、登录后,通过webservice读取数据库里的数据。在模拟器上跑增删改查都没有问题,可是装到手机上,登录后就闪退,试了几部都这样。手机通过wifi联入网联,与PC相互能ping通,手机通过浏览器可以直接访问webservice站点。
2、拍照上传图片到服务器上,以二进制流的形式传送,webservice单独测试没有问题。通过模拟器上传的时候,日志文件提示“FileUploadImageResponse{FileUploadImageResult=未能找到路径“E:\WebService\images\”的一部分。;”
大家帮我看看,先谢谢了
------解决方案--------------------
把错误的日志 贴上来看看 是哪里出的问题
不过我这里猜测一下 :
你的模拟器的Android 版本是 2.x 的 , 手机 的Android 版本 是 4.x
在 4.x 中 与网络有关的操作必须放在线程里面进行, 而 2.x 可以直接在主线程中运行网络相关的操作;
你的网络相关操作写在主线程了, 这个可能是你出现闪退的原因
------解决方案--------------------
我感觉两种可能:第一种就是1楼说的线程;
你去搜索一下 android AsyncTask 或者android Thread的资料; 把与服务器交互的耗时操作放到线程中去;
第二你可以查看一下你在AndroidManifest.xml中的权限配置;是否配置了INTERT权限 如果你在本地的有存储操作,是否有本地的存储操作权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
同时你可以用真机进行debug调试,看看问题到底在哪里!
------解决方案--------------------
看LogCat上面肯定把错误都输出了,不要被闪退纠结了,就是意思出错了!
------解决方案--------------------
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
new Thread(){
public void run(){
Message msg=new Message();
msg.what=0x123;
msg.obj="abcd";
myhandler.sendMessage(msg);
}
}.start();
//setListView();}
}
final Handler myhandler=new Handler(){
public void handleMessage(Message msg){
setListView();//通过webservice 与数据库交互
}
};
private void setListView() {
listView.setVisibility(View.VISIBLE);
list = dbUtil.getContainerInfo("货柜号");
adapter = new SimpleAdapter(
MianActivity.this,
list,
R.layout.adapter_item,
new String[] { "LName"},
new int[] { R.id.txt_Cname});
listView.setAdapter(adapter);
}
改成这样,装到手机上还是闪退啊
囧 你开启一个线程发送消息 让handler来访问网络- -这不是和没开线程一样嘛 你应该在线程里面访问网络
new Thread(){
public void run(){
list = dbUtil.getContainerInfo("货柜号");
Message msg=new Message();
msg.what=0;
myhandler.sendMessage(msg);
}
}.start();
然后再在handler里面设置listview
public void handleMessage(Message msg){
switch(msg.what){
case 0:
listView.setVisibility(View.VISIBLE);
adapter = new SimpleAdapter(
MianActivity.this,
list,
R.layout.adapter_item,
new String[] { "LName"},
new int[] { R.id.txt_Cname});