2012-06-18 40 views
2

在我的Android:参数传递到PHP从Android的

String cat_id = getIntent().getExtras().getString("category_id"); 

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

    try { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(
       "http://www.---.com/items.php"); 
     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()); 
    } 

在我的PHP:

// editing out DB connections which have been verified to work 


<?php 
$sql=mysql_query("SELECT * FROM items WHERE cat_id = '".$_REQUEST['cat_id']."'"); 
while($row=mysql_fetch_assoc($sql)) 
    $output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

所以我的问题是,它返回什么(在JSON结果的一部分 - 干杯说“没有物品被找到”)。我的代码是否正确,是否将参数从Android传递到PHP?

+0

林不知道但是是 $ output [] = $ row,对吗? 不应该保留一个计数器变量,它将增加值并将值赋给$ output。 – ppsreejith

+0

您是否尝试验证$输出是否正确?如果从浏览器调用PHP脚本,它会返回什么结果? – raina77ow

+0

@ppsreejith是的,在PHP中可以将值推入数组。 – raina77ow

回答

0

我想出了什么是没有人回答的问题。

问题开始之前 Java传递给PHP。它是一个传入Java活动中的包。我有一个简单的错误,涉及使用一个不正确的原语,这反过来导致一个null通过一个包被传入。

null继续沿着路径下降到PHP部分。所以上面显示的代码实际上是正确的。

0

不应该在该行

$sql=mysql_query("SELECT * FROM items WHERE cat_id = '".$_REQUEST['cat_id']."'"); 

$sql=mysql_query("SELECT * FROM items WHERE cat_id = '".$_POST['cat_id']."'"); 

即$ _REQUEST至$ _ POST?

我建议使用Firefox的Firebug插件,并跟踪邮件发送到服务器的确切形式。

+0

通常[$ _REQUEST](http://php.net/manual/en/reserved.variables.request.php)包含$ _POST和$ _GET。虽然可能会有问题。 – raina77ow

+0

我改变了这一点,它仍然在浏览器中显示为空。 – KickingLettuce

+0

我想我可能已经抓到了一些东西。 cat_id在Android部分中返回为null,然后它甚至到达php。它没有正确地抓住捆绑的价值,我不认为。 – KickingLettuce

0

CustomList.java: - >

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class CustomList extends ArrayAdapter<String>{ 

private final Activity context; 
private final String[] web; 
private final String[] imageId; 
Context ct; 
public CustomList(Activity context, 
String[] web, String[] imageId) { 
super(context, R.layout.list_single, web); 
this.context = context; 
this.web = web; 
this.imageId = imageId; 
ct=context; 

} 
@Override 
public View getView(int position, View view, ViewGroup parent) { 
LayoutInflater inflater = context.getLayoutInflater(); 
View rowView= inflater.inflate(R.layout.list_single, null, true); 
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 
TextView txtval=(TextView)rowView.findViewById(R.id.val); 

//Typeface tf=Typeface.createFromAsset(ct.getAssets(), "saral.ttf"); 
//Typeface tf=Typeface.createFromAsset(ct.getAssets(), "shrutib.ttf"); 
//txtTitle.setTypeface(tf); 
//txtTitle.setText(web[position]); 
//txtval.setTypeface(tf); 
txtval.setText(imageId[position]); 
//ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 

//imageView.setImageResource(imageId[position]); 
return rowView; 
} 
} 

MainActivity.java: - >

package learn2crack.customlistview; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
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.net.ParseException; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.content.Intent; 


public class MainActivity extends Activity { 
    ListView list; 

    String result = null; 
    InputStream is = null; 
    StringBuilder sb = null; 

    String[] web=null; 
    String[] imageId = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     // http post 
try { 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("link of php page"); 
// 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()); 
       } 

       // convert response to string 
try { 
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
sb = new StringBuilder(); 
sb.append(reader.readLine() + "\n"); 
String line = "0"; 
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()); 
} 

// paring data 
//JSONObject jArray; 
JSONArray jArray; 
    try { 
    jArray = new JSONArray(result); 
    JSONObject json_data = null; 
    web = new String[jArray.length()]; 
    imageId=new String[jArray.length()]; 
    for (int i = 0; i < jArray.length(); i++) { 
json_data = jArray.getJSONObject(i); 
web[i] = json_data.getString("category_id"); 
imageId[i] = json_data.getString("category_name"); 
} 
} catch (JSONException e1) { 
Toast.makeText(getBaseContext(), "No City Found", Toast.LENGTH_LONG).show(); 
} catch (ParseException e1) { 
e1.printStackTrace(); 
} 
CustomList adapter = new CustomList(MainActivity.this, web, imageId); 
list=(ListView)findViewById(R.id.list); 
list.setAdapter(adapter); 
list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

        @Override 
    public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
Intent newint=new Intent(getApplicationContext(), subcatcls.class); 
newint.putExtra("cat_id",web[+ position]); 
         startActivity(newint); 
        } 
       }); 
    } 
} 

和PHP代码 使用的print_r,而不是打印