2016-04-28 19 views
1

Ich habe eine MainActivity enthalten eine Aktionsleiste und eine Schaltfläche zum Aktualisieren in der Aktionsleiste und MainActivity fügen ein Fragment namens "Deal Listing" enthalten listview, die Url ausführen und aktualisieren einige Listview des Fragments "Deal Listing" und ein Fragment "Deal", die auch führe URL aus und aktualisiere Listview von "Deal" fragment.what Ich möchte, wenn "Deal Listing" zu MainActivity hinzugefügt wurde Ich möchte Inhalt von listview von DealFragment auf click refreshButon aktualisieren und wenn "deal" -Fragment zu MainActivity hinzugefügt wurde, möchte ich Inhalt von aktualisieren "Deal" Fragment listview refreshButon .Wie kann ich tun, dassWie AsynkTask von einer anderen Aktivität in Android aufrufen?

Hier Code von DealListing Fragment ist: -

private void init() { 
     m_LoadMoreProgressView = (CircularProgressView) m_Main.findViewById(R.id.progressBar1); 
     m_LoadMoreProgressView.setVisibility(View.GONE); 

     m_n_FormImage = new int[]{ 
       R.drawable.amazon, 
       R.drawable.whatsapp, 
       R.drawable.zorpia, 
       R.drawable.path, 
       R.drawable.app_me, 
       R.drawable.evernote, 
       R.drawable.app_me}; 

     m_ListView = (ListView) m_Main.findViewById(R.id.dealList); 


     sz_RecordCount = String.valueOf(m_n_DefaultRecordCount);// increment of record count 
     sz_LastCount = String.valueOf(m_n_DeafalutLastCount);// increment of last count... 

    } 


    @SuppressWarnings("deprecation") 
    private String DealListing(String url) { 
     InputStream inputStream; 
     try { 
      // 1. create HttpClient 
      HttpClient httpclient = new DefaultHttpClient(); 
      // 2. make POST request to the given URL 
      HttpPost httpPost = new HttpPost(url); 
      String json; 
      // 3. build jsonObject 
      JSONObject jsonObject = new JSONObject(); 
      jsonObject.put("agentCode", m_szMobileNumber); 
      jsonObject.put("pin", m_szEncryptedPassword); 
      jsonObject.put("recordcount", sz_RecordCount); 
      jsonObject.put("lastcountvalue", sz_LastCount); 
      //jsonObject.put("emailId", "[email protected]"); 
      // 4. convert JSONObject to JSON to String 
      json = jsonObject.toString(); 
      System.out.println("Jsons:-" + json); 
      // 5. set json to StringEntity 
      StringEntity se = new StringEntity(json); 
      // 6. set httpPost Entity 
      httpPost.setEntity(se); 
      // 7. Set some headers to inform server about the type of the content 
      httpPost.setHeader("Content-type", "application/json"); 
      // 8. Execute POST request to the given URL 
      HttpResponse httpResponse = httpclient.execute(httpPost); 
      HttpEntity entity = httpResponse.getEntity(); 
      // 9. receive response as inputStream 
      inputStream = entity.getContent(); 
      System.out.println("InputStream....:" + inputStream.toString()); 
      System.out.println("Response....:" + httpResponse.toString()); 

      StatusLine statusLine = httpResponse.getStatusLine(); 
      System.out.println("statusLine......:" + statusLine.toString()); 
      ////Log.d("resp_body", resp_body.toString()); 
      int statusCode = statusLine.getStatusCode(); 
      // 10. convert inputstream to string 
      if (statusCode == 200) { 
       // 10. convert inputstream to string 
       s_szresult = CJsonsResponse.convertInputStreamToString(inputStream); 
       //String resp_body = 
      } else 
       s_szresult = "Did not work!"; 
     } catch (Exception e) { 
      Log.d("InputStream", e.getLocalizedMessage()); 
     } 
     System.out.println("resul.....:" + s_szresult); 
     System.out.println("pin:" + m_szEncryptedPassword); 
     System.out.println("recordCount:" + sz_RecordCount); 
     System.out.println("LastCount:" + sz_LastCount); 
     // 11. return s_szResult 
     return s_szresult; 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    private void getResponse() throws JSONException {// getting response from serevr .................. 
     if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Transaction Successful")) {// server based condition 


     } else if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Connection Not Available")) {//server based conditions 
      CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Connection Lost !", getActivity()); 
     } else if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Deal List Not Found")) {// serevr based conditions ..... 
      CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "No more deals available", getActivity()); 

     } 
    } 

    // sending deal data to server and retreive response...... 
    class CDealDataSent extends AsyncTask<String, Void, String> { 
     public CDealAppDatastorage item; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      m_ProgressView.setVisibility(View.VISIBLE); 
     } 

     @Override 
     protected String doInBackground(String... urls) { 
      return DealListing(urls[0]);// sending data to server... 

     } 

     // onPostExecute displays the results of the AsyncTask. 
     @SuppressWarnings("deprecation") 
     @SuppressLint("SetTextI18n") 
     @Override 
     protected void onPostExecute(final String result) { 

      m_ProgressView.setVisibility(View.GONE); 
      try { 
       m_oResponseobject = new JSONObject(result);// getting response from server 
       JSONArray posts = m_oResponseobject.optJSONArray("dealList"); 


       for (int i = 0; i < posts.length(); i++) { 
        JSONObject post = posts.getJSONObject(i); 
        item = new CDealAppDatastorage(); 
        item.setM_szHeaderText(post.getString("dealname")); 
        item.setM_szsubHeaderText(post.getString("dealcode")); 
        item.setM_szDealValue(post.getString("dealvalue")); 
        item.setM_n_Image(m_n_FormImage[i]); 
        s_oDataset.add(item); 

       } 

       // LoadMore button 
       Button btnLoadMore = new Button(getActivity()); 
       btnLoadMore.setText("LOAD MORE DEALS"); 
       btnLoadMore.setBackgroundResource(R.drawable.button_boarder); 
       btnLoadMore.setTextAppearance(getActivity(), android.R.style.TextAppearance_DeviceDefault_Small); 
       btnLoadMore.setTextColor(Color.WHITE); 
       btnLoadMore.setGravity(Gravity.CENTER); 
       if (!s_oDataset.isEmpty()) { 
        // Adding Load More button to lisview at bottom 
        m_ListView.addFooterView(btnLoadMore); 
        m_oAdapter = new CDealAppListingAdapter(getActivity(), s_oDataset);// create adapter object and add arraylist to adapter 
        m_ListView.setAdapter(m_oAdapter);//adding adapter to recyclerview 
        m_oAdapter.notifyDataSetChanged(); 
       } else { 
        btnLoadMore.setVisibility(View.GONE); 
       } 


       btnLoadMore.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         m_n_DefaultRecordCount = m_n_DefaultRecordCount + 5;// increment of record count by 5 on next load data 
         m_n_DeafalutLastCount = m_n_DeafalutLastCount + 5;// same here.....as above 

         sz_RecordCount = String.valueOf(m_n_DefaultRecordCount);// convert int value to string 
         sz_LastCount = String.valueOf(m_n_DeafalutLastCount);// convert int value to string ///// 
         new DealNext().execute(m_DealListingURL);// POST DATA TO SERVER TO LOAD MORE DATA...... 
        } 
       }); 

       getResponse(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 


     } 
    } 

    // sending data and receive reponse on second hit T LOAD MORE DATA when show more Btn clicked.............. 
    private class DealNext extends AsyncTask<String, Void, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      m_LoadMoreProgressView.setVisibility(View.VISIBLE);// SHOW PROGRESS BAR 
     } 

     @Override 
     protected String doInBackground(String... urls) { 
      //My Background tasks are written here 
      synchronized (this) { 
       return DealListing(urls[0]);// POST DATA TO SERVER 
      } 
     } 

     @Override 
     protected void onPostExecute(final String result) { 
      super.onPostExecute(result); 

      m_LoadMoreProgressView.setVisibility(View.GONE);// DISMISS PROGRESS BAR.......... 
      try { 
       m_oResponseobject = new JSONObject(result);// getting response from server 
       final JSONArray posts = m_oResponseobject.optJSONArray("dealList");// GETTING DEAL LIST 
       for (int i = 0; i < posts.length(); i++) { 
        JSONObject post = posts.getJSONObject(i);// GETTING DEAL AT POSITION AT I 
        item = new CDealAppDatastorage();// object create of DealAppdatastorage 
        item.setM_szHeaderText(post.getString("dealname"));//getting deal name 
        item.setM_szsubHeaderText(post.getString("dealcode"));// getting deal code 
        item.setM_szDealValue(post.getString("dealvalue")); 

        if(!s_oDataset.contains(item)){ 
         s_oDataset.add(item); 
        } 

       } 
       // get listview current position - used to maintain scroll position 
       int currentPosition = m_ListView.getFirstVisiblePosition(); 
       m_oAdapter = new CDealAppListingAdapter(getActivity(), s_oDataset); 
       m_ListView.setAdapter(m_oAdapter); 
       // Setting new scroll position 
       m_ListView.setSelectionFromTop(currentPosition + 1, 0); 

       getResponse();// getting response from server.....and also here response based logics... 


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

    } 
} 
+0

Jetzt verwende ich SwipeRefreshLayout es ist einfach zu bedienen, überprüfen Sie es einfach. Http://www.androidhive.info/2015/05/android-swipe-down-to-refresh-listview-tutorial/ –

+0

Wenn Sie möchten Um die AsyncTask in einer anderen Aktivität zu verwenden, müssen Sie 'class CDealDataSent' aus der aktuellen Klasse herausziehen. –

+0

Ich führe URL irgendwann aus, wenn Bildschirm geöffnet ist, zeige leer, warum ich Refresh verwende –

Antwort

1

Wenn Sie die Aktivitätsklasse oder ihren Kontext irgendwie an die AsyncTask übergeben können, die Ihr Problem zum Anzeigen des Dialogs löst. Sie müssten einen anderen Parameter zusammen mit der URL einfügen, die Sie senden, und diesen Parameter in eine Kontextvariable einfügen. Und dann, wann immer Sie den Dialog benötigen, verwenden Sie diese Kontextvariable, um sie anzuzeigen.

Wenn der Dialog keinen Kontext hat, aus dem er angezeigt werden würde, würde dies definitiv zu Laufzeitfehlern führen.

+0

Code pls mir helfen –

Verwandte Themen