用在有root权限的手机上可以正常使用,但是没有root的就使用不了
root的机器是android 2.3 的  出现错误的是android4.0的
消息提示错误出再:
DataOutputStream conout = new DataOutputStream(con.getOutputStream());
06-28 16:48:45.340: W/dalvikvm(5957): threadid=1: thread exiting with uncaught exception (group=0x40a4d1f8)
06-28 16:48:45.340: E/AndroidRuntime(5957): FATAL EXCEPTION: main
06-28 16:48:45.340: E/AndroidRuntime(5957): android.os.NetworkOnMainThreadException
06-28 16:48:45.340: E/AndroidRuntime(5957):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.io.IoBridge.recvfrom(IoBridge.java:503)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpConnection.isStale(HttpConnection.java:256)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:71)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at com.cy.nearshop.utils.HttpUtils.postHttpClientString(HttpUtils.java:47)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at com.cy.nearshop.activity.Comment_count$3.run(Comment_count.java:202)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at android.os.Handler.handleCallback(Handler.java:605)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at android.os.Looper.loop(Looper.java:137)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at android.app.ActivityThread.main(ActivityThread.java:4424)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.lang.reflect.Method.invokeNative(Native Method)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at java.lang.reflect.Method.invoke(Method.java:511)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-28 16:48:45.340: E/AndroidRuntime(5957):  at dalvik.system.NativeStart.main(Native Method)

