Как решить NullPointerException и ThreadException Ошибка в Android

Я получаю ошибку NullPointerException в своем коде, я сузил ее до части кода, которая вызывает исключение. Кто-нибудь может помочь?

url = new URL(Http.toString());

  Iterator is a raw type. References to generic type Iterator<E> should be parameterized    User_menu.java  /RSBUYclient/src/com/example/rsbuyclient    line 141    Java Problem
04-24 11:34:29.756: W/System.err(32259): java.lang.NullPointerException

И у меня есть вторая проблема: когда я нажимаю на эту кнопку, я получаю следующее исключение: "android.view.ViewRootImpl$CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений". Как я могу решить? Благодарю.

        private OnClickListener btsearchitemListener = new OnClickListener() 
    {
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub  

            final  Handler handler = new Handler();
            handler.post(new Runnable() {
            //User_menu.this.runOnUiThread(new Runnable() {
            //User_menu.this.runOnUiThread(new Runnable(){
                public void run() {
                    // TODO Auto-generated method stub                                          
                    editText1.setHint("");

                    //URL url ;
                    //String Http_keyWord = "http://tw.search.bid.yahoo.com/search/auction/product?p=%s", Http, Keyword;
                    //String Http_keyWord = "https://tw.search.yahoo.com/search?p=u+zj6&fr=yfp&ei=utf-8&v=0", Http, Keyword;    

                    AllDatainfos = new ArrayList<HashMap<String, Object>>();

                    Keyword = editText1.getText().toString().trim();
                    tvspottempp = (TextView)findViewById(R.id.tvspottempp);
                    tvspottempp.setText("Keyword:"+Keyword);                                                

                    Http = String.format(Http_keyWord, UTF8EnCode(Keyword));
                    tvspottempp1 = (TextView)findViewById(R.id.tvspottempp1);
                    tvspottempp1.setText("Http:"+Http);
                 }  
              });   

            User_menu.this.runOnUiThread(new Runnable(){
                    public void run() {
                        try {                                           
                                url = new URL(Http.toString());
                                tvspottempp2 = (TextView)findViewById(R.id.tvspottempp2);
                                tvspottempp2.setText("url:"+url);

                                Document doc;                   
                                doc = Jsoup.parse(url, 3000);
                                tvspottempp2 = (TextView)findViewById(R.id.tvspottempp3);
                                tvspottempp2.setText("doc:"+doc);

                                Elements paramDocuments = doc.select("#srp_result_list, #srp_gaze_list").select(".grid-type.yui3-g > *");

                                Iterator localIterator = paramDocuments.select("#srp_result_list, #srp_gaze_list").select(".grid-type.yui3-g > *").iterator();

                              while (true)
                              {
                                if (!localIterator.hasNext())
                                  return;
                                Element localElement1 = (Element)localIterator.next();
                                try
                                {
                                  SearchResultItem localSearchResultItem = new SearchResultItem();
                                  Element localElement2 = localElement1.select(".wrap").first();
                                  parsePhoto(localSearchResultItem, localElement2);
                                  parsePrice(localSearchResultItem, localElement2);
                                  parseTitle(localSearchResultItem, localElement2);                    
                                }
                                catch (Exception localException2)
                                {
                                  localException2.printStackTrace();
                                }
                              }

                        }catch (MalformedURLException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            catch (Exception localException1)
                            {
                              localException1.printStackTrace();
                            }   try {
                    Thread.sleep(5000) ;
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }                   
                    }
                });


                 }  
              };

    04-24 12:25:31.231: W/System.err(9995): java.lang.NullPointerException
04-24 12:25:31.236: W/System.err(9995):     at com.example.rsbuyclient.User_menu$1$2.run(User_menu.java:138)
04-24 12:25:31.236: W/System.err(9995):     at android.app.Activity.runOnUiThread(Activity.java:4893)
04-24 12:25:31.236: W/System.err(9995):     at com.example.rsbuyclient.User_menu$1.onClick(User_menu.java:135)
04-24 12:25:31.236: W/System.err(9995):     at android.view.View.performClick(View.java:4475)
04-24 12:25:31.236: W/System.err(9995):     at android.view.View$PerformClick.run(View.java:18786)
04-24 12:25:31.236: W/System.err(9995):     at android.os.Handler.handleCallback(Handler.java:730)
04-24 12:25:31.236: W/System.err(9995):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-24 12:25:31.236: W/System.err(9995):     at android.os.Looper.loop(Looper.java:137)
04-24 12:25:31.236: W/System.err(9995):     at android.app.ActivityThread.main(ActivityThread.java:5419)
04-24 12:25:31.236: W/System.err(9995):     at java.lang.reflect.Method.invokeNative(Native Method)
04-24 12:25:31.236: W/System.err(9995):     at java.lang.reflect.Method.invoke(Method.java:525)
04-24 12:25:31.236: W/System.err(9995):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
04-24 12:25:31.236: W/System.err(9995):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
04-24 12:25:31.236: W/System.err(9995):     at dalvik.system.NativeStart.main(Native Method)
04-24 12:25:36.256: W/Choreographer(9995): Already have a pending vsync event.  There should only be one at a time.

3 ответа

Решение

Вы обновляете пользовательский интерфейс (TextView settext) в потоке, поэтому вы получаете ошибку.

                      // ui stuff updating that's why showing error
                      tvspottempp2 = (TextView)findViewById(R.id.tvspottempp2);
                      tvspottempp2.setText("url:"+url);

Android "Только исходный поток, создавший иерархию представлений, может касаться его представлений".

Вы обновляете пользовательский интерфейс из потоков. Так что ошибка произошла. Если вы хотите обновить пользовательский интерфейс из потока, используйте обработчики. Попробуйте эту тему для получения дополнительной информации

Попробуй это:

runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        url = new URL(Http.toString());
                        tvspottempp2 = (TextView)findViewById(R.id.tvspottempp2);
                        tvspottempp2.setText("url:"+url);

                        Document doc;                   
                        doc = Jsoup.parse(url, 3000);
                        tvspottempp2 = (TextView)findViewById(R.id.tvspottempp3);
                        tvspottempp2.setText("doc:"+doc);
                    }
                });

Для получения дополнительной информации об использовании пользовательского интерфейса вы можете воспользоваться ссылкой.

Другие вопросы по тегам