2013-07-22 5 views
0

В настоящее время я пытаюсь заполнить свой список AsyncTask.listview не заполняется через asynctask

UPDATE: Я обновил свои коды следующим образом:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    new loadSomeStuff(this.getActivity()).execute(); 

} 

public static class loadSomeStuff extends 
      AsyncTask<FragmentActivity, Integer, String> { 

     ProgressDialog dialog; 
     ArrayList<BeanClass4> beanClass4 = new ArrayList<BeanClass4>(); 
     SharedPreferences prefs; 
     public static final String prefName = "SecretFile"; 
     FragmentActivity activity; 

     public loadSomeStuff(FragmentActivity activity2) { 
      // TODO Auto-generated constructor stub 
      this.activity = activity2; 
     } 

     protected void onPreExecute() { 
      dialog = new ProgressDialog(activity); 
      dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      dialog.setCancelable(false); 
      dialog.setIndeterminate(false); 
      dialog.setMessage("hi"); 
      dialog.show(); 
     } 

     protected String doInBackground(FragmentActivity... params) { 
      // TODO Auto-generated method stub 
      beanClass4.clear(); 
      String result = ""; 
      InputStream isr = null; 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       String url = ""; 
       HttpPost httpost = new HttpPost(url); 
       HttpResponse resposne = httpclient.execute(httpost); 
       HttpEntity entity = resposne.getEntity(); 
       isr = entity.getContent(); 
      } catch (Exception e) { 
       Log.e("log_httpconnection", 
         "error in http connection" + e.toString()); 
      } 

      try { 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(isr, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       isr.close(); 
       result = sb.toString(); 
      } catch (Exception e) { 
       Log.e("log_json", "Error converting Result " + e.toString()); 
      } 
      try { 

       JSONArray jArray = new JSONArray(result); 
       for (int i = 0; i < jArray.length(); i++) { 

        JSONObject json = jArray.getJSONObject(i); 
        beanClass4.add(new BeanClass4(json.getString("PhoneName"), 
          json.getString("ModelNumber"), json 
            .getString("PhonePrice"), json 
            .getString("imageurl"), json 
            .getString("moneyunit"), json 
            .getString("newphone"))); 
       } 
       dialog.dismiss(); 
      } catch (Exception e) { 
       Log.e("lag_tag", "ERROR PARSING DATA" + e.toString()); 
       beanClass4.clear(); 
      } 
      return null; 
     } 

     protected void onProgressUpdate(Integer... progress) { 

     } 

     protected void onPostExecute(String result) { 
      listview.setAdapter(new MyListAdapter4(activity, beanClass4)); 
      if (beanClass4.isEmpty()) { 
       Toast.makeText(activity, "No Connection", Toast.LENGTH_LONG) 
         .show(); 
      } 

     } 

    } 

Однако, теперь, когда я открываю мою деятельность. Я вижу progressdialog говорящий привет, затем через 2 ~ 3 секунд я получил это на LogCat:

07-23 13:18:55.236: E/AndroidRuntime(1230): FATAL EXCEPTION: main 
07-23 13:18:55.236: E/AndroidRuntime(1230): java.lang.NullPointerException 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at com.androidarabia.utils.Taby$loadSomeStuff.onPostExecute(Taby.java:268) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at com.androidarabia.utils.Taby$loadSomeStuff.onPostExecute(Taby.java:1) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.os.Looper.loop(Looper.java:137) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at android.app.ActivityThread.main(ActivityThread.java:5293) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
07-23 13:18:55.236: E/AndroidRuntime(1230):  at dalvik.system.NativeStart.main(Native Method) 

Что делать? ВАША ПОМОЩЬ БУДЕТ БОЛЬШЕ ОЦЕНИВАЕТСЯ!

+0

Вам необходимо отправить логарифм или любую стек из этой ошибки. –

+0

Также отправьте код для класса 'MyListAdapter4'. – Vikram

+0

У меня нет ошибки! –

ответ

0

Ну, вы никогда не вызываете фактический метод execute() в AsyncTask ... Вы вызываете только свою собственную версию, которая просто хранит активность почитания и не вызывает super.execute(). На самом деле, перегрузка метода выполнения, как это, плохой дизайн в моем сознании; Я бы рекомендовал создать конструктор в вашем классе LoadSomeStuff, который берет и сохраняет ссылку на активность. Таким образом, ваш код в ArrayListFragment.onActivityCreated может просто вызвать execute() без параметра.

Я действительно не следил за остальной частью вашего кода, так что могут быть и другие проблемы, я не знаю. Но сначала исправьте это.

+0

Я тебя не понял, можете ли вы рассказать мне, что вы имеете в виду в кодах? –

+0

Хорошо, похоже, что вы на правильном пути - ваш обновленный код выглядит точно так же, как я предложил. Теперь у вас есть небольшая проблема в onPostExecute - что-то пустое. Но у меня нет номеров строк, поэтому я не знаю, в какой строке 268. Трассировка стека для NullPointerException говорит, что у вас есть проблема в строке 268. Поэтому проверьте, что там, выясните, что является нулевым и почему. Остальная часть выглядит хорошо. –

0

Ваш метод выполнения является методом перегрузки, а не методом переопределения .call ваш метод выполнения не делает ничего, кроме как инициализировать вашу переменную активности, это не значит, что вы вызываете метод execute из класса AsynTask: вы можете изменить свой метод как конструктор:

 public LoadSomeStuff(FragmentActivity activity) { 
       this.activity = activity; 
      } 

и в своей деятельности:

  @Override 
       public void onActivityCreated(Bundle savedInstanceState) { 
        super.onActivityCreated(savedInstanceState); 
        new loadSomeStuff().execute(this.getActivity()); 

       } 

      to : 
      new loadSomeStuff(this.getActivity()).execute(); 

или вы можете сделать свой класс:

LoadSomeStuff extends AsyncTask<FragmentActivity, Progress, Result>{ 

удалить ваши выполнить метод и называют:.

новый loadSomeStuff() выполнение (this.getActivity());

Надеюсь, что эта помощь :)

+0

, пожалуйста, проверьте мои изменения =) –

+0

listview.setAdapter (новый MyListAdapter4 (activity, beanClass4)); он сказал, что listview имеет значение null –

+0

Да, но listview isnt null Я думаю, что активность равна нулю? plz help = ( –

Смежные вопросы