0

AsyncTaskに奇妙な問題があります。私はAsyncTaskを使用して私のウェブサイトからデータをロードし、これらのデータを含むListViewを作成しています。私は各項目にリスナーを設定しました。項目をクリックすると、新しいアクティビティが開始されます。アクティビティを変更した後のAsyncTaskのリロード

しかし、新しいアクティビティが読み込まれると、古いasynctask(最初のアクティビティから)がリロードされ、アプリケーションがクラッシュします。

(それはもう存在しないリストビューを変更しようとしているので)私はAsyncTaskの状態をテストし、それが

package com.wglxy.example.dash1; 

import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.DialogInterface.OnCancelListener; 
import android.os.AsyncTask; 
import android.os.Bundle; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.HashMap; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.SimpleAdapter; 


public class F1Activity extends DashboardActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView (R.layout.activity_f2); 
    setTitleFromActivityLabel (R.id.title_text); 

    // Je démarre l'AsyncTask qui charge les interventions 
    getInterventionListing Listing = new getInterventionListing(); 
    Listing.execute();  
} 


private class getInterventionListing extends AsyncTask<Integer, Integer, ArrayList<HashMap<String, String>>> 
{ 
    private ProgressDialog dialog; 


    @Override 
    protected void onPreExecute() 
    { 
     // Dialog qui s'affiche durant l'AsyncTask 
     dialog = ProgressDialog.show(F1Activity.this, "Chargement", "Chargement des données",true,true,new OnCancelListener() { 
      public void onCancel(DialogInterface dialog) { 
       dialog.dismiss(); 
       cancel(true); 
      }}); 
    } 

    @Override 
    protected ArrayList<HashMap<String, String>> doInBackground(Integer... params) 
    { 
     InputStream is = null; 
     String result = ""; 
     String problemes = ""; 
     String prenom = ""; 
     String strURL = "http://monsiteweb.com/fichier.php"; 
     ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); 


     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("listing_intervention","")); 

     // Requête HTTP 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(strURL); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection " + e.toString()); 
     } 


     HashMap<String, String> map; 


     // Convertion de la requête en string 
     try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

     // Parse des données JSON 
     try{ 
      JSONArray jArray = new JSONArray(result); 

      for(int i=0;i<jArray.length();i++){ 
       JSONObject json_data = jArray.getJSONObject(i); 
       if (json_data.getString("problemes") != "null") 
        problemes = json_data.getString("problemes"); 
       if (json_data.getString("prenom") != "null") 
        prenom = json_data.getString("prenom"); 

       map = new HashMap<String, String>(); 
       map.put("titre", "N°" + json_data.getInt("id_intervention") + " : " + json_data.getString("nom") + " " + prenom); 
       map.put("description", problemes); 
       map.put("id_intervention", json_data.getString("id_intervention")); 
       map.put("id_client", json_data.getString("id_client")); 
       if (json_data.getInt("statut") == 0) 
       { 
        map.put("img", String.valueOf(R.drawable.onwork)); 
       } 
       else if (json_data.getInt("statut") == 2) 
       { 
        map.put("img", String.valueOf(R.drawable.onwait)); 
       } 
       else if (json_data.getInt("statut") == 6) 
       { 
        map.put("img", String.valueOf(R.drawable.home)); 
       } 
       else 
       { 
        map.put("img", String.valueOf(R.drawable.other)); 
       } 

        listItem.add(map); 

      } 

     }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 
     return listItem; 

    } 


    @Override 
    protected void onPostExecute(ArrayList<HashMap<String, String>> listItem) 
    { 
     ListView maListViewPerso = (ListView) findViewById(R.id.listviewperso); 
     SimpleAdapter mSchedule = new SimpleAdapter (F1Activity.this, listItem, R.layout.listview, 
       new String[] {"img", "titre", "description"}, new int[] {R.id.img, R.id.titre, R.id.description}); 
     maListViewPerso.setAdapter(mSchedule); 


     maListViewPerso.setOnItemClickListener(new OnItemClickListener() {    
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
       ListView maListViewPerso = (ListView) findViewById(R.id.listviewperso); 
       HashMap<String, String> items_loaded = (HashMap<String, String>) maListViewPerso.getItemAtPosition(position); 
       Intent defineIntent = new Intent(F1Activity.this, Details_intervention.class); 
       Bundle objetbundle = new Bundle(); 
       objetbundle .putString("id_intervention",items_loaded.get("id_intervention").toString()); 
       objetbundle .putString("id_client",items_loaded.get("id_client").toString()); 
       defineIntent.putExtras(objetbundle); 
       F1Activity.this.startActivity(defineIntent); 
      } 
     }); 

     dialog.dismiss(); 
    } 



} 

} 

(常にRUNNINGしかしonPostExecute()が実行されます戻る)終了しない -

Details_intervention.class -
03-03 16:58:27.300: W/dalvikvm(656): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
03-03 16:58:27.320: E/AndroidRuntime(656): FATAL EXCEPTION: main 
03-03 16:58:27.320: E/AndroidRuntime(656): java.lang.NullPointerException 
03-03 16:58:27.320: E/AndroidRuntime(656): at com.wglxy.example.dash1.F1Activity$getInterventionListing.onPostExecute(F1Activity.java:164) 
03-03 16:58:27.320: E/AndroidRuntime(656): at com.wglxy.example.dash1.F1Activity$getInterventionListing.onPostExecute(F1Activity.java:1) 
03-03 16:58:27.320: E/AndroidRuntime(656): at android.os.AsyncTask.finish(AsyncTask.java:602) 

答えて

0

それでもサポートが必要な場合は...

は、あなたがのonClickを通じて呼び出している活動のためのコードを投稿することができますか?

カップルのノート:あなたはちょうどstartActivity(defineIntent)を持つことで活動を開始することができます

  1. 、あなたは好き嫌いではないとF1Activity.this.

  2. を必要といけない、しかし、あなたは、全体を通して、いくつかのJavaのコーディング規則を破っています。アプリを傷つけることはありませんが、一見すると標準ではなく奇妙なものがあります:例はprivate class getInterventionListingです - クラスは大文字で始まり、序文 "get"と "set"はメソッドにのみ使用されます。だからprivate class DownloadInterventionListingが良いでしょう。

+0

詳細_intervention.classは、私の問題の解決策である間違ったアクティビティを拡張しました。ヒントのおかげで、私はものを変更します:) –

+0

恐ろしい!あなたがうまく働いてうれしい;) – agentcurry

関連する問題