我是 Android 应用程序开发的新手.请找到我的 AsyncTask 代码,用于在用户单击按钮时连接 URL.
I'm new to Android application development. Please find my code for AsyncTask for connecting a URL when a user clicked on a button.
package in.mosto.geeglobiab2bmobile; import java.io.IOException; import java.HttpURLConnection; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import android.os.AsyncTask; public class OnbuttonclickHttpPost extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { byte[] result = null; String str = ""; // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("URL_HERE/login.php"); try { // Add your data List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("mobile", params[0])); nameValuePairs.add(new BasicNameValuePair("password", params[1])); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ result = EntityUtils.toByteArray(response.getEntity()); str = new String(result, "UTF-8"); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } return str; } /** * on getting result */ @Override protected void onPostExecute(String result) { // something with data retrieved from server in doInBackground //Log.v("Response ", result); MainActivity main = new MainActivity(); if(result.equals("NO_USER_ERROR")){ main.showNewDialog("There is no user existed with the given details."); }else if(result.equals("FIELDS_ERR")){ main.showNewDialog("Please enter username and password."); }else{ main.startRecharge(result); } } }查看我的 MainActivity 方法:
See my MainActivity Methods:
OnbuttonclickHttpPost t = new OnbuttonclickHttpPost(); t.execute(mobile.getText().toString(),pass.getText().toString()); public void startRecharge(String param){ Intent inte = new Intent(MainActivity.this.getBaseContext(), StartRecharge.class); startActivity(inte); } public void showNewDialog(String alert){ new AlertDialog.Builder(this) .setTitle("Please correct following error") .setMessage(alert) .setPositiveButton("Okay", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss(); } }) .show(); }这里出现错误.我不知道我的代码有什么问题.有人可以帮我吗?
Here i'm getting an error. I don't know whats wrong with my code. Can any one please help me ?
推荐答案这是错误的.您不应创建活动类的实例.
This is wrong. You should not create an instance of your activity class.
MainActivity main = new MainActivity();Activity 由 startActivity 启动.
Activity is started by startActivity.
你可以让你的异步任务成为你活动类的内部类并在onPostExecute
You can make your asynctask an inner class of your activity class and update ui in onPostExecute
或者使用接口
如何从 AsyncTask 返回布尔值?
编辑
new OnbuttonclickHttpPost(ActivityName.this).execute(params);在你的异步任务中
TheInterface listener;在构造器中
public OnbuttonclickHttpPost(Context context) { listener = (TheInterface) context; c= context; }界面
public interface TheInterface { public void theMethod(String result); }在 onPostExecute
In onPostExecute
if (listener != null) { listener.theMethod(result); }在你的活动类中实现接口
In your activity class implement the interface
implements OnbuttonclickHttpPos.TheInterface实现方法
@Override public void theMethod(STring result) { // update ui using result }更多推荐
无法将响应从 AsyncTask 发布到 MainActivity
发布评论