NetworkOnMainThreadException较高API较高、NetworkOnMainThreadException、API

2023-09-05 03:21:16 作者:# 情多桑心更痛心。

我有一个脚本,强制关闭,只有当我调试运行在更高的API:16,但它工作正常,当它走到了API:10。难道是我的项目设置的问题

有一个简单的请求到服务器,以获得在一个片段的类别的列表。

gallery.java

 公共类库扩展片段{

    JSONArray jArray;
    字符串结果= NULL;
    InputStream的是= NULL;
    StringBuilder的SB = NULL;
    私人的ListView storeList;

    @覆盖
    公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
            捆绑savedInstanceState){
        // TODO自动生成方法存根
        查看myFragmentView = inflater.inflate(R.layout.tab_frag1_layout,
                集装箱,假);
        storeList =(ListView控件)inflater.inflate(R.layout.list,NULL);
        返回myFragmentView;
    }

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);

    }

    @覆盖
    公共无效onActivityCreated(包savedInstanceState){
        // TODO自动生成方法存根
        super.onActivityCreated(savedInstanceState);

        ArrayList的<的NameValuePair> namevaluepairs中=新的ArrayList<的NameValuePair>();
        // HTTP POST
        尝试 {
            HttpClient的HttpClient的=新DefaultHttpClient();
            HttpPost httppost =新HttpPost(
                    http://xxx.xxx.xxx/android_link.php);
            httppost.setEntity(新UrlEn codedFormEntity(namevaluepairs中));
            HTT presponse响应= httpclient.execute(httppost);
            HttpEntity实体= response.getEntity();
            是= entity.getContent();
        }赶上(例外五){
            Log.e(log_tag,错误的HTTP连接+ e.toString());
        }
        //转换响应串
        尝试 {
            的BufferedReader读卡器=新的BufferedReader(新的InputStreamReader(
                    是,ISO-8859-1),8);
            SB =新的StringBuilder();
            sb.append(reader.readLine()+\ N);

            串行=0;
            而((行= reader.readLine())!= NULL){
                sb.append(行+\ N);
            }
            is.close();
            结果= sb.toString();
        }赶上(例外五){
            Log.e(log_tag,错误转换结果+ e.toString());
        }
        //配对数据
        INT CT_ID;
        字符串ct_name;
        尝试 {
            jArray =新JSONArray(结果);
            JSONObject的json_data = NULL;
            的for(int i = 0; I< jArray.length();我++){
                json_data = jArray.getJSONObject(ⅰ);
                CT_ID = json_data.getInt(brand_id);
                ct_name = json_data.getString(series_name);

            }
        }赶上(JSONException E1){
            Toast.makeText(getActivity(),没有找到结果,Toast.LENGTH_LONG)
                    。显示();
        }赶上(ParseException的E1){
            e1.printStackTrace();
        }
    }
 

log.txt的

 三月一日至29日:25:54.653:E / log_tag(4324):在HTTP connectionandroid.os.NetworkOnMainThreadException错误
三月一日至29日:25:54.653:E / log_tag(4324):错误转换结果显示java.lang.NullPointerException
三月一日至29日:25:54.653:W / dalvikvm(4324):主题ID = 1:螺纹退出与未捕获的异常(组= 0xb5e98288)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):致命异常:主要
三月一日至29日:25:54.653:E / AndroidRuntime(4324):显示java.lang.NullPointerException
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在org.json.JSONTokener.nextValue(JSONTokener.java:94)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在org.json.JSONArray< INIT>(JSONArray.java:87)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在org.json.JSONArray< INIT>(JSONArray.java:103)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在com.nazartt.angtrading.gallery.onActivityCreated(gallery.java:93)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.support.v4.app.FragmentManagerImpl $ 1.运行(FragmentManager.java:420)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.os.Handler.handleCallback(Handler.java:615)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.os.Handler.dispatchMessage(Handler.java:92)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.os.Looper.loop(Looper.java:137)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在android.app.ActivityThread.main(ActivityThread.java:4745)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在java.lang.reflect.Method.invokeNative(本机方法)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在java.lang.reflect.Method.invoke(Method.java:511)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
三月一日至29日:25:54.653:E / AndroidRuntime(4324):在dalvik.system.NativeStart.main(本机方法)
 
动漫 小说 文学设定那家强 吹比无极限 第一居然不是oaa 论那些各类作品最强设定们 哔哩哔哩

解决方案

您有一个的 NetworkOnMainThreadException 发生在Android(3.0+),如果你尝试做网络运营主(UI)线程(的 StrictMode ),.请使用 AsyncTask的 为您的网络运营,这是简单的设置和工作在一个合乎逻辑的方式(执行的东西在后台那么一旦大功告成,发布到UI线程)。

I am having a script force close only when i debug on higher API : 16 , But it is working fine when it come to an API : 10. Could it be my project setup problem?

It is a simple request to a server to get list of category in a fragment.

gallery.java

public class gallery extends Fragment {

    JSONArray jArray;
    String result = null;
    InputStream is = null;
    StringBuilder sb = null;
    private ListView storeList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View myFragmentView = inflater.inflate(R.layout.tab_frag1_layout,
                container, false);
        storeList = (ListView) inflater.inflate(R.layout.list, null);
        return myFragmentView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        // http post
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(
                    "http://xxx.xxx.xxx/android_link.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection" + e.toString());
        }
        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            String line = "0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }
        // paring data
        int ct_id;
        String ct_name;
        try {
            jArray = new JSONArray(result);
            JSONObject json_data = null;
            for (int i = 0; i < jArray.length(); i++) {
                json_data = jArray.getJSONObject(i);
                ct_id = json_data.getInt("brand_id");
                ct_name = json_data.getString("series_name");

            }
        } catch (JSONException e1) {
            Toast.makeText(getActivity(), "No Data Found", Toast.LENGTH_LONG)
                    .show();
        } catch (ParseException e1) {
            e1.printStackTrace();
        }
    }

log.txt

01-29 03:25:54.653: E/log_tag(4324): Error in http connectionandroid.os.NetworkOnMainThreadException
01-29 03:25:54.653: E/log_tag(4324): Error converting result java.lang.NullPointerException
01-29 03:25:54.653: W/dalvikvm(4324): threadid=1: thread exiting with uncaught exception (group=0xb5e98288)
01-29 03:25:54.653: E/AndroidRuntime(4324): FATAL EXCEPTION: main
01-29 03:25:54.653: E/AndroidRuntime(4324): java.lang.NullPointerException
01-29 03:25:54.653: E/AndroidRuntime(4324):     at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at org.json.JSONTokener.nextValue(JSONTokener.java:94)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at org.json.JSONArray.<init>(JSONArray.java:87)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at org.json.JSONArray.<init>(JSONArray.java:103)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at com.nazartt.angtrading.gallery.onActivityCreated(gallery.java:93)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:891)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.os.Handler.handleCallback(Handler.java:615)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.os.Looper.loop(Looper.java:137)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at java.lang.reflect.Method.invoke(Method.java:511)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-29 03:25:54.653: E/AndroidRuntime(4324):     at dalvik.system.NativeStart.main(Native Method)

解决方案

You have a NetworkOnMainThreadException which occurs on the new versions of Android (3.0+) if you try to do network operations on the main (UI) Thread (StrictMode),. Use an AsyncTask for your network operations, it's simple to set up, and operates in a logical manner (execute something in background then once you're done, publish to UI Thread).

 
精彩推荐
图片推荐