应用程序无法在Android 4.0上运行

时间:2012-05-09 07:24:42

标签: android

我的程序从android 2.1到android 2.3

工作得非常好

但它不适用于更高版本的android

我已在我的清单文件中使用

<uses-sdk android:minSdkVersion="7"  
      android:targetSdkVersion="10" 
           android:maxSdkVersion="15"/>

在android 4.0.3 avd上运行项目时出现Logcat输出错误导致

  

05-09 12:45:12.051:E / AndroidRuntime(530):致命异常:主要`   05-09 12:45:12.051:E / AndroidRuntime(530):java.lang.RuntimeException:   无法启动活动ComponentInfo {giv.home / giv.home.Start}:   android.os.NetworkOnMainThreadException 05-09 12:45:12.051:   E / AndroidRuntime(530):at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)   05-09 12:45:12.051:E / AndroidRuntime(530):at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)   05-09 12:45:12.051:E / AndroidRuntime(530):at   android.app.ActivityThread.access $ 600(ActivityThread.java:123)05-09   12:45:12.051:E / AndroidRuntime(530):at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)   05-09 12:45:12.051:E / AndroidRuntime(530):at   android.os.Handler.dispatchMessage(Handler.java:99)05-09   12:45:12.051:E / AndroidRuntime(530):at   android.os.Looper.loop(Looper.java:137)05-09 12:45:12.051:   E / AndroidRuntime(530):at   android.app.ActivityThread.main(ActivityThread.java:4424)05-09   12:45:12.051:E / AndroidRuntime(530):at   java.lang.reflect.Method.invokeNative(Native Method)05-09   12:45:12.051:E / AndroidRuntime(530):at   java.lang.reflect.Method.invoke(Method.java:511)05-09 12:45:12.051:   E / AndroidRuntime(530):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)   05-09 12:45:12.051:E / AndroidRuntime(530):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)05-09   12:45:12.051:E / AndroidRuntime(530):at   dalvik.system.NativeStart.main(Native Method)05-09 12:45:12.051:   E / AndroidRuntime(530):引起:   android.os.NetworkOnMainThreadException 05-09 12:45:12.051:   E / AndroidRuntime(530):at   android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)   05-09 12:45:12.051:E / AndroidRuntime(530):at   java.net.InetAddress.lookupHostByName(InetAddress.java:391)05-09   12:45:12.051:E / AndroidRuntime(530):at   java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)05-09   12:45:12.051:E / AndroidRuntime(530):at   java.net.InetAddress.getAllByName(InetAddress.java:220)05-09   12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)   05-09 12:45:12.051:E / AndroidRuntime(530):at   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)   05-09 12:45:12.051:E / AndroidRuntime(530):at   giv.home.ConnectionClass.connectToServer(ConnectionClass.java:41)   05-09 12:45:12.051:E / AndroidRuntime(530):at   giv.home.Start.onCreate(Start.java:64)05-09 12:45:12.051:   E / AndroidRuntime(530):at   android.app.Activity.performCreate(Activity.java:4465)05-09   12:45:12.051:E / AndroidRuntime(530):at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)   05-09 12:45:12.051:E / AndroidRuntime(530):at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)   05-09 12:45:12.051:E / AndroidRuntime(530):... 11更多

2 个答案:

答案 0 :(得分:3)

我认为这是因为您尝试在主线程中使用HTTPConnect ... Android不再支持在主线程中使用HTTP,并且要求您在后台线程中执行此操作。当然只是猜测......但这就是我怀疑正在发生的事情。

但是,如果您的目标SDK版本是10,那么为什么不跳过设置max?我的意思是......你觉得ICS是你应用可以运行的绝对最高级别的ICS是什么?我相信,最小和目标是完全足够的。设置Max的重点是(例如)您的应用程序将无法在ICS上安装,因为ICS可用并且您知道应用程序不支持它的某些内容。因此,在这种情况下,您将设置13并且只有Honeycomb用户(和更低)才能使用它。由于15是可用的最高版本,因此设置它是不成熟的......就像你知道的那样,16可能和所有其他应用程序一样能够处理你的应用程序! :)

[编辑]

你甚至不需要AsyncTask(虽然这将是更多的Androidy方式)。 现在只需使用常规线程......

 Handler h = new Handler();
 private Runnable stuffToDoAfterPost = new Runnable(){
       public void run(){
            //whatever you wish to happen after you have done your server call
       }
 };

private class CallServer extends Thread{
   public void run(){
      //make your server call here...


      //then...
      h.post(stuffToDoAfterPost);
   }
}

new CallServer().start(); 

答案 1 :(得分:0)

要解决StrictMode问题,您需要在活动中使用以下代码 -

static{
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();  
    StrictMode.setThreadPolicy(policy);  
    }