2017-08-13 8 views
0

私はAsynctasksやスレッドなどの周りに頭を回転させようとしています。私はAsynctaskクラスのすべての計算を行う良い解決策を持っていると思います。 onCallCompleteを使用して自分のアクティビティに戻し、すべての変数を別の配列に追加し、その配列をリストビューアダプタに送信します。しかし、何らかの理由で私は把握できないようだが、Androidは私にjava.lang.NullPointerException: Attempt to read from null arrayを投げている。私はそれが明らかだと確信していますが、私はそれを修正する方法がわからないので、任意のアドバイスをいただければ幸いです、ありがとう!Android - なぜ配列がnullであるのかわからない

活動のonCallComplete(エラーが発生した)

public void onCallComplete(int listSize, String[] titles, String[] prices, Bitmap[] images, String[] productURLs){ 
     ItemList[]itemArray= new ItemList[listSize]; 
     int i =0; 
     while(i<listSize){ 
      itemArray[i] = new ItemList(); 
      itemArray[i].setTitle(titles[i]); //error occurs here 
      itemArray[i].setPrice(prices[i]); 
      itemArray[i].setImage(images[i]); 
      itemArray[i].setProductURL(productURLs[i]); 
      i++; 
     } 
     ListAdapter adapter = new CustomAdapter(this, itemArray); 
     ListView productListView = (ListView)findViewById(R.id.productListView); 
     productListView.setAdapter(adapter); 
} 

ITEMLISTクラス:

public class ItemList { 
    private String title; 
    private String price; 
    private Bitmap image; 
    private String productURL; 


    public ItemList(){ 
     this.title=null; 
     this.price=null; 
     this.image=null; 
     this.productURL=null; 
    } 

    void setTitle(String title){ 
     this.title = title; 
    } 

    void setImage(Bitmap image){ 
     this.image = image; 
    } 

    void setPrice(String price){ 
     this.price = price; 
    } 

    void setProductURL(String productURL){ 
     this.productURL = productURL; 
    } 

    String getTitle(){ 
     return title; 
    } 

    String getPrice(){ 
     return price; 
    } 

    Bitmap getImage(){ 
     return image; 
    } 

    String getProductURL(){ 
     return productURL; 
    } 
} 

編集:ので、いくつかの実験をして、私はそれが私の結論に来たあるRajendranからポインタの後nullを返すAsyncTask計算(Asynctaskは常に私の問題です)。 AsyncTaskのコードを次に示します。

public class GetProductAttributes extends AsyncTask<Object, Object, Void> { 
    OnCallCompleteCallBack callback; 
    String url; 
    int listSize; 
    int index; 
    String[] productURLs; 
    String[] prices; 
    String[] titles; 
    String imageSRC; 
    Bitmap[] images; 
    ImageView productView; 
    int listSize; 
    int result; 

    public GetProductAttributes(String url, int index, OnCallCompleteCallBack callback) { 
     this.url = url; 
     this.index = index; 
     this.callback = callback; 
    } 
protected Void doInBackground(Object... voids) { 
     //Create JSoup connection 
     try { 
     Document doc = Jsoup.connect(url).get(); 
     String link = doc.select("h2#s-result-count").first().text(); 
     System.out.println(link); 
     System.out.println(link.substring(1)); 
     if (link.substring(1, 2).equals("-")) { 
      System.out.println("run1"); 
      listSize = Integer.parseInt(link.substring(2, 3)); 
      System.out.println(listSize); 
      try { 
       listSize = Integer.parseInt(link.substring(2, 4)); 
       System.out.println(listSize); 
      } catch (Exception e) { 
      } 
     } else { 
      System.out.println("run2"); 
      listSize = Integer.parseInt(link.substring(0, 1)); 
      System.out.println(listSize); 
      try { 
       listSize = Integer.parseInt(link.substring(0, 2)); 
       System.out.println(listSize); 
      } catch (Exception e) { 
      } 
     } 

      titles = new String[listSize]; 
      prices = new String[listSize]; 
      productURLs = new String[listSize]; 
      images = new Bitmap[listSize]; 
      int i = 0; 
      while (i < listSize) { 
       Elements basicLink = doc.select("div.showRightCol") 
         .select("div.leftCol") 
         .select("div.a-row.s-result-list-parent-container") 
         .select("ul.s-result-list.s-col-1.s-col-ws-1.s-result-list-hgrid.s-height-equalized.s-list-view.s-text-condensed") 
         .select("li[id=result_" + i + "]") 
         .select("div.s-item-container") 
         .select("div.a-fixed-left-grid") 
         .select("div.a-fixed-left-grid-inner");//start here to get to everything 

       Element element = basicLink.select("a.a-link-normal.s-access-detail-page.s-color-twister-title-link.a-text-normal").first(); 
       String title = element.attr("title"); 
       //System.out.println("Title is: " + title); 
       titles[i] = title; 

//   Gets product URL and image source 
       Elements longLink = basicLink.select("div.a-fixed-left-grid-col.a-col-left") 
         .select("div.a-row") 
         .select("div.a-column.a-span12.a-text-center") 
         .select("a.a-link-normal.a-text-normal"); 
       String productURL = longLink.attr("href"); 
       //System.out.println(productURL); 
       productURLs[i] = productURL; 
       imageSRC = longLink.select("img.s-access-image.cfMarker").attr("src"); 
       //System.out.println(imageSRC); 
       images[i] = getImage(imageSRC); 

       //Gets price 
       String price = basicLink.select("div.a-row") 
         .select("div.a-column.a-span7") 
         .select("div.a-row.a-spacing-mini") 
         .select("div.a-row.a-spacing-none") 
         .select("a.a-size-small.a-link-normal.a-text-normal") 
         .select("span.a-size-base.a-color-base").first().text(); 
       System.out.println(price); 
       prices[i]=price; 
       i++; 
      } 
      //Gets title 

     } catch (Exception e) { 
     } 
     return null; 
    } 
+4

**タイトル[] **がnullの場合、完全なコードを追加してください –

+3

[NullPointerExceptionとは何か、どうすれば修正できますか?](https://stackoverflow.com/questions/218384) /ちょっと待っててください - それを覚えておいてください) – khelwood

+0

1秒間、残りのコードを追加します。 – coolyfrost

答えて

-1

ここでは、「null配列から読み取ろうとしています」と答えています。これは、この "titles [i]"がnullを返すことを意味します。

+1

ですが、 'titles'がnullである可能性があります。それは**タイトル** [i]がヌルを生成しているということではありません**。 – khelwood

関連する問題