2015-07-08 3 views
0

Я получаю данные от MySQL и показываю в формате json с помощью php, теперь хочу получить и показать эти данные на Android Я получаю данные и сохраняю в переменной myJSON и использовать этот код, чтобы показать данныеAndroid: остановитесь при получении списка данных с помощью json

String myJSON; 

private static final String TAG_NEWS="allnews"; 
private static final String TAG_ID = "id"; 
private static final String TAG_ONVAN = "Onvan"; 
private static final String TAG_TARIKH ="Tarikh"; 
private static final String TAG_CNID ="cnid"; 

JSONArray jnews = null; 

ArrayList<HashMap<String, String>> newsList; 

ListView list; 

и

protected void SaveNewNews(){ 
     try { 
      JSONObject jsonObj = new JSONObject(myJSON); 
      jnews = jsonObj.getJSONArray(TAG_NEWS); 

      Log.i(DBAdapter.TAG, "news " + jnews.length()); 

      for(int i=0;i<jnews.length();i++){ 
        JSONObject c = jnews.getJSONObject(i); 
        String id = c.getString(TAG_ID); 
        String title = c.getString(TAG_ONVAN); 
        String data = c.getString(TAG_TARIKH); 
        String nid = c.getString(TAG_CNID); 

        Log.i(DBAdapter.TAG, id); 

        HashMap<String,String> nnews = new HashMap<String,String>(); 

        nnews.put(TAG_ID,id); 
        nnews.put(TAG_ONVAN,title); 
        nnews.put(TAG_TARIKH,data); 
        nnews.put(TAG_CNID,nid); 

        newsList.add(nnews); 

        ListAdapter adapter = new SimpleAdapter(
          SplashActivity.this, personList, R.layout.list_item, 
          new String[]{TAG_ID,TAG_ONVAN,TAG_TARIKH,TAG_CNID}, 
          new int[]{R.id.id, R.id.title, R.id.data, R.id.nid} 
        ); 

        list.setAdapter(adapter); 

      } 

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

    } 

в журнале вы можете увидеть его получить список данных news 5 и получить первый идентификатор 35, но приложение остановиться и ничего не делать

07-08 09:36:43.456: I/Ekhtraat app(1333): news 5 
07-08 09:36:43.456: I/Ekhtraat app(1333): 35 
07-08 09:36:43.476: W/System.err(1333): java.lang.NullPointerException 
07-08 09:36:43.486: W/System.err(1333):  at ir.sheikhoo.ekhteraat_app.GetActivity.SaveNewNews(GetActivity.java:315) 
07-08 09:36:43.496: W/System.err(1333):  at ir.sheikhoo.ekhteraat_app.GetActivity$GetData.onPostExecute(GetActivity.java:256) 
07-08 09:36:43.496: W/System.err(1333):  at ir.sheikhoo.ekhteraat_app.GetActivity$GetData.onPostExecute(GetActivity.java:1) 
07-08 09:36:43.496: W/System.err(1333):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
07-08 09:36:43.507: W/System.err(1333):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
07-08 09:36:43.507: W/System.err(1333):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
07-08 09:36:43.507: W/System.err(1333):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 09:36:43.507: W/System.err(1333):  at android.os.Looper.loop(Looper.java:137) 
07-08 09:36:43.516: W/System.err(1333):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
07-08 09:36:43.516: W/System.err(1333):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 09:36:43.516: W/System.err(1333):  at java.lang.reflect.Method.invoke(Method.java:525) 
07-08 09:36:43.526: W/System.err(1333):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
07-08 09:36:43.526: W/System.err(1333):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-08 09:36:43.526: W/System.err(1333):  at dalvik.system.NativeStart.main(Native Method) 
07-08 09:36:43.536: I/Choreographer(1333): Skipped 168 frames! The application may be doing too much work on its main thread. 

Не могли бы вы проверить, где это произошло.

+1

Ваша ошибка NullPointer находится в методе SaveNewNews() в GetActivity. Вы дали нам showList(); –

+0

Я не пишу полный код здесь, могу видеть его ==> String myJSON; \t закрытый статический конечный String TAG_NEWS = "allnews"; private static final String TAG_ID = "id"; приватная статическая конечная строка TAG_ONVAN = "Onvan"; приватная статическая финальная строка TAG_TARIKH = "Tarikh"; закрытый статический конечный String TAG_CNID = "cnid"; JSONArray jnews = null; ArrayList > newsList; – sadegh

+1

Пожалуйста, включите источник для строки 315 в GetActivity.java –

ответ

1

Не похоже, что вы инициализировали newsList.

Добавить в строку newsList = new ArrayList<>(); и посмотреть, куда вас доставит. (Попробуйте в начале метода SaveNewNews()).

В качестве альтернативы изменить линию ArrayList<HashMap<String, String>> newsList; также инициализировать, т.е. ArrayList<HashMap<String, String>> newsList = new ArrayList<>();

+0

спасибо, ошибка исправление. – sadegh

+0

Вы имеете в виду использование c.getString (TAG_ID); а не только TAG_ID? –

+0

спасибо, он решает: D – sadegh

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