2013-01-25 5 views
9

Hallo, ich benutze PHP, um die Daten aus der MySQL-Datenbank zu bekommen und nach dem erfolgreichen Empfang der Daten rufe ich eine neue Aktivität auf, wo ich die Daten drucken muss.Wie gibt man Daten von PHP zu Eclipse zurück?

Dies ist mein Code:

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) { 
     } 
    } 
} 

Das ist mein PHP-Code:

<?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 */ 
?> 

Ich bin eine Kraft nahe zu kommen, wenn ich es ausführen.

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) { 
     } 
    } 
} 

Das ist mein PHP-Code ist:

<?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 */ 
?> 

Hallo, ich habe einige Änderungen, die oben bearbeitet Code überprüfen.

Und ich habe nur 2 Zeilen, die ich mit jeder Zeile mit 4 Daten abholen.

+0

Veröffentlichen Sie Ihren Logcat-Fehler. –

+0

Ich habe keine Logcat Fehler Ich denke, der Fehler ist in der PHP-Datei, wo ich die Daten zurückgeben, ich denke, ich mache es nicht richtig. –

+0

versuchen Sie, Ihr Ergebnis in der Serverkonsole oder in Ihrem lokalen Host zu reproduzieren .und umgeben Sie Ihren Code mit try catch, um die Ausnahme während der Ausführung von Asyntask zu erhalten –

Antwort

2

Ihr Problem ist auf AsyncTask Teil

wie Sie AsyncTask verwenden, können Sie Daten auf doInBackground Funktion BUT Update UI ON OnPostExecute verarbeiten. return verarbeiteten Wert zu onPostExecute als AsyncTask auf Android verwenden können Sie die Dinge im Layout nach dem Laden ändern. aber nur auf OnPostExecute Zustand so Ihre json auf doInBackground verarbeiten dann, dass auf OnPostExecute Layout widerspiegeln

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 können Sie den obigen Code bearbeiten und sagen, wie das geht ... –

+0

meine Antwort aktualisiert –

+0

Wenn Sie Fehler haben, machen Sie Ihre "String res" Definition über den Versuch –

0

Hier ist das, was Sie tun können:

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 habe diesen Code nicht getestet, aber es sollte funktionieren. Wenn Sie jSon Array vom Server zurücksenden, können Sie einen Blick auf jSonArray doc ODER this link werfen.

Verwandte Themen