заполнение списка через фрагмент - PullRequest
2 голосов
/ 08 марта 2012

У меня есть класс, расширяющий listFragment.Я написал код для получения ответа JSON в методе, который вызывается в oncreate класса.Для извлечения json в фоновом режиме я создал новый внутренний класс, который расширяет asyncTask.Я могу получить jsonarrays и строки в ответе json в logcat.Но когда я пытаюсь сохранить их в строковом массиве и передать их в свой собственный базовый адаптер, я получаю исключение nullpointer.

    public class OnlineInfo extends ListFragment {

public static String result;
public String[] Technologies1;
public String[] TechnologyDescription1;

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
     downloadjsonresponse();



}

 public class Download extends AsyncTask<String, Void, String>
    {


        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            StringBuilder stringbuilder = new StringBuilder();
            HttpClient client = new DefaultHttpClient();
            HttpGet url = new HttpGet(params[0]);
            try
            {
                Log.d("in background", "in background");
                HttpResponse response = client.execute(url);
                HttpEntity entity = response.getEntity();
                InputStream stream = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
                String line ;
                while((line = reader.readLine()) != null)
                {
                    stringbuilder.append(line);
                }
            }

            catch(ClientProtocolException e)
            {
                Log.d("error in clientprotocol", "error");
                e.printStackTrace();
            }
            catch(IOException e)
            {
                Log.d("error in IO", "error");
                e.printStackTrace();
            }
            return stringbuilder.toString();


        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub

            OnlineInfo.result = result;
            try {
                JSONObject jsonobject = new JSONObject(result);
                JSONArray raja = jsonobject.getJSONArray("Technologies");
                //String raja = jsonobject.getJSONArray("Technologies").getJSONObject(0).getString("desc");
                //Log.d("desc:", raja);
                for(int i=0; i<raja.length();i++)
                {

                    Technologies1[i] = raja.getJSONObject(i).getString("name");
                    TechnologyDescription1[i] = raja.getJSONObject(i).getString("desc");
                    Log.d("technology :", raja.getJSONObject(i).getString("name"));
                    Log.d("technologydescription :", raja.getJSONObject(i).getString("desc"));
                }

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Log.d("desc:", "error");
            }
            getListView().setAdapter(new AdapterForOnlineInfo(getActivity(), OnlineInfo.this.Technologies1, OnlineInfo.this.TechnologyDescription1));


        }

        }

 public void downloadjsonresponse()
    {
        Download jsonresponse = new Download();
        jsonresponse.execute("http://www.avantajsoftwares.com/result.json");

    }
}

Я могу получить результаты в logcat всякий раз, когда комментирую эти две строки в цикле for:

    Technologies1[i] = raja.getJSONObject(i).getString("name");
TechnologyDescription1[i] = raja.getJSONObject(i).getString("desc");

Не знаю, что происходит не так.Пожалуйста, кто-нибудь, дайте мне немного понимания ....: - (

1 Ответ

0 голосов
/ 09 марта 2012

Я думаю, вам нужно выделить место в ваших строковых массивах для хранения новых строк.

Непосредственно перед циклом for попробуйте добавить что-то вроде этого:

Technologies1 = new String[raja.length()];
TechnologyDescription1 = new String[raja.length()];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...