Can#39;t post response from AsyncTask to MainActivity(无法将响应从 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.net.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("http://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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法将响应从 AsyncTask 发布到 MainActivity
基础教程推荐
- 从 python 访问 JVM 2022-01-01
- 大摇大摆的枚举 2022-01-01
- 不推荐使用 Api 注释的描述 2022-01-01
- Java Swing计时器未清除 2022-01-01
- Java 实例变量在两个语句中声明和初始化 2022-01-01
- 多个组件的复杂布局 2022-01-01
- 如何在 JFrame 中覆盖 windowsClosing 事件 2022-01-01
- 在 Java 中创建日期的正确方法是什么? 2022-01-01
- 验证是否调用了所有 getter 方法 2022-01-01
- 如何在 Spring @Value 注解中正确指定默认值? 2022-01-01
