0

J'essaie de faire une application TabLayout (ViewPager) avec trois fragments. Dans l'un de ces onglets, je souhaite afficher une vue de liste personnalisée JSON analysée. La vue Liste personnalisée et la mise en page fonctionnent correctement (codes du didacticiel). Lorsque je combine ces deux, App se bloque immédiatement, je ne pouvais pas comprendre ce qui ne va pas. vous espérons que vous les gars peuvent aiderAndroid ViewPager Frame Listview Crash

Merci Sam_0829 .... tu me as sauvé

Les problèmes étaient 1. Au lieu de MainActivity, getMessages doit être Fragment

  1. Affichage Était vide lors de l'appel de onCreated, donc j'ai déclaré une variable de vue privée

    private View v;

    // puis onCreate

    Voir v = inflater.inflate (R.layout.message_tab, contenant, false);

    et passé dans

onViewCreated public void onViewCreated (Voir v, @Nullable Bundle savedInstanceState) { super.onViewCreated (v, savedInstanceState); contactList = new ArrayList <>();

lv = (ListView) v.findViewById(R.id.list); 

    new Getmessages().execute(); 
} 

et la vie est devenue impressionnante

Merci yo sam vous me appris à tirer de la difficulté via les journaux ... quelque chose que je ne faisais confiance avant

message Fragment (Résolu Code) ->

package com.example.user.newton; 

public class MessageTab extends Fragment { 
    private String TAG = MainActivity.class.getSimpleName(); 

    private ProgressDialog pDialog; 
    private ListView lv; 
    private View v; 
    // URL to get messages JSON 

    private static String url = "http://myjson.com/17oyz5"; 

    ArrayList<HashMap<String, String>> contactList; 
    private MainActivity.SectionsPagerAdapter mSectionsPagerAdapter; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View v = inflater.inflate(R.layout.message_tab, container, false); 
     return v; 
    } 
    private class Getmessages extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      HttpHandler sh = new HttpHandler(); 

      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url); 

      Log.e(TAG, "Response from url: " + jsonStr); 

      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        JSONArray messages = jsonObj.getJSONArray("messages"); 

        // looping through All messages 
        for (int i = 0; i < messages.length(); i++) { 
         JSONObject c = messages.getJSONObject(i); 

         String message= c.getString("message"); 
         String sender= c.getString("sender"); 
         String mtime= c.getString("time"); 

         HashMap<String, String> contact = new HashMap<>(); 

         // adding each child node to HashMap key => value 
         contact.put("message", message); 
         contact.put("sender", sender); 
         contact.put("mtime", mtime); 

         contactList.add(contact); 
        } 
       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getActivity(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG) 
            .show(); 
         } 
        }); 

       } 
      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       getActivity().runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getActivity(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 

      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(
        getActivity(), contactList, 
        R.layout.custom_layout, new String[]{"message", "sender", 
        "mtime"}, new int[]{R.id.name, 
        R.id.email, R.id.mobile}); 

      lv.setAdapter(adapter); 
     } 

    } 

    @Override 
    public void onViewCreated(View v, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(v, savedInstanceState); 
     contactList = new ArrayList<>(); 

     lv = (ListView) v.findViewById(R.id.list); 

     new Getmessages().execute(); 
    } 
} 

MessageFragment Mise en page

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 
+0

Diffusez votre rapport d'accident –

+0

utilisant adb ... log chat n'a rien lié à la crash .. – Fortune

Répondre

0

S'il vous plaît changer

pDialog = new ProgressDialog(getApplicationContext()); 

à

pDialog = new ProgressDialog(MainActivity.this); 

& essayer.

+0

Merci. ..Still il se bloque mais après le dialogue ..... devrais-je changer cela à chaque Context ...? – Fortune

+0

à l'intérieur MainActivity, oui s'il vous plaît faites-le. –

+0

même ... se bloque après le dialogue .... – Fortune

0

Il semble que vous essayez de mettre à jour le contenu ListView au mauvais endroit: vous référencez le ListView comme lv dans votre MainActivity, mais il doit être mis à jour dans votre MessageFragment. Vous devez déplacer votre Getmessages à (par exemple) onCreateView de votre MessageFragment à la place.

+0

J'ai essayé cela aussi .. cassé encore et encore ...Puis j'ai fait quelques recherches ... est venu avec MainActivity ... Je vais essayer à nouveau – Fortune

+0

Vous devriez probablement poster le crash exact, alors, sinon ce ne sera pas vraiment clair quel est le problème exact. –

+0

Honnêtement, je ne sais pas où chercher ... adb log -> $ adb shell suis start -n "com.example.user.newton/com.example.user.newton.MainActivity" -a android.intent.action .MAIN -c android.intent.category.LAUNCHER Le client n'est pas encore prêt .. Connecté au processus 31779 sur l'appareil samsung-sm_j700f-3300ad8ed8c3a2a9 – Fortune

0

si (lv! = Null) {

lv.setAdapter (adaptateur)

}

+0

Je l'ai résolu .... Merci ... – Fortune

+0

Heureux d'entendre ça! – Haileapp

+0

merci ... vous ne savez pas ..... toute la journée j'essayais de comprendre ... googling googling .... réécriture .. vidéos Youtube .... et enfin pile .... l'a fait – Fortune