当前位置: 首页 > 面试题库 >

Android 4.2上的HttpClient.execute(HttpPost)错误

阎德宇
2023-03-14
问题内容

我正在浏览此网站http://givemepass.blogspot.hk/2011/12/http-
server.html
尝试使用android应用程序连接PHP服务器来获取消息。

GetServerMessage.java

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 org.apache.http.util.EntityUtils;
public class GetServerMessage {

    public String stringQuery(String url){
        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost method = new HttpPost(url);
            HttpResponse response = httpclient.execute(method);
            HttpEntity entity = response.getEntity();
            if(entity != null){
                return EntityUtils.toString(entity);
            }
            else{
                return "No string.";
            }
         }
         catch(Exception e){
             return "Network problem";
         }
    }
}

GetPhpServerMessageDemoActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class GetPhpServerMessageDemoActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView textView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView)findViewById(R.id.text_view);
        GetServerMessage message = new GetServerMessage();
        String msg = message.stringQuery("http://192.168.1.88/androidtesting.php");
        textView.setText("Server message is "+msg);
    }

}

我试图从该站点下载Android应用程序项目http://uploadingit.com/file/d4632ekfpwjiupyn/GetPhpServerMessageDemo2.zip并在我的手机上运行,​​这是可行的。但是,当我开始一个新项目(Minimuim所需的SDK:API8,目标SDK:API17,编译为:API17)并复制这两个Java代码时。我已经添加了权限android.permission.INTERNET,所以我不知道问题出在哪里,我只知道在运行时HttpResponse response = httpclient.execute(method);出现错误并返回了字符串“网络问题”。


问题答案:

您正在ui线程上运行与网络相关的操作。您将获得NetworkOnMainThreadException邮政蜂窝。

使用ThreadAsynctask

调用asynctask

   new TheTask().execute("http://192.168.1.88/androidtesting.php");

异步任务

http://developer.android.com/reference/android/os/AsyncTask.html

class TheTask extends AsyncTask<String,String,String>
    {

@Override
protected String onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    // update textview here
    textView.setText("Server message is "+result);
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
}

@Override
protected String doInBackground(String... params) {
     try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost method = new HttpPost(params[0]);
            HttpResponse response = httpclient.execute(method);
            HttpEntity entity = response.getEntity();
            if(entity != null){
                return EntityUtils.toString(entity);
            }
            else{
                return "No string.";
            }
         }
         catch(Exception e){
             return "Network problem";
         }

}
}

api 23中不推荐使用Update HttpClient HttpUrlConnection

http://developer.android.com/reference/java/net/HttpURLConnection.html


 类似资料:
  • 问题内容: 我正在使用以下代码从Web服务器请求xml: 当我调用httpclient.execute(httpget,responseHandler)时,我得到一个clientProtocolException。该URL在Web浏览器中工作正常,它返回xml,然后浏览器显示它。 有什么想法为什么我会得到一个clientProtocolException而浏览器却能很好地处理它? 编辑1: 查看协

  • 我在Android v4中读取APN时遇到问题。2(是读,不是写APN),它抛出了一个安全异常: 没有写入APN设置的权限:用户10068和当前进程都没有android。准许写入APN设置。 以前所有平台上都使用相同的代码,有人知道有什么解决方法吗? 谢谢

  • 我正在尝试在java中使用httpPost请求(通过MultipartEntityBuilder)上传文件。但是我得到了一个软件导致的连接中止:套接字写入错误。 这是我的httpPost正文(在wireShark中) 代码端为: 和错误: 有什么想法吗?谢谢大家。

  • 问题内容: 我正在编写一个Android 2.2应用程序,该应用程序将JSON严格性过帐到ReSTfull Web服务。 Fiddler对Web服务的调用具有与预期相同的Json返回,而对ASPX Web应用程序具有与预期的相同Json返回。 当我查看服务器日志时,可以看到服务器使用307重定向响应初始POST动词,然后立即响应GET和405错误。 Fiddler和aspx应用程序记录一个307重

  • 有没有办法在Android4.2上关闭通知栏? 我使用的代码只适用于以前的Android版本: 请帮帮我。。。