Androidアプリに小さな大きな問題があります。配列リストを非同期タスクに渡して、外部APIにデータを投稿しようとしています。しかし、eclipseは常にデータ型エラーを返し、アクティビティからASyncTaskにパラメーターを渡す方法がわかりません。助けてください
public void Login(View view){
String usern = username.getText().toString();
String pwd = password.getText().toString();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username", usern));
nameValuePairs.add(new BasicNameValuePair("password", pwd));
nameValuePairs.add(new BasicNameValuePair("external-login", "true"));
if(isNetworkAvailable()){
GetAxiomaCredentials axiomacredentials = new GetAxiomaCredentials();
axiomacredentials.execute();
}else{
Toast.makeText(this, "Network is not available.", Toast.LENGTH_LONG).show();
}
}
そのため、nameValuePairsを渡してパラメーターとして実行できますが、AsyncTaskプライベートクラスから不正な型エラーが発生します
private class GetAxiomaCredentials extends AsyncTask<ArrayList<String>, Integer, String>{
private static final String POST_URL = "http://192.168.0.105/index.php/r=rsite/heartbeat";
@Override
protected String doInBackground(ArrayList<String>... params) {
int responseCode = -1;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(POST_URL);
try {
// Add your data
ArrayList<String> data = params[0];
httppost.setEntity(new UrlEncodedFormEntity(data));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
return "Code: " + responseCode;
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
public void postData(String name, String email, String password,String mobile) {
// Create a new HttpClient and Post Header
}
}
私が得ているEclipseコンパイルエラーは次の行にあります:
ArrayList<String> data = params[0];
httppost.setEntity(new UrlEncodedFormEntity(data));
では、これを修正して、アクティビティのログインアクションからAsyncTaskにすべてのパラメーターを渡すにはどうすればよいですか?ありがとう
doInBackgroundへの入力をArrayListに変更します。これにより、キャスト例外が削除されます。
private class GetAxiomaCredentials extends AsyncTask<Object, Integer, String>{
...
ArrayListをObjectに変更します
protected String doInBackground(Object... params) {
int responseCode = -1;
List<NameValuePair> data = (List<NameValuePair>) params[0];
...
次に、executeを呼び出すときに、nameValuePairsを渡します。
if(isNetworkAvailable()){
GetAxiomaCredentials axiomacredentials = new GetAxiomaCredentials();
axiomacredentials.execute(nameValuePairs);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加