2012-03-08 6 views
2

私はlistFragmentを継承するクラスを持っています。クラスの作成時に呼び出されるメソッドでjsonレスポンスを取得するコードを記述しました。バックグラウンドでjsonを取得するために、私はasyncTaskを拡張する新しい内部クラスを作成しました。私はlogcatのjson応答でjsonarraysと文字列を取得できます。しかし、私はそれらを文字列配列に保存し、私のカスタムbaseadapterを渡そうとすると、nullpointer例外が発生します。 フラグメントからリストビューを取り込む

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

が間違って何が起こっているのか分からないのです。私は、forループでこれらの2行をコメントたび

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で結果を得ることができます。私はあなたが新しい文字列を保持するために、あなたの文字列配列にスペースを割り当てる必要があると思う:-(

答えて

0

....誰かが私にいくつかの洞察を提供してください

ちょうどあなたのforループの前に、このような何かを入れてみてください。:

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

助けてくれてありがとうございます。 – vivek

関連する問題