您好我已经创建了一个应用程序,只需单击一个按钮就可以将字符串发送到下一个活动,而在第二个活动中,我使用该值来从数据库中检索数据。
我正在做以下事情。
Intent myIntent = getIntent(); // getting the value from the previous activity
myIntent.getStringExtra("lbl_name");
postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("product", lbl_name//passing the name to the database .getText().toString()));
问题是它无法识别lbl_name。
我搜索了互联网,但找不到解决方案。 请告诉我我是否做得对。
传递值的代码。
Intent myIntent = new Intent(SinglePlaceActivity.this,RecoProd.class);
myIntent.putExtra("lbl_name", "lbl_name");
SinglePlaceActivity.this.startActivity(myIntent);
访问数据库的代码。
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);
Intent myIntent = getIntent(); // getting the value from the previous activity
String lbl_name= myIntent.getStringExtra("lbl_name");//< get lbl_name from Intent
pd = (EditText) findViewById(R.id.name);
error = (TextView) findViewById(R.id.showresult);
postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("product", lbl_name
));
// 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://192.168.1.7/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.getString("prod_category")+
", prod_cost: "+json_data.getDouble("prod_cost")
);
//Get an output to the screen
res += "\n" + json_data.getInt("prod_id") + " -> "+ json_data.getString("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) {
}
}
}
答案 0 :(得分:1)
您需要从Intent中提取lbl_name
值:
Intent myIntent = getIntent(); // getting the value from the previous activity
String lbl_name= myIntent.getStringExtra("lbl_name");//< get lbl_name from Intent
postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("product",lbl_name));
或者如果lbl_name在prev Activity中是静态的,那么您可以将其作为:
访问它postParameters.add(new BasicNameValuePair("product",
Your_prev_Activity_Name.lbl_name));
答案 1 :(得分:1)
尝试传递Intent
中的字符串值,如下所示:
Intent myIntent = new Intent(SinglePlaceActivity.this,RecoProd.class); myIntent.putExtra("lbl_name", "lbl_name"); SinglePlaceActivity.this.startActivity(myIntent);
使用getString();
Intent myIntent = getIntent(); // getting the value from the previous activity String lbl_name=myIntent.getString("lbl_name"); postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("product", lbl_name//passing the name to the database .getText().toString()));