2014-04-06 2 views
0

네트워크 관련 작업을 실행하기 위해 asynctask를 구현하려고합니다. 하지만 그것이 작동하지 않는 것, 나는 계속 지연 목록을 사용하고 있습니다. 난 그냥 onCreate에 모든 것을 넣어 추가하면NetworkOnSameThread 오류를 피하기 위해 AsyncTask를 사용하려고 시도했습니다.

public class Homepage extends ActionBarActivity{ 

    ListView list; 
    LazyAdapter adapter; 
    private static String url = "http://192.168.1.6/webservice/events.php"; 
    static final String TAG_IMG = "event_img"; 
    static final String TAG_SPONSER= "sponser"; 
    static final String TAG_TITLE= "title"; 
    static final String TAG_LOCATION="event_location"; 
    static final String TAG_TIME="event_time"; 
    static final String TAG_ENDTIME="event_endtime"; 
    static final String TAG_WHOINVITED="event_whoinvited"; 
    static final String TAG_MESSAGE="message"; 
    static final String TAG_DRESSCODE="event_dresscode"; 

    //private List<String> _list = null; 
    //private String[] mStrings = null; 
    ViewFlipper flippy; 
    ArrayList<HashMap<String, String>> eventList = new ArrayList<HashMap<String, String>>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.homepage); 


     //StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     //StrictMode.setThreadPolicy(policy); 



     jsonThread jsonresult = new jsonThread(); 
     jsonresult.execute(); 
     adapter=new LazyAdapter(this, eventList); 


     Button b=(Button)findViewById(R.id.button1); 
     b.setOnClickListener(listener); 


    }//end of onCreate\\\ 

    private class jsonThread extends AsyncTask<String, String, JSONArray>{ 

     @Override 
     protected JSONArray doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      ServiceHandler sh = new ServiceHandler(); 
      String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET); 
      JSONArray jArray = null; 
      JSONObject json; 
      //_list = new ArrayList<String>(); 

      try { 
       json = new JSONObject(jsonStr); 
       jArray = json.getJSONArray("posts"); 
       Log.d("jarray", "jarray post "+jArray); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return jArray; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
     } 
     @Override 
     protected void onPostExecute(JSONArray result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      for(int u=0;u<result.length();u++){ 
       HashMap<String, String> map = new HashMap<String, String>(); 
       JSONObject json_data; 
       try { 
        json_data = result.getJSONObject(u); 
        String myevent_img = json_data.getString(TAG_IMG); 
        String sponser = json_data.getString(TAG_SPONSER); 
        String title = json_data.getString(TAG_TITLE); 
        String location = json_data.getString(TAG_LOCATION); 
        String time = json_data.getString(TAG_TIME); 
        String endtime = json_data.getString(TAG_ENDTIME); 
        String message = json_data.getString(TAG_MESSAGE); 
        String whoinvited = json_data.getString(TAG_WHOINVITED); 
        String dresscode = json_data.getString(TAG_DRESSCODE); 

        //_list.add(myevent_img); 
        map.put(TAG_SPONSER, sponser); 
        map.put(TAG_TITLE, title); 
        map.put(TAG_LOCATION, location); 
        map.put(TAG_TIME, time); 
        map.put(TAG_ENDTIME, endtime); 
        map.put(TAG_MESSAGE, message); 
        map.put(TAG_WHOINVITED, whoinvited); 
        map.put(TAG_DRESSCODE, dresscode); 
        map.put(TAG_IMG, myevent_img); 
        Log.d("jobj ", "event_img"+myevent_img); 
        Log.d("hashmap ", "sponser "+map.get("sponser").toString()); 
        // need to put this to transfer the list to mstrings. 
        //mStrings=new String[_list.size()]; 
        //mStrings = _list.toArray(mStrings); 
        eventList.add(map); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      list=(ListView)findViewById(R.id.list); 

      list.setAdapter(adapter); 
     } 
    } 

} 

이 코드는 잘 작동

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

      StrictMode.setThreadPolicy(policy); 

//// 편집

public class Homepage extends ActionBarActivity{ 

    ListView list; 
    LazyAdapter adapter; 
    private static String url = "http://192.168.1.6/webservice/events.php"; 
    static final String TAG_IMG = "event_img"; 
    static final String TAG_SPONSER= "sponser"; 
    static final String TAG_TITLE= "title"; 
    static final String TAG_LOCATION="event_location"; 
    static final String TAG_TIME="event_time"; 
    static final String TAG_ENDTIME="event_endtime"; 
    static final String TAG_WHOINVITED="event_whoinvited"; 
    static final String TAG_MESSAGE="message"; 
    static final String TAG_DRESSCODE="event_dresscode"; 

