我写了一个android应用,应用的目的是访问一个网站,同时获取手机的串号,在模拟器上运行都是合适的,但是当我部署都android手机上的时候,应用就会报错,我就测试到底是访问网站是出错,还是获取串口时出错,最后注掉访问网站的代码,发现合适,最后确定是获取网站的时候出错了,代码如下:
package com.example.test;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.telephony.TelephonyManager;public class MainActivity extends Activity {

private WebView webView;
private String url = "http://cs.spcard.net";
private ProgressDialog progressDialog;   //定义进度条
private static final int CLOSE_DLG = 1;   
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == CLOSE_DLG){
progressDialog.dismiss();
}
}
};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        load(url, webView);
    }
    
    //获取串口号
    public void find(View view){
      Context context = getWindow().getContext();        
         TelephonyManager telephonemanage = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    
           try {     
               Toast.makeText(this, "串号:"+telephonemanage.getDeviceId(),6000).show();      
           }catch(Exception e){     
               Log.i("error", e.getMessage());  
           }
    }
    
    public void init(){
 if(progressDialog == null){       //判断有没有进度条
 progressDialog = new ProgressDialog(this);     //若没有,新建一个进度条
 }
 progressDialog.setTitle("正在加载,请稍等...");        //进度条的标题,即显示的文字
 progressDialog.show();                   //显示进度条
 
 webView = (WebView) findViewById(R.id.webView);
 webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);   //设置能加载网页里面的javascript
 
 webView.setWebViewClient(new WebViewClient(){
 @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
load(url, webView);
return super.shouldOverrideUrlLoading(view, url);
}
 });
 
 webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress == 100){      //当加载到100%的时候,关闭进度条
handler.sendEmptyMessage(CLOSE_DLG);
}
super.onProgressChanged(view, newProgress);

 });
   
 }
    
    
    public void load(final String url, final WebView view){
 //判断url是否为空,若为空,则返回
 if(url == null || "".equals(url)){
 return;
 }
 
 new Thread(){
@Override
public void run() {
view.loadUrl(url);

 }.start();
 
 }
    
}
哪位大侠解决下谢谢了!

解决方案 »

  1.   

    你在新开的线程里view.loadUrl(url);
    那肯定会报错。
    这个只能在UI主线程去调用
      

  2.   

    还是不行,是不是手机网和internet网不一样导致的
      

  3.   

    FATAL EXCEPTION: WebViewCoreThread
    java.lang.SecurityException: ConnectivityService: Neither user 10009 nor current process has android.permission.ACCESS_NETWORK_STATE.
    at android.os.Parcel.readException(Parcel.java:1247)
    at android.os.Parcel.readException(Parcel.java:1235)
    at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:375)at android.net.http.RequestQueue.enablePlatformNotifications(RequestQueue.java:257)
    at android.webkit.Network.InitalizePlatformNotifications(Network.java:356)
    at android.webkit.Network.getInstance(Network.java:95)
    at android.webkit.FrameLoader.executeLoad(FrameLoader.java:116)
    at android.webkit.BrowserFrame.startLoadingResource(BrowserFrame.java:772)
    at android.webkit.BrowserFrame.nativeLoadUrl(Native Method)
    at android.webkit.BrowserFrame.loadUrl(BrowserFrame.java:252)
    at android.webkit.WebViewCore.loadUrl(WebViewCore.java:1592)
    at android.webkit.WebViewCore.access$1400(WebViewCore.java:55)
    at android.webkit.WebViewCore$EventHub$1.handleMessage(WebViewCore.java:957)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:624)
    at java.lang.Thread.run(Thread.java:1096)
    ---control_open_data_source--num:3-
    Successfully to bma150 sensor activate.
      

  4.   

    你添加访问网络的权限了吗? <uses-permission android:name="android.permission.INTERNET" />
      

  5.   

    把android.permission.ACCESS_NETWORK_STATE这个权限加上
      

  6.   

    java.lang.SecurityException: ConnectivityService: Neither user 10009 nor current process has android.permission.ACCESS_NETWORK_STATE.这里写的很明白,你没有此权限
      

  7.   

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    写了这两个权限
      

  8.   

    把android.permission.ACCESS_NETWORK_STATE这个权限加上就好了,谢谢楼上的大侠们,嘿嘿,就是因为缺少这个权限的原因,那为什么在模拟器上就可以了,而部署到手机上会出错了?
    这个权限看来很重要了。