2016-05-10 9 views
-3

私の間違いを見つけることができません。フラグメントの解析。アプリケーションは閉じた

public class FragmentParsing extends Fragment implements MyTask.OnTaskComplete{ 

    private ArrayList<String> arrayList=new ArrayList<>(); 
    private ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList); 
    private ProgressDialog progressDialog = null; 
    private static final String url="http://quotes.zennex.ru/api/v3/bash/quotes?sort=time"; 

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

// public static FragmentParsing newInstance() { 
//  FragmentParsing fragment = new FragmentParsing(); 
//  return fragment; 
// } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view= inflater.inflate(R.layout.fragment_parsing, container, false); 

     ListView lv=(ListView)view.findViewById(R.id.listView); 
     lv.setAdapter(adapter); 

     progressDialog = ProgressDialog.show(lv.getContext(), null, "Подключение к серверу...", true, true); 
     MyTask myTask = new MyTask(FragmentParsing.this); 
     myTask.execute(url); 

     return view; 
    } 

    @Override 
    public void onTaskComplete(ArrayList<String> array) { 
     if(array!=null) { 
      adapter.clear(); 
      arrayList.addAll(array); 
      adapter.notifyDataSetChanged(); 
     } 
     else 
      Toast.makeText(getView().getContext(), "Сбой при подключение к серверу", Toast.LENGTH_SHORT).show(); 
     if (progressDialog != null && progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 
    } 

エラーログ:ラインで間違っ

FATAL EXCEPTION: main 
                      Process: ru.bunakov.testapplication, PID: 29433 
                      java.lang.NullPointerException 
                       at android.widget.ArrayAdapter.init(ArrayAdapter.java:310) 
                       at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153) 
                       at ru.bunakov.testapplication.fragments.FragmentParsing.<init>(FragmentParsing.java:20) 
                       at ru.bunakov.testapplication.adapters.TabAdapter.getItem(TabAdapter.java:23) 

何か -

private ArrayAdapter<String> adapter = new ArrayAdapter<String(getActivity(), android.R.layout.simple_list_item_1, arrayList); 

そして、このラインで -

case 2: return new FragmentParsing(); 

ここTabAdapter

0であります
public class TabAdapter extends FragmentStatePagerAdapter { 

    private int numberOfTabs; 

    public TabAdapter(FragmentManager fm, int numberOfTabs) { 
     super(fm); 
     this.numberOfTabs = numberOfTabs; 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch (i){ 
      case 0: return new FragmentList(); 
      case 1: return new FragmentScaling(); 
      case 2: return new FragmentParsing(); 
      case 3: return new FragmentMap(); 
      default: return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return numberOfTabs; 
    } 
} 

私のアプリケーションは閉じています。私は最初のタブを選択しません。 FragmentParsingクラスが空の場合、アプリケーションは問題なく動作します。

編集:コメントの変更が要求された後。

public class FragmentParsing extends Fragment implements MyTask.OnTaskComplete{ 

    private ArrayList<String> arrayList = new ArrayList<>(); 
    private ArrayAdapter<String> adapter; 
    private ProgressDialog progressDialog = null; 
    private static final String url="http://quotes.zennex.ru/api/v3/bash/quotes?sort=time"; 

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

// public static FragmentParsing newInstance() { 
//  FragmentParsing fragment = new FragmentParsing(); 
//  return fragment; 
// } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view= inflater.inflate(R.layout.fragment_parsing, container, false); 

     ListView lv=(ListView)view.findViewById(R.id.listView); 


     progressDialog = ProgressDialog.show(lv.getContext(), null, "Подключение к серверу...", true, true); 
     MyTask myTask = new MyTask(FragmentParsing.this); 
     myTask.execute(url); 
     adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList); 
     lv.setAdapter(adapter); 
     return view; 
    } 

エラーログ:

FATAL EXCEPTION: main 
                      Process: ru.bunakov.testapplication, PID: 12608 
                      java.lang.NullPointerException 
                       at ru.bunakov.testapplication.fragments.FragmentParsing.onCreateView(FragmentParsing.java:48) 

Line - progressDialog = ProgressDialog.show(lv.getContext(), null, "Подключение к серверу...", true, true); 
+1

https://stackoverflow.com/help/how-to-ask –

+0

エラーの原因と思われるコードをここに投稿してください。コミュニティのエラーログを含めて、原因を確認します。 –

+0

'adapter'を初期化すると、すぐに空の' arrayList'を渡すことに気付きました。それが原因であるかどうかは完全にはわかりませんが、 'arraylist'の中にデータがある場合にのみ、' adapter'を初期化することができますか? –

答えて

0

あなたのadapterNullPointerExceptionを引き起こしていた空のリストで初期化されたことと思われます。簡単に言えば、あなたの

arrayList.addAll(array); 

下記のおonTaskComplete()内部

adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, arrayList); lv.setAdapter(adapter); 

アダプターを初期化するもう前に、リストが空にされないように。乾杯! :D

関連する問題