2017-10-24 4 views
0

Android에서 책 앱을 만들고 있는데 책 목록을 표시하기 위해 조각 내 Listview를 만들려고합니다. 나는 Google 스프레드 시트에서 책 정보를 얻는다.조각 내 목록보기

package com.example.app_tfg; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

/** 
* Clase BookAdapter 
*/ 

public class BookAdapter extends ArrayAdapter <Book> { 
    private Context context; 
    int layout; 
    Book data[] = null; 

    public BookAdapter (Context context, int layout, Book data[]) { 
     super(context, layout, data); 
     this.context = context; 
     this.layout = layout; 
     this.data = data; 
    } 

    //Creo la vista 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     BookHolder holder; 

     if(row == null){ 
      LayoutInflater inflater = LayoutInflater.from(context); 
      row = inflater.inflate(layout,parent,false); 

      holder = new BookHolder(); 
      holder.cover = (ImageView) row.findViewById(R.id.book_cover); 
      holder.title = (TextView) row.findViewById(R.id.book_title); 
      row.setTag(holder); 
     } 
     else { 
      holder = (BookHolder) row.getTag(); 
     } 

     Book book = data[position]; 
     holder.title.setText(Book.title); 
     holder.cover.setImageDrawable(Book.cover); 

     return row; 
    } 

    static class BookHolder{ 
     ImageView cover; 
     TextView title; 

    } 
} 

나 '오류 :

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.v7.widget.SearchView; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 

import static com.example.app_tfg.Spreadsheets.read_only; 


public class MiEstanteria extends Fragment { 
    static String read = "si"; 
    ListView bookList; 
    Book book_data[]; 

    public MiEstanteria() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     return inflater.inflate(R.layout.fragment_mi_estanteria, container, false); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     Intent intent = new Intent(getActivity(), Spreadsheets.class); 
     intent.putExtra(read_only,read); 
     startActivity(intent); 

     BookAdapter bookAdapter = new BookAdapter(getActivity(),R.layout.fila_lista_miestanteria,book_data); 
     bookList = (ListView) bookList.findViewById(R.id.book_list); 
     bookList.setAdapter(bookAdapter); 

     bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       //Aquí Book_info 
      } 
     }); 
    } 
}  

나는 또한 BookAdapter 클래스가 :

package com.example.app_tfg; 

import android.graphics.drawable.Drawable; 

/** 
* Clase Book. Contiene un campo para el título y otro para la portada del libro. 
*/ 

public class Book { 
    static String title; 
    static Drawable cover; 

    public Book(){ 
     super(); 
    } 

    public Book(String title, Drawable cover){ 
     super(); 
     this.title = title; 
     this.cover = cover; 
    } 

    public String getTitle() { 
     return title; 
    } 

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

    public Drawable getCover() { 
     return cover; 
    } 

    public void setCover(Drawable cover) { 
     this.cover = cover; 
    } 

} 

조각은 다음과 같다 :

나는 책 클래스가 점점 나는 다음과 같습니다. V/BoostFramework : BoostFram ework() : mPerf = [email protected] D/AndroidRuntime가 :

    --------- beginning of crash 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.app_tfg, PID: 19179 
        java.lang.NullPointerException 
         at java.util.Objects.requireNonNull(Objects.java:203) 
         at java.util.Arrays$ArrayList.<init>(Arrays.java:3826) 
         at java.util.Arrays.asList(Arrays.java:3813) 
         at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:139) 
         at com.example.app_tfg.BookAdapter.<init>(BookAdapter.java:0) 
         at com.example.app_tfg.MiEstanteria.onCreate(MiEstanteria.java:45) 
         at android.support.v4.app.Fragment.performCreate(Fragment.java:2177) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1244) 
         at android.support.v4.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1080) 
         at android.support.v4.app.FragmentTransition.calculateFragments(FragmentTransition.java:971) 
         at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:95) 
         at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143) 
         at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2008) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
         at android.os.Handler.handleCallback(Handler.java:751) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:154) 
         at android.app.ActivityThread.main(ActivityThread.java:6119) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Application terminated. 

VM

를 종료하는 것은 당신이 좀 도와 주시겠습니까? 정말 고맙습니다!!

+3

[NullPointerException이 무엇인가, 나는 그것을 해결 어떻게?] (의 가능한 중복 https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) – Alejandro

+1

book_data가 초기화되고 값이 있습니까 ?? –

+0

죄송합니다. Book 클래스도 있습니다. 내가 질문을 편집하고있다 –

답변

0
try this 


public class MiEstanteria extends Fragment { 
    static String read = "si"; 
    ListView bookList; 
    Book book_data[]= new Book[0]; 
    BookAdapter bookAdapter; 

    public MiEstanteria() { 
     Required empty public constructor 
    } 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_mi_estanteria,container, false); 
     bookList = (ListView) v.findViewById(R.id.book_list); 
     bookList.setAdapter(bookAdapter); 
     bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       //Aquí Book_info 
      } 
     }); 
     return v; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
     bookAdapter = new BookAdapter(getActivity(),R.layout.fila_lista_miestanteria,book_data); 
    }} 
+0

시도했지만 작동하지 않습니다. (감사합니다 !! –

+0

의도가 intent = 새로운 intent (getActivity(), Spreadsheets.class), intent.putExtra (read_only, 읽기); startActivity 의도) 코드에서 제거합니다. 나쁜. 조각을 만들 때 다른 활동을 실행합니다. –

+0

삭제했지만 여전히 오류가 있습니다. –