我的程序从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更多
答案 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);
}