2012-11-14 49 views
0

你好@所有那裏:) 我有一個小問題。我想顯示一個ProgressDialog,當我點擊Login時,沒有顯示任何東西,它只是執行沒有ProgressDialog的任務。我正在使用一個AsyncTask並在該線程中打開ProgressDialog,但沒有出現。下面是我的源代碼:android中的ProgressDialog即使與異步任務

它被稱爲是這樣的:

ProgressDialog progress = new ProgressDialog(mainActivity); 
progress.setMessage("Sie werden registriert..."); 

jsonParser = new JSONParser(progress, url_create_user, "POST", params); 

這是JSONParser類:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.util.List; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.params.ClientPNames; 
import org.apache.http.client.params.CookiePolicy; 
import org.apache.http.client.utils.URLEncodedUtils; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Handler; 
import android.os.Looper; 
import android.os.Message; 
import android.util.Log; 

public class JSONParser extends AsyncTask<Context, Void, JSONObject>{ 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    String url = ""; 
    String method = ""; 
    List<NameValuePair> parameters; 
    ProgressDialog prog; 

    // constructor 
    public JSONParser(ProgressDialog prog, String url, String method, List<NameValuePair> param) { 
     this.url = url; 
     this.method = method; 
     this.parameters = param; 
     this.prog = prog; 
    } 

    private Handler handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      if (msg.what == 0) 
      { 
       prog.show(); 
      } 
      else 
      { 
       prog.dismiss(); 
      } 

     } 
    }; 

    @Override 
    protected JSONObject doInBackground(Context... params) { 
     try { 
      handler.sendEmptyMessage(0); 
      // Überprüfen welche Request Methode benutzt werden soll 
      if(method == "POST"){ 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, 
         CookiePolicy.BROWSER_COMPATIBILITY); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(this.parameters)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      }else if(method == "GET"){ 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       String paramString = URLEncodedUtils.format(this.parameters, "utf-8"); 
       url += "?" + paramString; 
       HttpGet httpGet = new HttpGet(url); 

       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      }   

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     //Stream in ein String umwandeln 
     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(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Fehler!", "Fehler mein umwandeln von Stream in String: " + e.toString()); 
     } 

     // JSON Object parsen 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error beim parsen " + e.toString()); 
     } 
     handler.sendEmptyMessage(1); 
     // Das JSONObject zurückgeben 
     return jObj; 
    } 
} 

回答

0
see the following example code of JSON parser with async task 

package com.androidhive.jsonparsing; 

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

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

public class AndroidJSONParsingActivity extends ListActivity { 

    // url to make request 
    private static String url = "http://api.androidhive.info/contacts/"; 

    // JSON Node names 
    private static final String TAG_CONTACTS = "contacts"; 
    private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_EMAIL = "email"; 
    private static final String TAG_ADDRESS = "address"; 
    private static final String TAG_GENDER = "gender"; 
    private static final String TAG_PHONE = "phone"; 
    private static final String TAG_PHONE_MOBILE = "mobile"; 
    private static final String TAG_PHONE_HOME = "home"; 
    private static final String TAG_PHONE_OFFICE = "office"; 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // contacts JSONArray 
    JSONArray contacts = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     new GetEventsTask().execute(""); 
    } 

    protected class GetEventsTask extends 
      AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> { 
     protected ArrayList<HashMap<String, String>> contactList; 

     private final ProgressDialog dialog = new ProgressDialog(
       AndroidJSONParsingActivity.this); 

     //PreExecute Method 

     protected void onPreExecute() { 
      this.dialog.setMessage("Loading, Please Wait.."); 
      this.dialog.setCancelable(false); 
      this.dialog.show(); 
     } 

     //doInBackground Method 

     @Override 
     protected ArrayList<HashMap<String, String>> doInBackground(
       String... params) { 
      contactList = new ArrayList<HashMap<String, String>>(); 
      // Making HTTP request 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
       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(); 
       json = sb.toString(); 

      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      // try parse the string to a JSON object 
      try { 
       jObj = new JSONObject(json); 
       Log.i("json objects",""+json); 
      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 
      try { 
       // Getting Array of Contacts 
       contacts = jObj.getJSONArray(TAG_CONTACTS); 

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

        // Storing each json item in variable 
        String id = c.getString(TAG_ID); 
        String name = c.getString(TAG_NAME); 
        String email = c.getString(TAG_EMAIL); 
        String address = c.getString(TAG_ADDRESS); 
        String gender = c.getString(TAG_GENDER); 

        // Phone number is agin JSON Object 
        JSONObject phone = c.getJSONObject(TAG_PHONE); 
        String mobile = phone.getString(TAG_PHONE_MOBILE); 
        String home = phone.getString(TAG_PHONE_HOME); 
        String office = phone.getString(TAG_PHONE_OFFICE); 

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_ID, id); 
        map.put(TAG_NAME, name); 
        map.put(TAG_EMAIL, email); 
        map.put(TAG_PHONE_MOBILE, mobile); 

        // adding HashList to ArrayList 
        contactList.add(map); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return contactList; 
     } 

     //onPostExecute Method 


     protected void onPostExecute(ArrayList<HashMap<String, String>> result) { 

      ListAdapter adapter = new SimpleAdapter(getApplicationContext(), 
        contactList, R.layout.list_item, new String[] { TAG_NAME, 
          TAG_EMAIL, TAG_PHONE_MOBILE }, new int[] { 
          R.id.name, R.id.email, R.id.mobile }); 
      // selecting single ListView item 
      ListView lv = getListView(); 
      lv.setAdapter(adapter); 



      // Launching new screen on Selecting Single ListItem 
      lv.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // getting values from selected ListItem 
        String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
        String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); 
        String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 

        // Starting new intent 
        Intent in = new Intent(getApplicationContext(),SingleMenuItemActivity.class); 
        in.putExtra(TAG_NAME, name); 
        in.putExtra(TAG_EMAIL, cost); 
        in.putExtra(TAG_PHONE_MOBILE, description); 
        startActivity(in); 
       } 
      }); 
      if (this.dialog.isShowing()) { 
       this.dialog.dismiss(); 
      } 
     } 

    } 

} 

讓我知道您的問題已解決或不?

+0

謝謝你與onpreexecute和onpostexecute :) – alexj

0

你不能比較==之間2串

使用:

method.equals("POST"); 
+0

它在這種情況下工作。但謝謝你:) – alexj