2013-01-25 12 views
9

Ciao, sto usando php per ottenere i dati dal database mysql e dopo aver ricevuto correttamente i dati chiamo una nuova attività in cui ho bisogno di stampare i dati.Come restituire i dati da php a eclissi?

Questo è il mio codice:

public class RecoProd extends Activity { 
    EditText pd; 
    TextView error; 

    ArrayList<NameValuePair> postParameters; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.recomain); 
     pd = (EditText) findViewById(R.id.name); 

     error = (TextView) findViewById(R.id.myTableLayout); 

     pd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       postParameters = new ArrayList<NameValuePair>(); 
       postParameters.add(new BasicNameValuePair("product", pd 
         .getText().toString())); 


       // String valid = "1"; 

       DownloadWebPageTask dw = new DownloadWebPageTask(); 
       dw.execute(""); 

      } 
     }); 
    } 

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
      String response = null; 
      for (String url : urls) { 
       try { 
        response = CustomHttpClient.executeHttpPost("http://10.0.2.2/abc/check2.php", postParameters); 
        String res = response.toString(); 
        // res = res.trim(); 
        res = res.replaceAll("\\s+", ""); 
        // error.setText(res); 
        if(res.equals("1")){  ***<<--------------I think the error is here*** 
         Intent loginintent = new Intent(RecoProd.this, RecoProd1.class); 
         startActivity(loginintent); 
        } 
        else 
         error.setText("Sorry!! "); 





       } catch (Exception e) { 


       } 
      } 
      return response; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     } 
    } 
} 

Questo è il mio codice PHP:

<?php 
$pd=$_POST['name']; 

//connect to the db 
$user = "root"; 
$pswd = ""; 
$db = "mylogin"; 
$host = "localhost"; 
$conn = mysql_connect($host, $user, $pswd); 
mysql_select_db($db); 

$query = "SELECT * FROM recoprod "; 
$result = mysql_query("SELECT * FROM recoprod"); 
while($row = mysql_fetch_array($result)) 
    { 
    $output[]=$row; 
    } 
/* 
$result = mysql_query($query) or die("Unable to verify user because : " . mysql_error()); 
//this is where the actual verification happens 
if(mysql_num_rows($result) > 0) 
echo 1; // for correct login response 
else 
echo 0; // for incorrect login response */ 
?> 

sto ottenendo una forza vicino quando ho eseguirlo.

EDITED CODE 





package com.androidhive.googleplacesandmaps; 

import java.lang.reflect.Constructor; 
import java.lang.reflect.Method; 
import java.util.ArrayList; 
import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
public class RecoProd extends Activity { 
    EditText pd; 
    TextView error; 

