当前位置: 代码迷 >> Android >> 装到手机上闪退的有关问题
  详细解决方案

装到手机上闪退的有关问题

热度:93   发布时间:2016-04-28 04:55:14.0
装到手机上闪退的问题
大家好,在网上东拼西凑组个了小程序。环境是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 可以直接在主线程中运行网络相关的操作; 
你的网络相关操作写在主线程了, 这个可能是你出现闪退的原因
------解决方案--------------------
引用:
Quote: 引用:

把错误的日志 贴上来看看 是哪里出的问题 

不过我这里猜测一下 : 
你的模拟器的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});
  相关解决方案