2012-11-23 56 views
0

我是Android新手,需要一點幫助。我有一個位於遠程mysql上的表,它的工作很好,但在4.x我在啓動它時遇到了錯誤。我已經讀過它的地方,因爲我沒有使用AsyncTask。我試圖在現有的工作代碼上實現它,但有一個錯誤,所以請幫助,因爲我嘗試了所有這些工作,但沒有成功。Android php + mysql + json錯誤實現AsyncTask

下面是現有的代碼,在2.3

package com.stole.fetchtest; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
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.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.ListActivity; 
import android.net.ParseException; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.Toast; 

public class FetchData extends ListActivity { 

    @SuppressWarnings("unchecked") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     String result = null; 
     InputStream is = null; 
     StringBuilder sb = null; 
     ArrayList<?> nameValuePairs = new ArrayList<Object>(); 
     List<String> r = new ArrayList<String>(); 

     try { 


      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(
        "http://www.url.com/fetch.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(
        (List<? extends NameValuePair>) nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG) 
        .show(); 
     } 


     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "UTF-8")); 

      sb = new StringBuilder(); 

      String line = null; 

      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 

      is.close(); 

      result = sb.toString(); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG) 
        .show(); 
     } 

     try { 
      JSONArray jArray = new JSONArray(result); 
      JSONObject json_data = null; 
      for (int i = 0; i < jArray.length(); i++) { 
       json_data = jArray.getJSONObject(i); 
       r.add(json_data.getString("names")); 
      } 
      setListAdapter(new ArrayAdapter<String>(this, R.layout.names_row, r)); 
     } catch (JSONException e1) { 
      Toast.makeText(getBaseContext(), e1.toString(), Toast.LENGTH_LONG) 
        .show(); 
     } catch (ParseException e1) { 
      Toast.makeText(getBaseContext(), e1.toString(), Toast.LENGTH_LONG) 
        .show(); 
     } 

    }} 

工作然後我試圖添加的AsyncTask,根據網上發現了一些教程,和它`看起來像這樣:

package com.stole.fetchtest; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
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.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.ListActivity; 
import android.net.ParseException; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.Toast; 

public class FetchData extends ListActivity { 

    String result = null; 
    InputStream is = null; 
    StringBuilder sb = null; 
    ArrayList<?> nameValuePairs = new ArrayList<Object>(); 
    List<String> r = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     new task().execute(); 
    } 

    public class task extends AsyncTask<String, String, Void> { 

     @SuppressWarnings("unchecked") 
     @Override 
     protected Void doInBackground(String... params) { 

      try { 

       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://www.url.com/fetch.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(
         (List<? extends NameValuePair>) nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), e.toString(), 
         Toast.LENGTH_LONG).show(); 
      } 

      try { 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(is, "iso-8859-1")); 

       sb = new StringBuilder(); 

       String line = null; 

       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 

       is.close(); 

       result = sb.toString(); 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), e.toString(), 
         Toast.LENGTH_LONG).show(); 
      } 

      return null; 
     } 

     protected void onPostExecute(Void v) { 

      try { 
       JSONArray jArray = new JSONArray(result); 
       JSONObject json_data = null; 
       for (int i = 0; i < jArray.length(); i++) { 
        json_data = jArray.getJSONObject(i); 
        r.add(json_data.getString("naziv")); 
       } 
       setListAdapter(new ArrayAdapter(this, R.layout.names_row, r)); 
      } catch (JSONException e1) { 
       Toast.makeText(getBaseContext(), e1.toString(), 
         Toast.LENGTH_LONG).show(); 
      } catch (ParseException e1) { 
       Toast.makeText(getBaseContext(), e1.toString(), 
         Toast.LENGTH_LONG).show(); 
      } 

     } 

    } 

} 

我得到的錯誤是

setListAdapter(new ArrayAdapter(this, R.layout.names_row, r)); 

它說「構造函數ArrayAd apter(FetchData.task,int,List)未定義「 謝謝!

+2

構造ArrayAdapter(FetchData.task,INT,列表)是不確定的 - 它有什麼用JSON,的AsyncTask,PHP做,MySQL? :) –

+1

setListAdapter(new ArrayAdapter(FetchData.this,R.layout.names_row,r)); – rajeshwaran

回答

0

它應該使用活動上下文沒有任務上下文..

setListAdapter(new ArrayAdapter(FetchData.this, R.layout.names_row, r)); 
+0

是的!就是這樣,不相信我錯過了!謝謝你們,我真的很感激它! – Stole51

+0

很高興幫助,不要忘記接受答案:) .. – Nermeen