2016-01-19 2 views
-3

В настоящее время я работаю над приложением android для извлечения данных с сервера. Он падает, и я получаю NullPointerException. Может ли кто-нибудь помочь мне изменить мой код/​​перечислить мою ошибку?java.lang.NullPointerException: попытка вызвать виртуальный метод java.util.Iterator java.util.ArrayList

Вот мой код (я прочитал через несколько форумов, но на самом деле не понимаю, как решить мою проблему)

public class MainActivity extends AppCompatActivity { 

    ListView lvPost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lvPost = (ListView)findViewById(R.id.lvPost); 

     String url2 = "http://192.168.0.146/client/login.php?format=json"; 
     PostResponseAsyncTask task2 = new PostResponseAsyncTask(MainActivity.this, new AsyncResponse() { 
      @Override 
      public void processFinish(String s) { 
       ArrayList<Post> postList = 
         new JsonConverter<Post>().toArrayList(s, Post.class); 

       ArrayList<String> titles = new ArrayList<String>(); 

       for (Post value:postList) { 
        titles.add(value.post_title); 
       } 

       ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, 
         android.R.layout.simple_list_item_1, titles); 

       lvPost.setAdapter(adapter); 
      } 
     }); 

     task2.execute(url2); 
    } 
} 

Вот мой LogCat

java.lang.NullPointerException: Attempt to invoke virtual method  'java.util.Iterator java.util.ArrayList.iterator()' on a null object reference 
    at com.example.1231.t12.MainActivity$1.processFinish(MainActivity.java:40) 
    at com.kosalgeek.genasync12.PostResponseAsyncTask.onPostExecute(PostResponseAsyncTask.java:188) 
    at com.kosalgeek.genasync12.PostResponseAsyncTask.onPostExecute(PostResponseAsyncTask.java:27) 
    at android.os.AsyncTask.finish(AsyncTask.java:632) 
    at android.os.AsyncTask.access$600(AsyncTask.java:177) 
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:6075) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
+0

может показать нам, какая строка идет не так, потому что я вижу MainActivity: 40, но код u показывает havn't строку 40 – herokingsley

+0

Может быть, никаких данных в строках s в processFinish(). –

+0

Это полное кодирование моего Mainactivity.java – Rean

ответ

2

Похоже String s параметр равен нулю, используйте регистрацию для подтверждения. В таком случае Gson.fromJson() возвращает null. Затем вы пытаетесь выполнить итерацию по списку postList, который равен null, и этот результат равен NullPointerException.

+0

Спасибо за ответ, но как я могу использовать ведение журнала? создать новый java.class или добавить в мою Mainactivity.java? – Rean

+0

Проверьте http://developer.android.com/reference/android/util/Log.html. Или вы можете просто остановиться на отладчике и проверить значение переменной. Или поставьте 'Preconditions.checkNotNull (s)' и т. Д. –

+0

Как переписать мое кодирование, чтобы я мог решить свою проблему? – Rean

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