    //private List<String> _list = null; 
    //private String[] mStrings = null; 
    ViewFlipper flippy; 
    ArrayList<HashMap<String, String>> eventList = new ArrayList<HashMap<String, String>>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.homepage); 



     jsonThread jsonresult = new jsonThread(); 
     jsonresult.execute(); 



     Button b=(Button)findViewById(R.id.button1); 
     b.setOnClickListener(listener); 


    }//end of onCreate\\\ 

    private class jsonThread extends AsyncTask<String, String, ArrayList<HashMap<String, String>>>{ 

     @Override 
     protected ArrayList<HashMap<String,String>> doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      ServiceHandler sh = new ServiceHandler(); 
      String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET); 
      JSONArray jArray = null; 
      JSONObject json; 
      //_list = new ArrayList<String>(); 

      try { 
       json = new JSONObject(jsonStr); 
       jArray = json.getJSONArray("posts"); 
       Log.d("jarray", "jarray post "+jArray); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      for(int u=0;u<jArray.length();u++){ 
       HashMap<String, String> map = new HashMap<String, String>(); 
       JSONObject json_data; 
       try { 
        json_data = jArray.getJSONObject(u); 
        String myevent_img = json_data.getString(TAG_IMG); 
        String sponser = json_data.getString(TAG_SPONSER); 
        String title = json_data.getString(TAG_TITLE); 
        String location = json_data.getString(TAG_LOCATION); 
        String time = json_data.getString(TAG_TIME); 
        String endtime = json_data.getString(TAG_ENDTIME); 
        String message = json_data.getString(TAG_MESSAGE); 
        String whoinvited = json_data.getString(TAG_WHOINVITED); 
        String dresscode = json_data.getString(TAG_DRESSCODE); 

        //_list.add(myevent_img); 
        map.put(TAG_SPONSER, sponser); 
        map.put(TAG_TITLE, title); 
        map.put(TAG_LOCATION, location); 
        map.put(TAG_TIME, time); 
        map.put(TAG_ENDTIME, endtime); 
        map.put(TAG_MESSAGE, message); 
        map.put(TAG_WHOINVITED, whoinvited); 
        map.put(TAG_DRESSCODE, dresscode); 
        map.put(TAG_IMG, myevent_img); 
        Log.d("jobj ", "event_img"+myevent_img); 
        Log.d("hashmap ", "sponser "+map.get("sponser").toString()); 
        // need to put this to transfer the list to mstrings. 
        //mStrings=new String[_list.size()]; 
        //mStrings = _list.toArray(mStrings); 
        eventList.add(map); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      return eventList; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
     } 
     @Override 
     protected void onPostExecute(ArrayList<HashMap<String,String>> result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

      list=(ListView)findViewById(R.id.list); 
      adapter=new LazyAdapter(Homepage.this, eventList); 
      list.setAdapter(adapter); 
     } 




    } 


} 

/////// // LOGCAT \\\\

04-05 22:24:34.204: W/dalvikvm(5680): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
04-05 22:24:34.524: E/AndroidRuntime(5680): FATAL EXCEPTION: main 
04-05 22:24:34.524: E/AndroidRuntime(5680): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wordpress.yourhappening.happening/com.wordpress.yourhappening.happening.Homepage}: java.lang.NullPointerException 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.os.Looper.loop(Looper.java:137) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at java.lang.reflect.Method.invoke(Method.java:525) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at dalvik.system.NativeStart.main(Native Method) 
04-05 22:24:34.524: E/AndroidRuntime(5680): Caused by: java.lang.NullPointerException 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at com.wordpress.yourhappening.happening.Homepage.onCreate(Homepage.java:94) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.Activity.performCreate(Activity.java:5133) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
04-05 22:24:34.524: E/AndroidRuntime(5680):  ... 11 more 
+1

스택 추적을 게시하십시오. – ChuongPham

답변

1

adapterListViewonPostExecute()으로 설정하려고하면 null입니다.

이동

onPostExecute()
adapter=new LazyAdapter(Homepage.this, eventList); 

또한

list.setAdapter(adapter); 

하기 전에, 당신의 for loop가 아마 doInBackground()

에 있어야합니다 그리고 당신은 지적 작동한다는대로 엄격 모드를 사용하지 않는 . 왜 그런지에 대한 문서 및 수많은 게시물을 볼 수 있습니다.

편집 로그 캣과 의견

listener을 설정하기 전에 이동

onCreate()- onPostExecute()에서
list=(ListView)findViewById(R.id.list); 

을보고 난 후에. 그것이 귀하의 NPE의 원인입니다.

+0

이미 시도했습니다. 만약 내가'adapter = new LazyAdapter (this, eventList);'를 onPostExecute에 넣으면 컴파일 할 수있는 유일한 방법은 이것을 Homepage.this로 변경하는 것입니다. 그 jus는 나에게 널 포인터를 준다. 그리고 내 for 루프를 doInBackground에 넣으려고했지만 여전히 작동하지 않습니다. – crushman

+0

아, 그래, 나는 그것을 놓쳤지만 지금 편집했습니다. 그러나 그것은'eventList'가 작업이 끝날 때까지 채워지지 않았기 때문에 필요합니다. 그런 식으로 실행하고 logcat을 게시하면 'null'이 무엇인지 알 수 있습니다. stacktrace 없이는 불가능하지만 많은 것들이 될 수 있습니다. – codeMagic

+0

스택 트레이스는 무엇을 말하는 것입니까? logcat에 대한 또 다른 단어입니까? – crushman

관련 문제