package cn.dzr.service;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;public class ManagerService
{ public static boolean save(String titlestr, String length) throws UnsupportedEncodingException 
{
//根据传递的字符串保存信息到对应的服务器

String path = "http://118.252.31.156:8080/weba/newsmanager";
StringBuilder url = new StringBuilder();
url.append(path).append('?');
//http://localhost:8080/weba/newsmanager?title=abdddd&timelength=121
//添加视频标题信息
url.append("title=").append(URLEncoder.encode(titlestr, "utf-8"));
url.append('&');
//添加时长信息
url.append("timelength=").append(length);

try 
{
return (sendGetMsg(url.toString())) ;
}
catch(IOException e)
{
e.printStackTrace();
}
return false;
} private static boolean sendGetMsg(String urlstr) throws IOException
{
URL url = new URL(urlstr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");


if(conn.getResponseCode() == 200)
return true;

return false;
}}这是工具类,写得有点乱。 其完成的功能是将一个int和一个String信息传递到服务器上。
我运行的时候,程序会退出。
提示错误信息在if(conn.getResponseCode() == 200)
这一行 。
具体的错误信息如下:10-04 14:59:18.486: W/System.err(2151):  at java.net.Socket.connect(Socket.java:807)
10-04 15:18:17.936: I/Choreographer(5250): Skipped 38 frames!  The application may be doing too much work on its main thread.
10-04 15:18:18.246: D/gralloc_goldfish(5250): Emulator without GPU emulation detected.
10-04 15:18:23.136: D/AndroidRuntime(5250): Shutting down VM
10-04 15:18:23.136: W/dalvikvm(5250): threadid=1: thread exiting with uncaught exception (group=0x41465700)
10-04 15:18:23.286: E/AndroidRuntime(5250): FATAL EXCEPTION: main
10-04 15:18:23.286: E/AndroidRuntime(5250): java.lang.IllegalStateException: Could not execute method of the activity
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.view.View$1.onClick(View.java:3633)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.view.View.performClick(View.java:4240)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.view.View$PerformClick.run(View.java:17721)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.os.Handler.handleCallback(Handler.java:730)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.os.Looper.loop(Looper.java:137)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.app.ActivityThread.main(ActivityThread.java:5103)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.lang.reflect.Method.invokeNative(Native Method)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.lang.reflect.Method.invoke(Method.java:525)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at dalvik.system.NativeStart.main(Native Method)
10-04 15:18:23.286: E/AndroidRuntime(5250): Caused by: java.lang.reflect.InvocationTargetException
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.lang.reflect.Method.invokeNative(Native Method)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.lang.reflect.Method.invoke(Method.java:525)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.view.View$1.onClick(View.java:3628)
10-04 15:18:23.286: E/AndroidRuntime(5250):  ... 11 more
10-04 15:18:23.286: E/AndroidRuntime(5250): Caused by: android.os.NetworkOnMainThreadException
10-04 15:18:23.286: E/AndroidRuntime(5250):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.io.IoBridge.connect(IoBridge.java:112)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at java.net.Socket.connect(Socket.java:842)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:497)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at cn.dzr.service.ManagerService.sendGetMsg(ManagerService.java:44)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at cn.dzr.service.ManagerService.save(ManagerService.java:28)
10-04 15:18:23.286: E/AndroidRuntime(5250):  at cn.dzr.newsmanagr.MainActivity.save(MainActivity.java:39)
10-04 15:18:23.286: E/AndroidRuntime(5250):  ... 14 more
10-04 15:18:28.247: I/Process(5250): Sending signal. PID: 5250 SIG: 9

解决方案 »

  1.   

    我记得我以前也写过一个需要访问网络的app,也是报错,后来说访问网络要在前面加一段代码StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
           .detectDiskReads()
           .detectDiskWrites()
           .detectNetwork()   // or .detectAll() for all detectable problems
           .penaltyLog()
           .build());
                   StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                   .detectLeakedSqlLiteObjects()
                   .penaltyLog() //打印logcat
                   .penaltyDeath()
                   .build());
    不知道能不能帮到你,错误看不懂
      

  2.   

    NetworkOnMainThreadException
    在UI主线程做网络操作,在操作返回前,UI不会响应用户操作,或者5秒后还未返回会造成ANR,影响了用户体验。
    4.0以后已经不允许这样做了,你需要把网络操作放在一个新线程里。
                        (new Thread(){//这里有一个新线程,网络操作放到这里线程里
     
                            @Override
                            public void run() {
                                super.run();
                                //网络操作写到这里
                            }
                             
                        }).start();楼上说的StrictMode也是开发时很有用的类,可以用来检测有没有把flash I/O,网络操作等耗时操作放在UI主线程,防止UI不响应或者更严重的ANR。当然4.0以后已经强制要求网络操作不能放在UI主线程了,否则就会报NetworkOnMainThreadException。release版本中应该把StrictMode去掉。