    ArrayList<NameValuePair> postParameters; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     try { 
      Class<?> strictModeClass = Class.forName("android.os.StrictMode", true, Thread.currentThread() 
        .getContextClassLoader()); 

      Class<?> threadPolicyClass = Class.forName("android.os.StrictMode$ThreadPolicy", true, Thread 
        .currentThread().getContextClassLoader()); 

      Class<?> threadPolicyBuilderClass = Class.forName("android.os.StrictMode$ThreadPolicy$Builder", true, 
        Thread.currentThread().getContextClassLoader()); 

      Method setThreadPolicyMethod = strictModeClass.getMethod("setThreadPolicy", threadPolicyClass); 

      Method detectAllMethod = threadPolicyBuilderClass.getMethod("detectAll"); 
      Method penaltyMethod = threadPolicyBuilderClass.getMethod("penaltyLog"); 
      Method buildMethod = threadPolicyBuilderClass.getMethod("build"); 

      Constructor<?> threadPolicyBuilderConstructor = threadPolicyBuilderClass.getConstructor(); 
      Object threadPolicyBuilderObject = threadPolicyBuilderConstructor.newInstance(); 

      Object obj = detectAllMethod.invoke(threadPolicyBuilderObject); 

      obj = penaltyMethod.invoke(obj); 
      Object threadPolicyObject = buildMethod.invoke(obj); 
      setThreadPolicyMethod.invoke(strictModeClass, threadPolicyObject); 

     } catch (Exception ex) { 
      String TAG = null; 
      Log.w(TAG, ex); 
     } 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.recomain); 
     pd = (EditText) findViewById(R.id.name); 

     error = (TextView) findViewById(R.id.showresult); 

     pd.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       postParameters = new ArrayList<NameValuePair>(); 
       postParameters.add(new BasicNameValuePair("product", pd 
         .getText().toString())); 


       // String valid = "1"; 

       DownloadWebPageTask dw = new DownloadWebPageTask(); 
       dw.execute(""); 

      } 
     }); 
    } 

    private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... urls) { 
      String response = null; 
      for (String url : urls) { 
       try { 
        response = CustomHttpClient.executeHttpPost("http://10.0.2.2/abc/check2.php", postParameters); 
        String res = response.toString(); 
        // res = res.trim(); 
        res = res.replaceAll("\\s+", ""); 
        // error.setText(res); 
        try{ 
         res = ""; 
        JSONArray jArray = new JSONArray(res); 
         for(int i=0;i<jArray.length();i++){ 
           JSONObject json_data = jArray.getJSONObject(i); 
           Log.i("prod_id","id: "+json_data.getInt("prod_id")+ 
             ", prod_name: "+json_data.getString("prod_name")+ 
             ", prod_category: "+json_data.getInt("prod_category")+ 
             ", prod_cost: "+json_data.getInt("prod_cost") 
           ); 
           //Get an output to the screen 
           res += "\n" + json_data.getString("prod_id") + " -> "+ json_data.getInt("prod_name"); 
         } 
       } 
       catch(JSONException e){ 
         Log.e("log_tag", "Error parsing data "+e.toString()); 
       } 

       try{ 
       error.setText(res); 
       } 
       catch(Exception e){ 
       Log.e("log_tag","Error in Display!" + e.toString());;   
       } 
      } 
       catch (Exception e) { 
      Log.e("log_tag","Error in http connection!!" + e.toString());  
      } 
      } 
      return response; 

       } 
     @Override 
     protected void onPostExecute(String result) { 
     } 
    } 
} 

Questo è il mio codice PHP:

<?php 
$pd = $_POST['name']; 

//connect to the db 
$user = "root"; 
$pswd = ""; 
$db = "mylogin"; 
$host = "localhost"; 
$conn = mysql_connect($host, $user, $pswd); 
mysql_select_db($db); 

$query = "SELECT * FROM recoprod "; 
$result = mysql_query("SELECT * FROM recoprod"); 
while($row = mysql_fetch_array($result)) { 
    $output[] = $row; 
} 
print(json_encode($output)); 
mysql_close(); 
/* 
$result = mysql_query($query) or die("Unable to verify user because : " . mysql_error()); 
//this is where the actual verification happens 
if(mysql_num_rows($result) > 0) 
echo 1; // for correct login response 
else 
echo 0; // for incorrect login response */ 
?> 

Salve, ho fatto alcuni cambiamenti controllare il codice precedente modificato.

E ho solo 2 righe che sto recuperando con ogni riga contenente 4 dati.

+0

Pubblica il tuo errore logcat. –

+0

Non ho alcun errore logcat penso che l'errore sia nel file php dove restituisco i dati penso di non farlo correttamente. –

+0

prova ad echo il tuo risultato nella console del server o nel tuo host locale .e racchiudi il tuo codice con try catch per ottenere l'eccezione durante l'esecuzione di Asyntask –

risposta

2

il problema è in parte AsyncTask

