2014-03-13 11 views
2

안녕하세요, AsyncTask을 사용하여 PHP 파일에서 데이터를 가져옵니다.하지만 애플리케이션을 실행할 때이 오류가 발생합니다!AsyncTask에서 doInBackground()를 실행하는 동안 오류가 발생했습니다.

List<Online_Messages_item> o; 
public class RequestPostsTask extends AsyncTask<Void, Void, Boolean> { 
     ProgressDialog pdLoading; 


     @Override 
     protected void onPreExecute() { 
      pdLoading = new ProgressDialog(Messages_online.this); 
      pdLoading.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      pdLoading.setMessage("please wait ..."); 
      pdLoading.setIndeterminate(false); 
      pdLoading.setCancelable(false); 
      pdLoading.show(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      boolean status = false; 
      HttpURLConnection urlConnection = null; 

      try { 
       URL url = new URL("my url"); 

       urlConnection = (HttpURLConnection) url.openConnection(); 
       Charset charset = Charset.forName("UTF8"); 
       int responseCode = urlConnection.getResponseCode(); 

       if (responseCode == HttpURLConnection.HTTP_OK) { 
        BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), charset)); 
        if (in != null) { 
         StringBuilder strBuilder = new StringBuilder(); 
         int ch = 0; 
         while ((ch = in.read()) != -1) 
          strBuilder.append((char) ch); 
         String response = strBuilder.toString(); 
         Log.d("Server response:", response); 

         JSONObject jObject = new JSONObject(response); 
         JSONArray jsonArray = jObject.getJSONArray("posts"); 
         for(int i=0; i<jsonArray.length(); i++){ 
          Online_Messages_item omi = new Online_Messages_item(); 
          omi.setId(jsonArray.getJSONObject(i).getLong("ID")); 
          omi.settext(jsonArray.getJSONObject(i).getString("Text")); 
          omi.setlikes(jsonArray.getJSONObject(i).getString("Likes")); 
          omi.setpt(jsonArray.getJSONObject(i).getString("PublishTime")); 
          o.add(omi); 
         } 
         if(o.size() >= 1) 
          status = true; 
        } 

        in.close(); 
       } 
      } 
      catch(MalformedURLException e){ 
       e.printStackTrace(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       urlConnection.disconnect(); 
      } 

      return status; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      BaseAdapter ba=new Messages_online_adapter(Messages_online.this,o); 
      listView.setAdapter(ba); 
      pdLoading.dismiss(); 

     } 
    } 

여기가 로그 캣

03-13 08:12:05.111: E/AndroidRuntime(1232): FATAL EXCEPTION: AsyncTask #1 03 
-13 08:12:05.111: E/AndroidRuntime(1232): java.lang.RuntimeException: An error occured while executing doInBackground() 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.lang.Thread.run(Thread.java:856) 
03-13 08:12:05.111: E/AndroidRuntime(1232): Caused by: java.lang.NullPointerException 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at mr.zereshk.online.Messages_online$RequestPostsTask.doInBackground(Messages_online.java:80) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at mr.zereshk.online.Messages_online$RequestPostsTask.doInBackground(Messages_online.java:1) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
03-13 08:12:05.111: E/AndroidRuntime(1232):  ... 4 more 

도움입니까? 미리 감사드립니다!

+0

80' Messages_online.java' 란 무엇입니까? – Raghunandan

+0

@Raghunandan 활동입니다 – Mahfa

+0

80 번 라인에 무엇이 있습니까? 귀하의 코드에 80 번 라인을 나타낼 수 있습니까? – Raghunandan

답변

4
List<Online_Messages_item> o; 

o을 초기화하지 마십시오.

어딘가에 넣어야합니다. o = new ArrayList<Online_Messages_item>();. 난 생성자를 제안

+0

나는 이미 80 행을 찾은 것 같아. – Raghunandan

+1

위의 점은 stacktrace가 doInBackground를 가리키고 있음을 나타냅니다. 나는 "코드"를 확인했다 .. @Raghunandan – Blackbelt

+0

고마워! – Mahfa

2

블랙 벨트로 제안, 당신 RequestPostsTask 클래스에 생성자를 추가해야합니다. 클래스에 다음 코드 줄을 추가하기 만하면됩니다.

public RequestPostsTask(){ o = new ArrayList<Online_Messages_item>(); } 
관련 문제