android studio 中的 android.os.NetworkOnMainThreadException


參考 博客


如果 把網絡請求放在 主線程中,android發送請求時會報錯 android.os.NetworkOnMainThreadException


我的處理方法是, 單獨用一個 類發送 網絡請求,這個類 extends Thread,代碼如下

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import net.sf.json.JSONObject;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
//import org.json.JSONObject;

/**
 * 網絡訪問
 * Created by lyh on 2019/6/6.
 */

public class NetThread extends Thread{
    private static final String url_prefix ="url地址";

    private String url;
    private JSONObject json;
    private JSONObject json_get;
    private Handler handler;

    public NetThread(String url_suffix, Handler handler,JSONObject json){
        this.url=url_prefix+url_suffix;
        this.handler=handler;
        this.json=json;
    }

    @Override
    public void run(){
        super.run();
        json_get=post(json);
        if(json_get!=null){
            Log.e("json_get",json_get.toString());
        }

        dealResult();
    }

    public void dealResult(){
        /*
        返回結果
         */
        Message message = new Message();
        message.what=1; 
        if(json_get==null){
            message.what=0;
        }
        message.obj = json_get;
        handler.sendMessage(message);
    }

    ....

}

在 Activity 中通過 handler處理 結果,代碼如下

public void func(){
            Handler handler=new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    JSONObject jo=(JSONObject)msg.obj;
                    if (msg.what==1) {

                        try{
                            if((jo.getString("state")).equals("ok")){
                                // 處理成功的結果
                            }else{                           
                               // 處理失敗的結果

                            }
                        }catch(Exception e){
                            // 處理失敗的結果
                        }

                    }

                }
            };

            /*
            放數據
             */
            JSONObject jo=new JSONObject();
            jo.put("username",username);
            jo.put("pwd",pwd);

//            Log.e("json",jo.toString());

            final NetThread netThread=new NetThread("register",handler,jo);

            netThread.start();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM