Java Http客户端服务器应用程序正在从本地主机获取数据,远程服务器出现异常
我是android开发的初学者,在搜索了许多网站后,我测试了基本的http客户端服务器应用程序,我得到了下面给出的代码。此代码对于本地主机运行良好,但在尝试访问远程主机链接时引发异常是错误的 java代码是:Java Http客户端服务器应用程序正在从本地主机获取数据,远程服务器出现异常,java,android,apache,androidhttpclient,Java,Android,Apache,Androidhttpclient,我是android开发的初学者,在搜索了许多网站后,我测试了基本的http客户端服务器应用程序,我得到了下面给出的代码。此代码对于本地主机运行良好,但在尝试访问远程主机链接时引发异常是错误的 java代码是: package third.example.clientserverapp; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import org.
package third.example.clientserverapp;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runOnUiThread(( new Runnable() {
public void run(){
HttpClient Client= new DefaultHttpClient();
HttpGet getData= new HttpGet("http://gprecelectricus.org/sendMessage.php");
try{
HttpResponse response= Client.execute(getData);
if(response!=null)
{
String line = "";
InputStream is= response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((line=br.readLine())!=null)
{
TextView tv= (TextView) findViewById(R.id.display_msg);
tv.setText(line);
}
}
}catch(Exception e){
e.printStackTrace();
TextView tv= (TextView) findViewById(R.id.display_msg);
tv.setText("caught exception");
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
logcat是:
01-26 20:14:20.596: W/System.err(1043): android.os.NetworkOnMainThreadException
01-26 20:14:20.616: W/System.err(1043): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
01-26 20:14:20.616: W/System.err(1043): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
01-26 20:14:20.616: W/System.err(1043): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
01-26 20:14:20.616: W/System.err(1043): at libcore.io.IoBridge.connect(IoBridge.java:112)
01-26 20:14:20.630: W/System.err(1043): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
01-26 20:14:20.636: W/System.err(1043): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
01-26 20:14:20.636: W/System.err(1043): at java.net.Socket.connect(Socket.java:842)
01-26 20:14:20.636: W/System.err(1043): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
01-26 20:14:20.636: W/System.err(1043): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
01-26 20:14:20.636: W/System.err(1043): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-26 20:14:20.647: W/System.err(1043): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-26 20:14:20.656: W/System.err(1043): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-26 20:14:20.656: W/System.err(1043): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-26 20:14:20.656: W/System.err(1043): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-26 20:14:20.656: W/System.err(1043): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-26 20:14:20.666: W/System.err(1043): at third.example.clientserverapp.MainActivity$1.run(MainActivity.java:32)
01-26 20:14:20.676: W/System.err(1043): at android.app.Activity.runOnUiThread(Activity.java:4591)
01-26 20:14:20.676: W/System.err(1043): at third.example.clientserverapp.MainActivity.onCreate(MainActivity.java:25)
01-26 20:14:20.686: W/System.err(1043): at android.app.Activity.performCreate(Activity.java:5008)
01-26 20:14:20.686: W/System.err(1043): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
01-26 20:14:20.686: W/System.err(1043): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
01-26 20:14:20.686: W/System.err(1043): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-26 20:14:20.686: W/System.err(1043): at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-26 20:14:20.686: W/System.err(1043): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-26 20:14:20.686: W/System.err(1043): at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 20:14:20.697: W/System.err(1043): at android.os.Looper.loop(Looper.java:137)
01-26 20:14:20.706: W/System.err(1043): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-26 20:14:20.716: W/System.err(1043): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 20:14:20.716: W/System.err(1043): at java.lang.reflect.Method.invoke(Method.java:511)
01-26 20:14:20.716: W/System.err(1043): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-26 20:14:20.726: W/System.err(1043): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-26 20:14:20.726: W/System.err(1043): at dalvik.system.NativeStart.main(Native Method)
01-26 20:14:20.867: W/EGL_emulation(1043): eglSurfaceAttrib not implemented
无法从其他线程更改UI
使用runOnUIThread
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while((line=br.readLine())!=null)
{
TextView tv= (TextView) findViewById(R.id.display_msg);
tv.setText(line);
}
}
});
请确保:
- 在您的AndroidManifest中,您具有INTERNET输入权限
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://gprecelectricus.org/sendMessage.php");
try {
HttpResponse response = client.execute(request);
if (response != null) {
final String result = convertStreamToString(response.getEntity().getContent());
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv= (TextView) findViewById(R.id.display_msg);
tv.setText(result);
}
});
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String convertStreamToString(InputStream is) throws IOException {
String line = "";
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((line=br.readLine())!=null)
{
sb.append(line);
}
return sb.toString();
}
请添加logcat以获得更多关于粗略估计的帮助
tv.setText(line)代码>可以抛出异常,因为它是在后台线程中完成的,使用runOnUiThread
当您对UIT进行修改时谢谢,添加runOnUiThread后我仍然得到一个异常我已经添加了Logcat先生,请您浏览一下,谢谢检查我的新答案
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://gprecelectricus.org/sendMessage.php");
try {
HttpResponse response = client.execute(request);
if (response != null) {
final String result = convertStreamToString(response.getEntity().getContent());
runOnUiThread(new Runnable() {
@Override
public void run() {
TextView tv= (TextView) findViewById(R.id.display_msg);
tv.setText(result);
}
});
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String convertStreamToString(InputStream is) throws IOException {
String line = "";
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((line=br.readLine())!=null)
{
sb.append(line);
}
return sb.toString();
}