android - 通过 fragment 填充 ListView

标签 android json android-asynctask

我有一个扩展 listFragment 的类。我已经编写了用于在类的 oncreate 中调用的方法中获取 json 响应的代码。为了在后台获取 json,我创建了扩展 asyncTask 的新内部类。我可以在 logcat 的 json 响应中获取 jsonarrays 和字符串。但是当我尝试将它们保存在一个字符串数组中并将它们传递给我的自定义 baseadapter 时,我得到了一个空指针异常。

    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");

    }
}

每当我在 for-loop 中注释这两行时,我都可以在 logcat 中得到结果:

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

不知道怎么回事。请有人给我一些见解....:-(

最佳答案

我认为您需要在字符串数组中分配空间来保存新字符串。

就在您的 for 循环之前,尝试放置如下内容:

Technologies1 = new String[raja.length()];
TechnologyDescription1 = new String[raja.length()];

关于android - 通过 fragment 填充 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623854/

相关文章:

java - 无法从 AsyncTask 更新 UI

java - 使用单个 AsyncTask 向 Python 服务器发送数据,然后从 Python 服务器接收数据

java - 如何将 Facebook 联系人导入到我的 Android 平台应用程序中?

Android 清除 Activity 之间的返回堆栈

android - 拒绝来电的问题

java - 接收json数据时出现JSON解析错误

php - DataTables - 使用搜索栏时出现无效的 JSON 消息

PHP fatal error : Call to undefined function json_decode()

工具栏中的 Android SearchView

android - 如何从 AsyncTask 返回数据到主线程