无法将响应从 AsyncTask 发布到 MainActivity

编程入门 行业动态 更新时间:2024-10-28 14:30:18
本文介绍了无法将响应从 AsyncTask 发布到 MainActivity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我是 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

本文发布于:2023-10-10 12:25:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1478659.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:AsyncTask   MainActivity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!