2014-09-27 2 views
0

atm Я пишу небольшую программу, которая связывается с БД MYSQL на моем веб-сервере. Я использую json для отправки запроса и хочу отобразить ответ в них в списке.Простой адаптер - NullPointerException

Я хранил данные от json в Arraylist> и записываю их позже в ListAdapter.

Он работает нормально, но каждый раз при первом запуске приложения я получаю исключение NullPointerException и приложение завершает работу. Если я снова запустил приложение, все будет хорошо.

часть моего Кодекса:

public void updateJSONdata() { 



    mCommentList = new ArrayList<HashMap<String, String>>(); 


    JSONParser jParser = new JSONParser(); 
    JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL); 

    try { 

     mComments = json.getJSONArray(TAG_POSTS); 

     for (int i = 0; i < mComments.length(); i++) { 
      JSONObject c = mComments.getJSONObject(i); 


      String id = c.getString(TAG_POST_ID); 
      String username = c.getString(TAG_USERNAME); 
      String title = c.getString(TAG_TITLE); 
      String content = c.getString(TAG_MESSAGE); 
      String datum = c.getString(TAG_DATUM); 
      String aktusr = c.getString(TAG_AKTUSR); 
      String maxusr = c.getString(TAG_MAXUSR); 
      String gender = c.getString(TAG_GENDER); 
      String activity = c.getString(TAG_ACTIVITY); 
      String category = c.getString(TAG_CATEGORY); 

      String cat = c.getString(TAG_CAT_ID); 

      int catid = Integer.parseInt(cat); 


      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 


      map.put(TAG_POST_ID, id); 
      map.put(TAG_USERNAME, username); 
      map.put(TAG_TITLE, title); 
      map.put(TAG_MESSAGE, content); 
      map.put(TAG_DATUM, datum); 
      map.put(TAG_AKTUSR, aktusr); 
      map.put(TAG_MAXUSR, maxusr); 
      map.put(TAG_GENDER, gender); 
      map.put(TAG_ACTIVITY, activity); 
      map.put(TAG_CATEGORY, category); 


      //map.put(TAG_CAT, category[catid-1]); 
      map.put(TAG_PIC_ID, Integer.toString(PIC[catid-1])); 

      mCommentList.add(map); 

     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    //String[] from = {TAG_CAT, TAG_POST_ID, TAG_TITLE, TAG_MESSAGE, TAG_USERNAME}; 
} 


private void updateList() { 

    ListAdapter adapter = new SimpleAdapter(this, mCommentList, 
      R.layout.single_comment, new String[] {TAG_PIC_ID,TAG_CATEGORY, TAG_ACTIVITY, TAG_DATUM, TAG_AKTUSR, TAG_MAXUSR, TAG_GENDER, /*TAG_POST_ID,*/ TAG_TITLE, TAG_MESSAGE, 
        TAG_USERNAME }, new int[] { R.id.imgrow, R.id.category, R.id.activity/*R.id.id*/ , R.id.datum, R.id.aktusr, R.id.maxusr, R.id.gender, /*R.id.category,*/ R.id.title, R.id.message, 
        R.id.username }); 


    setListAdapter(adapter); 


    ListView lv = getListView();  
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      int intid = (int)id; 
      Toast.makeText(getApplicationContext(), mCommentList.get(intid).get(TAG_POST_ID).toString(), Toast.LENGTH_SHORT).show(); 



     } 
    }); 
} 

public class LoadComments extends AsyncTask<Void, Void, Boolean> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ReadComments.this); 
     pDialog.setMessage("Loading Comments..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected Boolean doInBackground(Void... arg0) { 
     //we will develop this method in version 2 
     updateJSONdata(); 
     return null; 

    } 


    @Override 
    protected void onPostExecute(Boolean result) { 
     super.onPostExecute(result); 
     pDialog.dismiss(); 
     //we will develop this method in version 2 
     updateList(); 
    } 
} 

09-27 15: 14: 17,593: E/AndroidRuntime (7876): FATAL ИСКЛЮЧЕНИЕ: главный 09-27 15: 14: 17,593: E/AndroidRuntime (7876): Процесс: com.example.login_remote, PID: 7876 09-27 15: 14: 17.593: E/AndroidRuntime (7876): java.lang.NullPointerException 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.widget.SimpleAdapter.getCount (SimpleAdapter.java:93) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): на android.widget.ListView.setAdapter (ListView.java : 480) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.app.ListActivity.setListAdapter (ListActivity.java:265) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.example.login_remote.ReadComments.updateList (ReadComments.java:270) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.example.login_remote.ReadComments.access $ 2 (ReadComments.java:256) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.example.login_remote.ReadComments $ LoadCategorys.onPostExecute (ReadComments.java:413) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.example.login_remote.ReadComments $ LoadCategorys.onPostExecute (ReadComments.java:1) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.os.AsyncTask.finish (AsyncTask .java: 632) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.os.AsyncTask.ac cess $ 600 (AsyncTask.java:177) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:645) 09-27 15:14 : 17.593: E/AndroidRuntime (7876): at android.os.Handler.dispatchMessage (Handler.java:102) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): на android.os.Looper.loop (Looper.java:212) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at android.app.ActivityThread.main (ActivityThread.java:5151) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at java.lang.reflect.Method.invokeNative (собственный способ) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at java.lang.reflect.Method.invoke (метод. java: 515) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:684) 09-27 15: 14: 17.593: E/AndroidRuntime (7876): в dalvik.system.NativeStart.main (Native Method)

так это выглядит, проблема линия

09-27 15: 14: 17,593: E/AndroidRuntime (7876) : at com.example.login_remote.ReadComments.updateList (ReadComments.java:270)

setListAdapter (адаптер);

Может ли кто-нибудь из вас увидеть ошибку? Я не знаю, что здесь не так, и почему Ошибка появляется только при первом запуске.

ТНХ, Greetz AllesFAM

+1

Вы уверены, что mCommentList не имеет значения null при создании адаптера? – Pavlos

ответ

0

, что делаете звонит AsyncTask который не запускать задачи в стороне от вашего пользовательского интерфейса, чтобы вы отобразить содержимое, прежде чем даже получить ваши комментарии из HTTP запроса решить, что у вас есть много способов

Во-первых, вы можете заполнить массив mComments с временными данными вручную, как этот

mCommentList = new ArrayList<HashMap<String, String>>(); 
HashMap<String, String> map = new HashMap<String, String>(); 
map.add("",""); 
mCommentList.add(map); 

или Второй способ: вы можете ждать вашего AsyncTask г esult перед отображением его в UI, чтобы сделать это мне нужен код для вызова LoadComments, но вы можете сделать это просто, как это в вызове

Boolean finished = LoadComments.execute().get(); 
+0

я называю LoadComments() в OnResume() Funktion защищен недействительный onResume() { \t // TODO автоматической генерации метод заглушки \t super.onResume(); \t // загрузка комментариев через AsyncTask \t new LoadComments(). Execute(); } Но где я должен проверить законченное? Потому что мне нужно это между UpdateJsonData и обновлением или? – AllesFAM

+0

, который решил вашу проблему? –

+0

Я использовал второй, он решил мою проблему thx mate – AllesFAM

0

я называю LoadComments() в() Funktion OnResume

protected void onResume() { // TODO Auto-generated method stub super.onResume(); //loading the comments via AsyncTask new LoadComments().execute(); }

Но где я должен проверить законченное? Потому что мне нужно это между UpdateJsonData и обновлением или? -

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