2014-01-05 38 views
0

我想檢查位置是否存在於localhost中,如果該位置存在或不存在,它將響應系統並獲取消息(吐司),但My Apps在我運行時強制停止,我不知道爲什麼,我的代碼在哪裏是我的錯。logcat-error android.os.NetworkOnMainThreadException

這是我的主要代碼

public class SetLocationActivity extends Activity implements OnClickListener{ 

    private JSONParser jsonParser; 
    private static String ServerURL="http://myurl/asset"; 
    private static String location_tag ="location"; 
    private String stats = null; 
    Button go; 
    EditText location; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_set_location); 
     location = (EditText)findViewById(R.id.edit_location); 
     go = (Button)findViewById(R.id.btn_go); 
     go.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     //Call class JSONParser 
     jsonParser = new JSONParser(); 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("tag",location_tag)); 
     params.add(new BasicNameValuePair("loc",location.getText().toString())); 
     JSONObject json = jsonParser.getJSONFromUrl(ServerURL, params); 

     try { 
      Context context = getApplicationContext(); 
      int duration = Toast.LENGTH_SHORT; 

      stats = json.getString("lo"); 
      if(stats != null) { 
       CharSequence text = "List Location in"+stats; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 
      } else { 
       CharSequence text = "Location not found"; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 
      }  
     }catch(JSONException e) { 
      //TODO Auto-Generated catch block 
      e.printStackTrace(); 
     } 
    } 

,這是我JSONParser代碼

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json =""; 

    //Constructor 
    public JSONParser() { 

    } 


    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) { 

      // Making HTTP request 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       json = sb.toString(); 
       Log.e("JSON", json); 
      } catch (Exception e) { 
       Log.e("Buffer Error", "Error converting result " + e.toString()); 
      } 

      // try parse the string to a JSON object 
      try { 
       jObj = new JSONObject(json);    
      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 

      // return JSON String 
      return jObj; 
     } 
    } 

,這是我的logcat

01-05 16:37:23.382: E/AndroidRuntime(1096): FATAL EXCEPTION: main 
01-05 16:37:23.382: E/AndroidRuntime(1096): android.os.NetworkOnMainThreadException 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at libcore.io.IoBridge.connect(IoBridge.java:112) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at java.net.Socket.connect(Socket.java:842) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at com.example.assetscanner.JSONParser.getJSONFromUrl(JSONParser.java:84) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at com.example.assetscanner.SetLocationActivity.onClick(SetLocationActivity.java:54) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.view.View.performClick(View.java:4162) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.view.View$PerformClick.run(View.java:17082) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.os.Handler.handleCallback(Handler.java:615) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.os.Handler.dispatchMessage(Handler.java:92) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.os.Looper.loop(Looper.java:137) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at android.app.ActivityThread.main(ActivityThread.java:4867) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) 
01-05 16:37:23.382: E/AndroidRuntime(1096):  at dalvik.system.NativeStart.main(Native Method) 

這個logcat的上述主要錯誤,我想是「android.os.NetworkOnMainThreadException」,我已經搜索了這是錯誤,有人說使用AsyncTask或Stri ctMode這個問題。但我不知道我必須把AsyncTask代碼放在哪裏以及如何?

我想知道我的代碼在哪裏出錯,它在主代碼或JSONParser代碼上。

請幫我對於這個問題,感謝的您的關注

+0

使用asynctask的線程進行網絡相關操作。 – Raghunandan

回答

1

對於這樣做很長一段時間採取的操作,我們必須使用另一個線程從UI線程。使用異步任務進行網絡關係操作。它不會阻止你的用戶更新。

快樂編碼

相關問題