come si usa AsyncTask è possibile elaborare i dati sulla funzione doInBackground MA Aggiornamento UI ON OnPostExecute. restituisce il valore elaborato su onPostExecute poiché utilizzando AsyncTask su Android è possibile modificare le cose sul layout dopo aver completato il caricamento. ma solo su OnPostExecute stato così elaborare la vostra JSON su doInBackground poi riflettere sul fatto che a disposizione sul OnPostExecute

public class RecoProd extends Activity { 
EditText pd; 
TextView error; 

ArrayList<NameValuePair> postParameters; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.recomain); 
    pd = (EditText) findViewById(R.id.name); 

    error = (TextView) findViewById(R.id.myTableLayout); 

    pd.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("product", pd 
        .getText().toString())); 


      // String valid = "1"; 

      DownloadWebPageTask dw = new DownloadWebPageTask(); 
      dw.execute(""); 

     } 
    }); 
} 

private class DownloadWebPageTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     String response = null; 
     for (String url : urls) { 
      try { 
       response = CustomHttpClient.executeHttpPost("http://10.0.2.2/abc/check2.php", postParameters); 
       String res = response.toString(); 
       // res = res.trim(); 
       res = res.replaceAll("\\s+", ""); 
       // error.setText(res); 






      } catch (Exception e) { 


      } 
     } 
     return res; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     if(result.equals("1")){  
      Intent loginintent = new Intent(RecoProd.this, RecoProd1.class); 
      startActivity(loginintent); 
     } 
     else 
      error.setText("Sorry!! "); 
    } 
} 

}

+0

hmmm puoi modificare il codice sopra e dire come farlo ... –

+0

aggiornato la mia risposta –

+0

se hai ottenuto l'errore fai la tua definizione "String res" sopra il caso di prova –

0

Ecco cosa si può fare:

public class RecoProd extends Activity { 
EditText pd; 
TextView error; 

ArrayList<NameValuePair> postParameters; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.recomain); 
    pd = (EditText) findViewById(R.id.name); 

    error = (TextView) findViewById(R.id.myTableLayout); 

    pd.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("product", pd 
        .getText().toString())); 


      // String valid = "1"; 

      downloadWebPageTask(); 

     } 
    }); 
} 

private void downloadWebPageTask extends AsyncTask<String, Void, String> { 
    String url = "http://10.0.2.2/abc/check2.php?postParameters=paramValue"; 
    grabURL(url); 
} 


public void grabURL(String url){ 
    try { 
     new GrabURL().execute(new URL(url)); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
} 

private class GrabURL extends AsyncTask<URL, Integer, JSONObject> { 

    @Override 
    protected JSONObject doInBackground(URL... urls) { 
     // This method will send the http request 
     JSONObject jsonResponse=null; 
     try 
     { 
      URL link = urls[0]; 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(link.toString()); 
      ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
      String responseBody = httpClient.execute(request, responseHandler); 
      jsonResponse = new JSONObject(responseBody); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return jsonResponse; 
    } 

    @Override 
    protected void onPreExecute() { 
     // This method will be executed before the http request 
     // In this method you can do things like showing the loading sign 
    } 

    @Override 
    protected void onPostExecute(JSONObject jsonObj) { 
     // This method will run after the http request and contains the results 
     // This method expectes you return a valid jSon from the server 
     try { 
      if(! jsonObj.getString("code").equalsIgnoreCase("200")){ 
       // Bad response from server 
      } 
      else if(jsonObj.has("data")){ 
       JSONArray dataArray = jsonObj.getJSONArray("data"); 

       String tmpUserLoc = (String) jsonObj.getJSONObject("data").get("userLocation"); 
       String tempUserNIC = (String) jsonObj.getJSONObject("data").get("userNIC"); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     // You can stop the loading sign here if you showed it in OnPreExecute 
    } 

} 

}

I non ho testato questo codice ma dovrebbe funzionare. Se stai restituendo jSon Array dal server potresti dare un'occhiata a jSonArray doc O this link potrebbe anche essere utile.

Problemi correlati