2017-04-22 151 views
0

我开发的应用程序必须检索有关mysql数据库的信息, 当我执行我的应用程序时,它可以工作,但它在显示列表视图时会阻塞。Android错误异步任务

这里是我的代码

public class search_ville extends Activity { 
    static String purl; 
    public static ArrayList <etablissement> Lesetab = new ArrayList < >(); 
    private ListView lvH; 
    public static etablissement etabSELECT; 
    private ProgressDialog progressDialog; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search_ville); 
     lvH = (ListView) findViewById(R.id.listViewH); 
     chargerJeuDessaie(); 
     rafraichirListView(); 

     lvH.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView <?> parent, View view, int position, long hid) { 
       afficherDesc(parent, view, position, hid); 
      } 
     }); 
    } 

    public void afficherDesc(AdapterView <?> parent, View view, int position, long hid) { 
     search_ville.etabSELECT = (etablissement) parent.getItemAtPosition(position); 
     Intent intent = new Intent(getApplicationContext(), DetailEtab.class); 
     startActivity(intent); 
    } 

    private void chargerJeuDessaie() { 
     progressDialog = progressDialog.show(this, "Gestion des etabs", "Telechargement en cours"); 
     MonAsyncTaskHttp monAsyncTaskHttp = new MonAsyncTaskHttp() { 

      @Override 
      protected void onPostExecute(Object o) { 
       super.onPostExecute(o); 
       search_ville.Lesetab.clear(); 
       try { 
        JSONArray jsonArray = new JSONArray(o.toString()); 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
         etablissement etab = etablissement.factoryEtab(jsonObject); 
         search_ville.Lesetab.add(etab); 

         rafraichirListView(); 

        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       progressDialog.dismiss(); 
      } 
     }; 
     monAsyncTaskHttp.execute("requete=getLesetablissement"); 
    } 
    public void rafraichirListView() { 
     ArrayAdapter <etablissement> etablissementsadapter = new ArrayAdapter <etablissement> (search_ville.this, android.R.layout.simple_list_item_1, Lesetab); 
     lvH.setAdapter(etablissementsadapter); 
    } 
} 

错误日志:

04-22 16:45:48.815 21234-21234/ddec.applicationddec E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.NullPointerException 
      at ddec.applicationddec.search_ville$2.onPostExecute(search_ville.java:68) 
      at android.os.AsyncTask.finish(AsyncTask.java:631) 
      at android.os.AsyncTask.access$600(AsyncTask.java:177) 
      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:176) 
      at android.app.ActivityThread.main(ActivityThread.java:5419) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
      at dalvik.system.NativeStart.main(Native Method) 

如果任何人都可以解释如何纠正这种

+0

可能重复[什么是NullPointerException,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix - ) –

回答

0

你得到的onPostExecute梅索德一个NullPointerException。 jsonArray和Lesetab从我所能看到的都可以。所以Object o可能是null。

-Update- 基于doInBackground方法您提供的代码我认为抛出了一个IOException,但是您没有注意到它,因为您没有正确处理它而捕获它。 字符串chainejson保持为空并返回。然后使用null作为参数调用onPostExecute。这导致NullPointerException。

要找出真正的问题,可以记录IOException。

+0

所以我必须说,它不是空? –

+0

MonAsyncTaskHttp的doInBackground方法返回什么?我想抛出NullPointerException异常,当你调用o.toString() – mojth

+0

保护对象doInBackground(Object []对象PARAMS) { 如果(MonAsyncTaskHttp.MonOkhttpclient == NULL){ MonAsyncTaskHttp.MonOkhttpclient =新OkHttpClient(); CookieManager cm = new CookieManager(); cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL); CookieHandler.setDefault(cm); ; } –