解决方案 »

  1.   

    package com.cy.nearshop.activity;import java.util.ArrayList;
    import java.util.Map;import org.json.JSONException;
    import org.json.JSONObject;import com.cy.nearshop.utils.HttpUtils;
    import com.cy.nearshop.utils.InitConfig;
    import com.cy.nearshop.utils.JsonUtils;
    import com.cy.nearshop.vo.Comment;
    import com.cy.nearshop.vo.Countent;import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.Toast;public class Comment_count extends Activity {
    LinearLayout comment_countent = null;
    Countent ctt = null;
    ArrayList<Comment> listres = null;
    EditText cvc_et = null;
    String etcun = null;
    String userstr = null;
    /**
     * 10条留言
     */
    int number = 10;
    HttpUtils  hu=null;
    @Override
    public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.comment_view_comment);
    TextView cmm_title = (TextView) findViewById(R.id.cmm2_title);
    TextView cmm_content = (TextView) findViewById(R.id.cmm2_content);
    TextView cmm_time = (TextView) findViewById(R.id.cmm2_time);
    ImageView cmm_img = (ImageView) findViewById(R.id.cmm2_img);
    ImageButton mm_back_btn = (ImageButton) findViewById(R.id.mm_back_btn);
    Button cvc_butt = (Button) findViewById(R.id.cvc_butt);
    cvc_et = (EditText) findViewById(R.id.cvc_et);
    hu=new HttpUtils();
    cvc_butt.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
    // TODO Auto-generated method stub
    etcun = cvc_et.getText().toString();
    SharedPreferences sp = Comment_count.this.getSharedPreferences(
    InitConfig.user_init, 0);
    userstr = sp.getString("username", null);
    hand.post(r2);
    }
    });
    mm_back_btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
    // TODO Auto-generated method stub
    Comment_count.this.finish();
    }
    });
    comment_countent = (LinearLayout) findViewById(R.id.comment_countent);
    Intent intent = getIntent();
    ctt = (Countent) intent.getSerializableExtra("count");
    System.out.println("评论留言" + ctt);
    cmm_title.setText(ctt.getName());
    cmm_content.setText(ctt.getCount());
    cmm_time.setText(ctt.getCounttime());
    hand.postDelayed(r,3000);
    } private Handler hand = new Handler() { @Override
    public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    switch (msg.arg1) {
    case InitConfig.loaderr:
    TextView t = new TextView(Comment_count.this);
    t.setText("无");
    comment_countent.addView(t);
    break;
    case InitConfig.showlistview:
    if (listres != null) {
    Comment_count_item cv = (Comment_count_item) msg.obj;
    if (cv != null)
    comment_countent.addView(cv);
    }
    break;
    case InitConfig.suberr:
          Toast.makeText(Comment_count.this, "发表失败,请检查网络连接!", Toast.LENGTH_LONG).show();
          InputMethodManager imm1 = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
       //得到InputMethodManager的实例 
      if (imm1.isActive()) { 
       //如果开启 
      imm1.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); 
       //关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的 
      } 
    break;
    case InitConfig.subok:
          Toast.makeText(Comment_count.this, "发表成功!", Toast.LENGTH_LONG).show();
          hand.post(r);
          cvc_et.setText("");
          InputMethodManager imm2 = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
       //得到InputMethodManager的实例 
      if (imm2.isActive()) { 
       //如果开启 
      imm2.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); 
       //关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的 
      } 
    break;
    case InitConfig.subno:
          Toast.makeText(Comment_count.this, "发表失败!", Toast.LENGTH_LONG).show();
          InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
       //得到InputMethodManager的实例 
      if (imm.isActive()) { 
       //如果开启 
      imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS); 
       //关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的 
      } 
    break;
    default:
    break;
    }
    super.handleMessage(msg);
    } };
    Runnable r2 = new Runnable() { public void run() {
    // TODO Auto-generated method stub
    if (ctt != null) {
    JSONObject  jo=new JSONObject();
    try {
    jo.put("act","insercomment");
    if(etcun!=null)
    jo.put("comment", etcun);
    if(userstr!=null){
    jo.put("name", userstr);
    }else{
    jo.put("name", "游客");
    }
    jo.put("countentid", ctt.getId());
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    String result = hu.postHttpClientString(
    InitConfig.https, jo.toString());
    if (result.equals("err")) {
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.suberr;
    hand.sendMessage(msg2);
    } else if (result.equals("errnull")) {
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.suberr;
    hand.sendMessage(msg2);
    } else {
    Map maps = JsonUtils.stringtomap(result);
    if ((Boolean) maps.get("result")) {
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.subok;
    hand.sendMessage(msg2);
    }else{
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.subno;
    hand.sendMessage(msg2);
    }
    }
    }
    }
    }; Runnable r = new Runnable() {
    public void run() {
    if (ctt != null) {
    // TODO Auto-generated method stub
    JSONObject js = new JSONObject();
    try {
    js.put("act", "fandcomment");
    js.put("startsize", 0);
    js.put("countentid", ctt.getId());
    js.put("endsize", number);
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } String result = hu.postHttpClientString(
    InitConfig.https, js.toString());

    if (result.equals("err")) {
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.loaderr;
    hand.sendMessage(msg2);
    } else if (result.equals("errnull")) {
    Message msg2 = new Message();
    msg2.arg1 = InitConfig.loaderr;
    hand.sendMessage(msg2);
    } else {
    if (listres != null) {
    listres.clear();
    listres = null;
    }
    Map maps = JsonUtils.stringtomap(result);
    listres = JsonUtils.stringjsontomap2(maps.get("obj")
    .toString());
    System.out.println("ArrayList<Comment>==" + listres);
    for (int i = 0; i < listres.size(); i++) { Message msg2 = new Message();
    Comment_count_item v = new Comment_count_item(
    Comment_count.this, listres.get(i));
    msg2.obj = v;
    msg2.arg1 = InitConfig.showlistview;
    hand.sendMessage(msg2); }
    } }
    }
    };
    }
      

  2.   

    错误信息说是在下面显示红色的地方:public class HttpUtils {
    /*
     * 根据访问地址返回访问结果 err代表网络连接失败 null代表用户账号或者密码错误 其他代表成功
     */
    public  String postHttpClientString(String urlstr, String st) {
    System.out.println("访问地址=" + urlstr+"?act="+st);
    String result = null;
    StringBuilder sb = new StringBuilder();
    HttpURLConnection con = null;
    String line = null;
    BufferedReader buffer = null;
    try {
    URL url = new URL(urlstr);
    con = (HttpURLConnection) url.openConnection();
    // 连接10秒
    con.setConnectTimeout(5000);
    con.setRequestMethod("POST");
    // 允许写入参数
    con.setDoOutput(true);
    // con.setDoInput(true);
     con.setInstanceFollowRedirects(true);
    // 读取数据10秒
    con.setReadTimeout(10000);
    // 请求不能使用缓存
    //con.setUseCaches(false);
    // 设定传送的内容类型是可序列化的java对象
    // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) // 写入数据
    if (st != null) {
    DataOutputStream conout = new DataOutputStream(con.getOutputStream()); conout.write(("act=" + st).getBytes());
    conout.flush();
    conout.close();
    }
    InputStream input = con.getInputStream();
    if (input != null) {
    buffer = new BufferedReader(new InputStreamReader(input));
    while ((line = buffer.readLine()) != null) {
    sb.append(line.trim());
    }
    result = sb.toString();
    } else {
    System.out.println("连接失败");
    result = "errnull";
    }
    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println("出现错误1");
    result = "err";
    } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println("出现错误2");
    e.printStackTrace();
    result = "err";
    } finally {
    if (buffer != null) {
    try {
    buffer.close();

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if (con != null) {
    con.disconnect();
    con=null;
    }
    }
    System.out.println("web返回" + result);
    return result;
    }
      

  3.   

    这个提示:android.os.NetworkOnMainThreadException
    是说你在主线程中访问了网络,解决办法:将访问网络的代码单独放到一个线程中
    http://blog.csdn.net/aminfo/article/details/7903112
      

  4.   

    api8以上要检查是否在主线程进行了网络操作.
    你可以去掉检查
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.
    Builder().detectDiskReads().detectDiskWrites().
    detectNetwork().penaltyLog().build());或者网络访问新起一个线程