2017-12-21 4 views
1

Ich möchte Informationen von einer API zu einem Fragment laden.Wie kann ich getSupportLoaderManager() in Fragmenten verwenden?

Ich benutze getSupportLoaderManager() aber ein Fehler auftritt:

Die Methode kann nicht lösen: getSupportLoaderManager()

ich für diesen Zweck zu suchen onActivityCreated() aber ich habe NullPointerException.

Können Sie mir helfen, das Problem zu lösen?

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

Was meinen Sie mit "Ich suche über diese Verwendung aufActivityCreated"? Ich kann keinen Code für 'onActivityCreated()' sehen, daher verstehe ich diesen Teil Ihrer Frage nicht. – 0X0nosugar

+0

Ich meine, ich suchte nach dem Problem Ich habe gefunden, dass ich die onActivityCreated() überschreiben muss und in dieser Methode sollte ich getLoaderManager() schreiben. InitLoader (0, null, getContext()). ForceLoad(); Ich schrieb das, aber ich habe Null-Zeiger-Ausnahme. – ShahidaTalib

+0

In Ordnung. Wenn Sie herausfinden möchten, warum Sie eine NPE erhalten haben, müssen Sie die Fehlermeldung von Logcat teilen. Dann kann man vielleicht sehen, was genau Null war. – 0X0nosugar

Antwort

3

Die Sache ist die, dass wir getLoaderManager() oder getSupportLoaderManager() verwenden, wenn sie von Aktivität Aufruf aber , wenn es Sie direkt fragmentieren kommt getLoaderManager() keine Notwendigkeit getSupportLoaderManager() anrufen anrufen und hinter den Kulissen wird sie ihre jeweiligen Versionen des Anrufes Methode abhängig von dem verwendeten Fragment.

+0

Ich habe Fehler mit dem auch der Fehler ist, kann Methode getLoaderFragment nicht auflösen. – ShahidaTalib

+0

wie ich erwähnt habe, können wir getLoaderManager aufrufen und es wird für beide Fragment-Typ funktionieren und es funktioniert für mich jetzt ist es schwer zu sagen, warum es für Sie nicht gelöst wird. –

+0

Es gibt keine solche Methode getSupportLoaderManager() für das Support-Fragment. –

Verwandte Themen