Android - 将参数传递给 Android 应用程序中的 RESTful URL
Posted
技术标签:
【中文标题】Android - 将参数传递给 Android 应用程序中的 RESTful URL【英文标题】:Android - Passing Params to the RESTful URL in Android app 【发布时间】:2015-11-11 15:11:49 【问题描述】:我正在开发一个涉及传递参数的android应用程序。我想将参数传递给android中的url。
如何使用 EditText 字段将参数传递到 Android 应用程序中的 RESTful URL。也给我在 android 中 get 和 post 方法 webservice 调用和传递参数的基本示例。
MainActivity.java:
public class MainActivity extends Activity implements OnClickListener
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.my_button).setOnClickListener(this);
@Override
public void onClick(View arg0)
Button b = (Button)findViewById(R.id.my_button);
b.setClickable(false);
new LongRunningGetIO().execute();
private class LongRunningGetIO extends AsyncTask <Void, Void, String>
protected String getASCIIContentFromEntity(HttpEntity entity) throws IllegalStateException, IOException
InputStream in = entity.getContent();
StringBuffer out = new StringBuffer();
int n = 1;
while (n>0)
byte[] b = new byte[4096];
n = in.read(b);
if (n>0) out.append(new String(b, 0, n));
return out.toString();
@Override
protected String doInBackground(Void... params)
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
String st1=null;
String st2=null;
EditText et1 = (EditText)findViewById(R.id.editText1);
EditText et2 = (EditText)findViewById(R.id.editText2);
st1= et1.getText().toString();
st2= et2.getText().toString();
HttpGet httpGet = new HttpGet("http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency="+st1+"&ToCurrency="+st2);
Log.d("url", httpGet.toString());
Log.d("et1", et1.toString());
Log.d("et2", et2.toString());
String text = null;
try
HttpResponse response = httpClient.execute(httpGet, localContext);
HttpEntity entity = response.getEntity();
text = getASCIIContentFromEntity(entity);
catch (Exception e)
return e.getLocalizedMessage();
return text;
protected void onPostExecute(String results)
if (results!=null)
EditText et = (EditText)findViewById(R.id.my_edit);
et.setText(results);
Button b = (Button)findViewById(R.id.my_button);
b.setClickable(true);
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:text="Http GET Demo"/>
<EditText
android:id="@+id/editText1"
android:layout_
android:layout_
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_
android:layout_
android:ems="10" />
<Button
android:layout_
android:layout_
android:layout_gravity="center"
android:text="GET"
android:id="@+id/my_button"/>
<EditText
android:layout_margin="20dip"
android:layout_
android:layout_
android:minLines="15"
android:maxLines="15"
android:textSize="12sp"
android:editable="false"
android:id="@+id/my_edit"/>
</LinearLayout>
【问题讨论】:
我收到错误,不幸停止了。 如该答案所述,您无法访问 doInBackground 中的 UI 元素。使用 onPreExecute。 @OzgurGUL。但是上面的代码对我有用。早些时候我把它写成 st1= et1.toString(); st2= et2.toString();不幸的是,我得到了错误停止。但现在将其更改为 st1= et1.getText().toString(); st2= et2.getText().toString();它对我有用。 【参考方案1】:在doInBackground
中有以下几行:
....
st1= et1.getText().toString();
st2= et2.getText().toString();
导致问题因为et1
和et1
是UI 元素,所以我们只能从UI 线程而不是从doInBackground
中用于在单独线程中执行任务的任何后台线程访问这些视图。
使用onPreExecute
方法从EditText
获取数据:
String st1=null;
@Override
protected void onPreExecute()
super.onPreExecute();
EditText et1 = (EditText)findViewById(R.id.editText1);
st1= et1.getText().toString();
// do same for other
现在在doInBackground
中使用st1
字符串来获取用户输入文本。
【讨论】:
我的代码运行良好。之前我把它写成 st1= et1.toString(); st2= et2.toString();不幸的是,我得到了错误停止。但现在将其更改为 st1= et1.getText().toString(); st2= et2.getText().toString();它对我有用。以上是关于Android - 将参数传递给 Android 应用程序中的 RESTful URL的主要内容,如果未能解决你的问题,请参考以下文章