2015-11-18 2 views
0

У меня проблема с моим классом, который использует http-соединение. Ошибка для подключения, я читал, что ошибка означает, что я должен использовать AsyncTask, но я использовал ее, и мое приложение все еще не работает. Здесь есть код:android.os.NetworkOnMainThreadException, но я использовал AsyncTask

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    new GetCoursesDetails().execute(); 
} 
class GetCoursesDetails extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(InfoCorsi.this); 
     pDialog.setMessage("Loading courses details. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    /** 
    * Getting product details in background thread 
    * */ 
    protected String doInBackground(String... params){ 

     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       // Check for success tag 
       int success; 
       try { 
        // Building Parameters 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("pid", pid)); 

        // getting product details by making HTTP request 
        // Note that product details url will use GET request 
        JSONObject json = jParser.makeHttpRequest(
          url_info_corsi, "GET", params); 

        // check your log for json response 
        Log.d("Single course Details", json.toString()); 

        // json success tag 
        success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         // successfully received product details 
         JSONArray productObj = json 
           .getJSONArray(TAG_COURSES); // JSON Array 

         // get first product object from JSON Array 
         JSONObject product = productObj.getJSONObject(0); 



        }else{ 
         // product with pid not found 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once got all details 
     pDialog.dismiss(); 
    } 
} 

Класс jSONParser работу, потому что я использовал его, чтобы сделать подключение к другому классу, то ошибка в этом случае имеет типа android.os.NetworkOnMainThreadException:

1-18 13:44:46.478 23304-23318/? E/art: Failed sending reply to debugger: Broken pipe 
11-18 13:44:53.635 23304-E/AndroidRuntime: FATAL EXCEPTION: main 
11-18 13:44:53.635 23304-E/AndroidRuntime: Process: com.piemonteorientale.cus.cuspo, PID: 23304 
11-18 13:44:53.635 23304-E/AndroidRuntime: android.os.NetworkOnMainThreadException 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at libcore.io.IoBridge.connect(IoBridge.java:122) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at java.net.Socket.connect(Socket.java:882) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:124) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:149) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at com.piemonteorientale.cus.cuspo.JSONParser.makeHttpRequest(JSONParser.java:62) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at com.piemonteorientale.cus.cuspo.InfoCorsi$GetCoursesDetails$1.run(InfoCorsi.java:89) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at android.os.Handler.handleCallback(Handler.java:739) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:95) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5290) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
11-18 13:44:53.635 23304-E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
+0

Прочитайте, прежде чем прыгать и реализовать. – Isham

+0

опубликовать класс JSONParser –

ответ

2

Избавиться от runOnUiThread() от вашего метода doInBackground().

+0

привет, я проверял этот [asnwer] (http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts/17583324# 17583324) для пользователя levit о подключении к Интернету, если есть интернет, есть некоторые проблемы с 'ping' в некоторых устройствах в качестве комментариев, заявленных, я хочу, чтобы ваша помощь узнала, есть ли у вас уже ответ, если нет плохого сообщения. вы считаете, что levit лучше всего применять в моем приложении? – Moudiz

0

Если вы хотите показать свой прогресс, вы можете использовать AsyncTask.onProgressUpdate (Progress...). Этот метод будет работать в потоке пользовательского интерфейса. Не делайте из нее никаких сетевых вызовов. Используйте AsyncTask.publishProgress (Progress...) из вашего метода AsyncTask.doInBackground (Params...) для вызова обновления выполнения.

См AsyncTask API Documentation

Смежные вопросы