2017-12-21 8 views
1

APIからの情報をFragmentにロードします。FragmentsでgetSupportLoaderManager()を使用するにはどうすればよいですか?

私はgetSupportLoaderManager()を使用するが、エラーが発生している:私はこの使用onActivityCreated()の検索が、私はNullPointerExceptionを持って

)getSupportLoaderManager(:

すると、メソッドを解決できません。

問題を解決するのに手伝ってもらえますか?

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 

public class Business extends Fragment implements LoaderManager.LoaderCallbacks<String> { 

    ListView listView; 

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

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

     getSupportLoaderManager().initLoader(0, null, getContext()).forceLoad(); 
     return view; 
    } 

    @Override 
    public Loader<String> onCreateLoader(int id, Bundle args) { 
     return null; 
    } 

    @Override 
    public void onLoadFinished(Loader<String> loader, String data) { 
     if (data != null && !data.isEmpty()) 
      updateUI(data); 
     else 
      Toast.makeText(getContext(), "no internet", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onLoaderReset(Loader<String> loader) { 

    } 

    private void updateUI(String data) { 
     try { 
      final ArrayList<ResultOfArtBusiness> results = new ArrayList<>(); 

      JSONObject root = new JSONObject(data); 
      JSONObject secondObject = root.getJSONObject("response"); 

      JSONArray firstArray = secondObject.getJSONArray("results"); 
      for (int i = 0; i < firstArray.length(); i++) { 
       JSONObject objectInArray = firstArray.getJSONObject(i); 
       String webPublicationDate; 
       if (objectInArray.has("webPublicationDate")) 
        webPublicationDate = objectInArray.getString("webPublicationDate"); 
       else webPublicationDate = null; 

       String webTitle; 
       if (objectInArray.has("webTitle")) 
        webTitle = objectInArray.getString("webTitle"); 
       else webTitle = null; 

       String webUrl; 
       if (objectInArray.has("webUrl")) 
        webUrl = objectInArray.getString("webUrl"); 
       else webUrl = null; 

       ResultOfArtBusiness resultOfArticle = new ResultOfArtBusiness(webTitle, webPublicationDate, webUrl); 
       results.add(resultOfArticle); 
      } 

      NewsAdapterBusiness adapter = new NewsAdapterBusiness(getContext(), R.layout.item_design, results); 

      listView.setAdapter(adapter); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

「この使用についてonActivityCreatedを検索します」とはどういう意味ですか?私は 'onActivityCreated()'のコードを見ることができないので、私はあなたの質問のこの部分を理解していません。 – 0X0nosugar

+0

私はonActivityCreated()をオーバーライドする必要があることがわかっている問題を検索し、そのメソッドでgetLoaderManager()を記述しなければならないことを意味します。initLoader(0、null、getContext())。私はそれを書いたが、私はNULLポインタ例外があります。 – ShahidaTalib

+0

よろしくお願いします。なぜNPEを取得したのかを知りたい場合は、Logcatからエラーメッセージを共有する必要があります。それで、たぶんnullが正確に何かを見ることができます。 – 0X0nosugar

答えて

3

事は、それはあなたが直接getLoaderManager()getSupportLoaderManager()をコールする必要はありませんを呼び出すことができますし、舞台裏で、それは、そのそれぞれのバージョンを呼び出します断片化するとなると活動が、から呼び出すときに、我々はgetLoaderManager()またはgetSupportLoaderManager()を使用することですメソッドを使用します。

+0

また、エラーが発生しました。メソッドgetLoaderFragmentを解決できません。 – ShahidaTalib

+0

私はgetLoaderManagerを呼び出すことができると述べましたが、両方のフラグメントタイプで動作していますが、なぜそれがあなたのために解決されていないのかを知るのは難しいです。 –

+0

サポートフラグメントのためのそのようなメソッドgetSupportLoaderManager()はありません。 –

関連する問題