2017-03-31 10 views
0

여러 개의 조각과 검색 메뉴가 포함 된 GIPHYAPI를 사용하여 gif 검색을위한 Android 앱을 제작 중입니다. 내가 질의를 전달하려고 할 때마다 "널 배열에서 읽으려고 시도합니다"와 같은 오류가 발생합니다. 나는 그것이 런타임 오류가 다음 날 제공이 코드를 실행하려고 할 때마다 다음
이 다음 내 mainactivity.java주요 활동에서 단편 검색 쿼리를 전달합니다.

public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener, TabLayout.OnTabSelectedListener{ 

private TabLayout tabLayout; 
private GifAdapter adapter; 
private ViewPager viewPager; 
private Fragment[] mFragments; 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 

    tabLayout.addTab(tabLayout.newTab().setText("Trending")); 
    tabLayout.addTab(tabLayout.newTab().setText("Funny")); 
    tabLayout.addTab(tabLayout.newTab().setText("Happy")); 
    tabLayout.addTab(tabLayout.newTab().setText("Sad")); 
    tabLayout.addTab(tabLayout.newTab().setText("Minion")); 
    tabLayout.addTab(tabLayout.newTab().setText("Awesome")); 
    tabLayout.addTab(tabLayout.newTab().setText("Search")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    viewPager = (ViewPager) findViewById(R.id.pager); 

    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount()); 

    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_items,menu); 
    MenuItem menuItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem); 
    searchView.setOnSearchClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      viewPager.setCurrentItem(6); //Switch to SearchView 
     } 
    }); 
    searchView.setOnQueryTextListener(this); 
    return true; 
} 

@Override 
public boolean onQueryTextSubmit(String query) { 
    viewPager.setCurrentItem(6); 
    return ((Searchable) mFragments[6]).performSearch(query); 
} 

@Override 
public boolean onQueryTextChange(String newText) { 
    return false; 
} 
} 

것은 내 FragActivitySearch.java

public class FragActivitySearch extends Fragment implements Searchable { 
private RecyclerView recyclerView; 
private GifAdapter adapter; 
protected ViewPager mViewPager; 
private Fragment[] mFragments; 

private String Query; 
@Override 
public boolean performSearch(String query) { 
    Query = query; 
    new GiphyTask(Helper.getGiphyQueryUrl(Query, 
      100, GiphyQueryBuilder.EndPoint.SEARCH, ""), new GiphyTask.Callback() { 
     @Override 
     public void onResponse(List<Gif> gifs) { 
      adapter.setGifs(gifs); 
     } 
    }).execute(); 

    return true; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    View rootView = inflater.inflate(R.layout.activity_search, container, false); 
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
    recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 1)); 

    adapter = new GifAdapter(getActivity(), new ArrayList<Gif>()); 
    recyclerView.setAdapter(adapter); 

    recyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() { 
     @Override 
     public void onViewRecycled(RecyclerView.ViewHolder holder) { 
      GifAdapter.GifViewHolder gifHolder = (GifAdapter.GifViewHolder) holder; 
      gifHolder.stopPlayback(); 
     } 
    }); 

    return rootView; 
} 


} 

입니다.

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.share.gifimage, PID: 8275 
       java.lang.NullPointerException: Attempt to read from null array 
        at com.share.gifimage.MainActivity.onQueryTextSubmit(MainActivity.java:91) 
        at android.support.v7.widget.SearchView.onSubmitQuery(SearchView.java:1242) 
        at android.support.v7.widget.SearchView$9.onEditorAction(SearchView.java:1219) 
        at android.widget.TextView.onEditorAction(TextView.java:4902) 
        at com.android.internal.widget.EditableInputConnection.performEditorAction(EditableInputConnection.java:138) 
        at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:364) 
        at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:91) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

그냥 쿼리를 전달하고 적절한 결과를로드하려고합니다.

답변

1

mFragments 배열을 초기화하지 않았으며 null로 보입니다.

그리고이 라인

,

((Searchable) mFragments[6]).performSearch(query); 

당신은 널 (null) 배열의 6 요소에 도달하기 위해 노력하고 있습니다.

java.lang.NullPointerException: Attempt to read from null array 

당신은 당신의 배열을 초기화하고이 배열에 조각을 추가해야합니다

또한 오류 로그는 같은 것을 말한다.

+0

mFragment 배열을 초기화하고 말한대로 시도했지만 이제는 ArrayIndexOutOfBoundsException을 제공합니다. –

+0

@KalpeshJagada 조각을 배열에 추가하지 않으면이 ArrayList를 통해 도달 할 수 없으며 마술처럼 추가 할 수는 없습니다. 조각을 수동으로 추가해야합니다. –