Java 我的onPostExecute方法没有';我没接到电话
出于某种原因,我的doinbackground方法执行,但onPost执行不执行。我放置了覆盖注释并匹配了参数,我也在执行task.execute,而不是仅仅调用doinbackground,但它仍然不执行。 这就是我的代码的样子:Java 我的onPostExecute方法没有';我没接到电话,java,android,android-asynctask,Java,Android,Android Asynctask,出于某种原因,我的doinbackground方法执行,但onPost执行不执行。我放置了覆盖注释并匹配了参数,我也在执行task.execute,而不是仅仅调用doinbackground,但它仍然不执行。 这就是我的代码的样子: package com.Keb3mr.workoutscheduler; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.
package com.Keb3mr.workoutscheduler;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.util.Log;
public class LoginTask extends AsyncTask<Void, Void, HttpResponse> {
private HttpEntity entity_;
private String url_;
private HttpCallback callback_;
public LoginTask(HttpEntity entity, String url, HttpCallback callback){
super();
entity_ = entity;
url_ = url;
callback_ = callback;
}
@Override
protected void onPostExecute(HttpResponse result) {
// TODO Auto-generated method stub
Log.i("onPost", "executing");
super.onPostExecute(result);
callback_.onResponse(result);
}
@Override
protected HttpResponse doInBackground(Void... params) {
// TODO Auto-generated method stub
Log.i("doinbackground", "executing");
HttpResponse resp = null;
try{
HttpPost post = new HttpPost(url_);
Log.i("doinbackground", "httppst");
post.setEntity(entity_);
Log.i("doinbackground", "setentity");
HttpClient client = new DefaultHttpClient();
Log.i("doinbackground", "client");
resp = client.execute(post);
Log.i("doinbackground", "resp");
}
catch(Exception e){
Log.i("doinbackground", "error");
e.printStackTrace();
}
return resp;
}
}
Android活动:
package com.Keb3mr.workoutscheduler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import com.Keb3mr.workoutscheduler.MyApp;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements HttpCallback, OnClickListener{
private EditText user_;
private EditText pass_;
private Button login_;
private Button signUp_;
private MyApp appState_;
private String url_ = "http://192.168.1.110:8888/vshare/account/create";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("Workout Scheduler");
MyApp appState = ((MyApp)getApplicationContext());
appState_ = appState;
user_ = (EditText) findViewById(R.id.userText);
pass_ = (EditText) findViewById(R.id.passwordText);
login_ = (Button) findViewById(R.id.loginButton);
signUp_ = (Button) findViewById(R.id.signupButton);
appState_.setUser("default");
appState_.setPass("default");
login_.setOnClickListener(this);
signUp_.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == R.id.loginButton){
Log.i("amre", "button pushed");
appState_.setUser(user_.getText().toString());
appState_.setPass(pass_.getText().toString());
try {
login(url_);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent i = new Intent(this, ViewCreate.class);
startActivity(i);
}
else if(v.getId() == R.id.signupButton){
appState_.setUser(user_.getText().toString());
appState_.setPass(pass_.getText().toString());
}
}
public void login(String server) throws Exception{
Log.i("button", "login");
MultipartEntity entity = new MultipartEntity();
entity.addPart("user", new StringBody(appState_.getUser()));
entity.addPart("pass", new StringBody(appState_.getPass()));
LoginTask t = new LoginTask(entity, url_, this);
t.execute();
Log.i("Task", "Executed");
}
public void onResponse(HttpResponse resp) {
String line = null;
InputStream is = null;
try {
is = resp.getEntity().getContent();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e1) {
e1.printStackTrace();
}
String result = sb.toString();
Log.i("reuslt:", result);
}
public void onError(Exception e) {
// TODO Auto-generated method stub
}
}
我在onclick方法中调用login,该方法调用t.execute。
这就是我的异步任务的样子:
package com.Keb3mr.workoutscheduler;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
import android.util.Log;
public class LoginTask extends AsyncTask<Void, Void, HttpResponse> {
private HttpEntity entity_;
private String url_;
private HttpCallback callback_;
public LoginTask(HttpEntity entity, String url, HttpCallback callback){
super();
entity_ = entity;
url_ = url;
callback_ = callback;
}
@Override
protected void onPostExecute(HttpResponse result) {
// TODO Auto-generated method stub
Log.i("onPost", "executing");
super.onPostExecute(result);
callback_.onResponse(result);
}
@Override
protected HttpResponse doInBackground(Void... params) {
// TODO Auto-generated method stub
Log.i("doinbackground", "executing");
HttpResponse resp = null;
try{
HttpPost post = new HttpPost(url_);
Log.i("doinbackground", "httppst");
post.setEntity(entity_);
Log.i("doinbackground", "setentity");
HttpClient client = new DefaultHttpClient();
Log.i("doinbackground", "client");
resp = client.execute(post);
Log.i("doinbackground", "resp");
}
catch(Exception e){
Log.i("doinbackground", "error");
e.printStackTrace();
}
return resp;
}
}
package com.Keb3mr.workoutscheduler;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入android.os.AsyncTask;
导入android.util.Log;
公共类LoginTask扩展异步任务{
私有HttpEntity;
私有字符串url;
私有HttpCallback回调函数;
公共登录任务(HttpEntity、字符串url、HttpCallback回调){
超级();
实体=实体;
url=url;
回调=回调;
}
@凌驾
受保护的void onPostExecute(HttpResponse结果){
//TODO自动生成的方法存根
Log.i(“on post”、“executing”);
super.onPostExecute(结果);
回调响应(结果);
}
@凌驾
受保护的HttpResponse doInBackground(无效…参数){
//TODO自动生成的方法存根
Log.i(“doinbackground”、“executing”);
HttpResponse resp=null;
试一试{
HttpPost=新的HttpPost(url);
Log.i(“doinbackground”、“httppst”);
post.setEntity(entity_);
Log.i(“doinbackground”、“setentity”);
HttpClient=new DefaultHttpClient();
Log.i(“doinbackground”、“客户”);
resp=客户端执行(post);
Log.i(“doinbackground”、“resp”);
}
捕获(例外e){
Log.i(“doinbackground”、“error”);
e、 printStackTrace();
}
返回响应;
}
}
请检查您是否在清单中授予了internet权限。。如果互联网工作正常,请检查您的下载Url是否有效。。如果下载url无效,则会在doInBackground方法中引发异常,因此onPostExecute方法不会调用您的输出是什么?“resp”
是否显示过?我刚刚又看了一眼日志cat,它似乎没有得到响应,因为它后面的文本没有被打印出来。我想如果在doInBackground方法中出现异常,serversidePost执行方法将不会调用