2012-06-18 64 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,而不是打印