问题描述
我是android开发方面的新手,我在通过HTTP连接发送短信并获取返回字符串的测试中遇到此错误消息.以下是http api:
I am a newbie on android development and i am having this error message while testing to send an sms over http connection and get a return string. below is the http api:
http://server:port/CreditCheck/checkcredits?username=xxxxx&password=xxxx
我得到java.io.ioexception
,我不知道该如何进一步追踪,这确实让我头疼.
I get java.io.ioexception
, i dont know how to track further and it is really giving me headache.
public class Sender {
// Username that is to be used for submission
String username;
// password that is to be used along with username
String password;
// Message content that is to be transmitted
String message;
/**
* What type of the message that is to be sent
* <ul>
* <li>0:means plain text</li>
* <li>1:means flash</li>
* <li>2:means Unicode (Message content should be in Hex)</li>
* <li>6:means Unicode Flash (Message content should be in Hex)</li>
* </ul>
*/
String type;
/**
* Require DLR or not
* <ul>
* <li>0:means DLR is not Required</li>
* <li>1:means DLR is Required</li>
* </ul>
*/
String dlr;
/**
* Destinations to which message is to be sent For submitting more than one
* destination at once destinations should be comma separated Like
* 91999000123,91999000124
*/
String destination;
// Sender Id to be used for submitting the message
String source;
// To what server you need to connect to for submission
String server;
// Port that is to be used like 8080 or 8000
int port;
// urlParts is the excessive part of the URL
//String urlParts;
public Sender(String server, int port, String username, String password,
String message, String dlr, String type, String destination, String source) {
this.username = username;
this.password = password;
this.message = message;
this.dlr = dlr;
this.type = type;
this.destination = destination;
this.source = source;
this.server = server;
this.port = port;
}
public String checkBalance() {
try {
// Url that will be called to submit the message
URL sendUrl = new URL("http://" + this.server + ":" + this.port
+ "/CreditCheck/checkcredits");
HttpURLConnection httpConnection = (HttpURLConnection) sendUrl
.openConnection();
// This method sets the method type to POST so that
// will be send as a POST request
httpConnection.setRequestMethod("POST");
// This method is set as true wince we intend to send
// input to the server
httpConnection.setDoInput(true);
// This method implies that we intend to receive data from server.
httpConnection.setDoOutput(true);
// Implies do not use cached data
httpConnection.setUseCaches(false);
// Data that will be sent over the stream to the server.
DataOutputStream dataStreamToServer = new DataOutputStream(
httpConnection.getOutputStream());
dataStreamToServer.writeBytes("username="
+ URLEncoder.encode(this.username, "UTF-8") + "&password="
+ URLEncoder.encode(this.password, "UTF-8"));
dataStreamToServer.flush();
dataStreamToServer.close();
// Here take the output value of the server.
BufferedReader dataStreamFromUrl = new BufferedReader(new InputStreamReader(httpConnection.getInputStream()));
String dataFromUrl = "", dataBuffer = "";
// Writing information from the stream to the buffer
while ((dataBuffer = dataStreamFromUrl.readLine()) != null) {
dataFromUrl += dataBuffer;
}
/**
* Now dataFromUrl variable contains the Response received from the
* server so we can parse the response and process it accordingly.
*/
dataStreamFromUrl.close();
//System.out.println("Response: " + dataFromUrl);
return dataFromUrl;
} catch (IOException ex) {
ex.printStackTrace();
return ex.toString();
}catch(Exception ex){
ex.printStackTrace();
return ex.toString();
}
}
public String submitMessage() {
try {
// Url that will be called to submit the message
URL sendUrl = new URL("http://" + this.server + ":" + this.port + "/bulksms/bulksms");
HttpURLConnection httpConnection = (HttpURLConnection) sendUrl.openConnection();
// This method sets the method type to POST so that
// will be send as a POST request
httpConnection.setRequestMethod("GET");
// This method is set as true wince we intend to send
// input to the server
httpConnection.setDoInput(true);
// This method implies that we intend to receive data from server.
httpConnection.setDoOutput(true);
// Implies do not use cached data
httpConnection.setUseCaches(false);
// Data that will be sent over the stream to the server.
DataOutputStream dataStreamToServer = new DataOutputStream(httpConnection.getOutputStream());
dataStreamToServer.writeBytes("username="
+ URLEncoder.encode(this.username, "UTF-8") + "&password="
+ URLEncoder.encode(this.password, "UTF-8") + "&type="
+ URLEncoder.encode(this.type, "UTF-8") + "&dlr="
+ URLEncoder.encode(this.dlr, "UTF-8") + "&destination="
+ URLEncoder.encode(this.destination, "UTF-8") + "&source="
+ URLEncoder.encode(this.source, "UTF-8") + "&message="
+ URLEncoder.encode(this.message, "UTF-8"));
dataStreamToServer.flush();
dataStreamToServer.close();
// Here take the output value of the server.
BufferedReader dataStreamFromUrl = new BufferedReader(new InputStreamReader(httpConnection.getInputStream()));
String dataFromUrl = "";
String dataBuffer = "";
// Writing information from the stream to the buffer
while ((dataBuffer = dataStreamFromUrl.readLine()) != null) {
dataFromUrl += dataBuffer;
}
/**
* Now dataFromUrl variable contains the Response received from the
* server so we can parse the response and process it accordingly.
*/
dataStreamFromUrl.close();
//System.out.println("Response: " + dataFromUrl);
return dataFromUrl;
} catch (IOException ex) {
//ex.printStackTrace();
return ex.toString();
}catch(Exception ex){
return ex.toString();
}
}
以下是我的onClicklistener按钮的调用脚本
public void onClick(View v) {
Sender s = new Sender("server", port, "username", "password", "test for unicode", "1", "0", "23481111111", "Update");
switch(v.getId()){
case R.id.btnSaveSettings:
Toast.makeText(getActivity(), s.submitMessage().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.btnBalance:
Toast.makeText(getActivity(), s.checkBalance().toString(), Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(getActivity(), "No button Captured", Toast.LENGTH_SHORT).show();
}
}
请帮助我解决我做错的事情!
Please help me out on what I am doing wrong!
@Angad我已经编辑了代码,下面是它的外观以及出现的错误.
@Angad I have edited the code and below is what it looks like and the error i am getting.
我的呼叫方式
public String checkBalance() {
try {
HttpClient client=new DefaultHttpClient();
HttpPost request=new HttpPost("http://" + this.server + ":" + this.port + "/CreditCheck/checkcredits");
BasicNameValuePair username=new BasicNameValuePair("username", this.username);
BasicNameValuePair password=new BasicNameValuePair("password", this.password);
List<NameValuePair> list=new ArrayList<NameValuePair>();
list.add(username);
list.add(password);
UrlEncodedFormEntity urlentity=new UrlEncodedFormEntity(list);
request.setEntity(urlentity);
HttpResponse response=client.execute(request);
HttpEntity entity=response.getEntity();
String tmp=EntityUtils.toString(entity);
return tmp;
}catch(Exception ex){
ex.printStackTrace();
return ex.toString();
}
}
我的Onclick动作实现方法checkBalance()
public void onClick(View v) {
Sender s = new Sender("111.211.211.111", 8080, "user",
"pass", "test for unicode", "1", "0", "234811111111", "Update");
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.btnSaveSettings:
//this.savePreferences();
Toast.makeText(getActivity(), s.submitMessage().toString(), Toast.LENGTH_SHORT).show();
break;
case R.id.btnBalance:
Toast.makeText(getActivity(), s.checkBalance().toString(), Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(getActivity(), "No button Captured", Toast.LENGTH_SHORT).show();
}
我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
异常错误Android.os.NetworkOnMainThreadException
Exception errorAndroid.os.NetworkOnMainThreadException
错误消息日志,包括StackTrace()
10-19 14:22:20.285:E/SoundPool(1273):错误加载/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:E/SoundPool(1273):错误加载/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:E/SoundPool(1273):错误加载/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:E/SoundPool(1273):错误加载/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.295:E/SoundPool(1273):错误加载/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.295:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.305:E/SoundPool(1273):错误加载/system/media/audio/ui/KeypressStandard.ogg10-19 14:22:20.305:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/KeypressStandard.ogg10-19 14:22:20.305:E/SoundPool(1273):错误加载/system/media/audio/ui/KeypressSpacebar.ogg10-19 14:22:20.315:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/KeypressSpacebar.ogg10-19 14:22:20.315:E/SoundPool(1273):错误加载/system/media/audio/ui/KeypressDelete.ogg10-19 14:22:20.315:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/KeypressDelete.ogg10-19 14:22:20.325:W/System.err(1854):android.os.NetworkOnMainThreadException10-19 14:22:20.325:E/SoundPool(1273):错误加载/system/media/audio/ui/KeypressReturn.ogg10-19 14:22:20.325:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/KeypressReturn.ogg10-19 14:22:20.325:E/SoundPool(1273):错误加载/system/media/audio/ui/KeypressInvalid.ogg10-19 14:22:20.325:W/AudioService(1273):Soundpool无法加载文件:/system/media/audio/ui/KeypressInvalid.ogg10-19 14:22:20.335:W/AudioService(1273):onLoadSoundEffects(),加载样本时出现错误-110-19 14:22:20.335:W/System.err(1854):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)10-19 14:22:20.335:W/System.err(1854):位于libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)10-19 14:22:20.335:W/System.err(1854):位于libcore.io.IoBridge.connectErrno(IoBridge.java:127)10-19 14:22:20.335:W/System.err(1854):位于libcore.io.IoBridge.connect(IoBridge.java:112)10-19 14:22:20.345:W/System.err(1854):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)10-19 14:22:20.345:W/System.err(1854):at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)10-19 14:22:20.345:W/System.err(1854):位于java.net.Socket.connect(Socket.java:843)10-19 14:22:20.345:W/System.err(1854):位于org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)10-19 14:22:20.345:W/System.err(1854):位于org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)10-19 14:22:20.355:W/System.err(1854):位于org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)10-19 14:22:20.355:W/System.err(1854):位于org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)10-19 14:22:20.355:W/System.err(1854):位于org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)10-19 14:22:20.355:W/System.err(1854):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)10-19 14:22:20.365:W/System.err(1854):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)10-19 14:22:20.365:W/System.err(1854):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)10-19 14:22:20.375:W/System.err(1854):at com.example.sleeksmsmobile.Sender.checkBalance(Sender.java:96)10-19 14:22:20.375:W/System.err(1854):在com.example.sleeksmsmobile.SettingsTab.onClick(SettingsTab.java:86)10-19 14:22:20.375:W/System.err(1854):在android.view.View.performClick(View.java:4438)10-19 14:22:20.385:W/System.err(1854):在android.view.View $ PerformClick.run(View.java:18422)10-19 14:22:20.385:W/System.err(1854):位于android.os.Handler.handleCallback(Handler.java:733)10-19 14:22:20.385:W/System.err(1854):在android.os.Handler.dispatchMessage(Handler.java:95)10-19 14:22:20.385:W/System.err(1854):在android.os.Looper.loop(Looper.java:136)10-19 14:22:20.395:W/System.err(1854):在android.app.ActivityThread.main(ActivityThread.java:5017)10-19 14:22:20.395:W/System.err(1854):at java.lang.reflect.Method.invokeNative(本机方法)10-19 14:22:20.395:W/System.err(1854):at java.lang.reflect.Method.invoke(Method.java:515)10-19 14:22:20.405:W/System.err(1854):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)10-19 14:22:20.405:W/System.err(1854):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)10-19 14:22:20.415:W/System.err(1854):在dalvik.system.NativeStart.main(本机方法)10-19 14:22:20.925:I/Choreographer(1273):跳了36帧!该应用程序可能在其主线程上做过多的工作.
10-19 14:22:20.285: E/SoundPool(1273): error loading /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: E/SoundPool(1273): error loading /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: E/SoundPool(1273): error loading /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: E/SoundPool(1273): error loading /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.285: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.295: E/SoundPool(1273): error loading /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.295: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg10-19 14:22:20.305: E/SoundPool(1273): error loading /system/media/audio/ui/KeypressStandard.ogg10-19 14:22:20.305: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/KeypressStandard.ogg10-19 14:22:20.305: E/SoundPool(1273): error loading /system/media/audio/ui/KeypressSpacebar.ogg10-19 14:22:20.315: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/KeypressSpacebar.ogg10-19 14:22:20.315: E/SoundPool(1273): error loading /system/media/audio/ui/KeypressDelete.ogg10-19 14:22:20.315: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/KeypressDelete.ogg10-19 14:22:20.325: W/System.err(1854): android.os.NetworkOnMainThreadException10-19 14:22:20.325: E/SoundPool(1273): error loading /system/media/audio/ui/KeypressReturn.ogg10-19 14:22:20.325: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/KeypressReturn.ogg10-19 14:22:20.325: E/SoundPool(1273): error loading /system/media/audio/ui/KeypressInvalid.ogg10-19 14:22:20.325: W/AudioService(1273): Soundpool could not load file: /system/media/audio/ui/KeypressInvalid.ogg10-19 14:22:20.335: W/AudioService(1273): onLoadSoundEffects(), Error -1 while loading samples10-19 14:22:20.335: W/System.err(1854): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)10-19 14:22:20.335: W/System.err(1854): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)10-19 14:22:20.335: W/System.err(1854): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)10-19 14:22:20.335: W/System.err(1854): at libcore.io.IoBridge.connect(IoBridge.java:112)10-19 14:22:20.345: W/System.err(1854): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)10-19 14:22:20.345: W/System.err(1854): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)10-19 14:22:20.345: W/System.err(1854): at java.net.Socket.connect(Socket.java:843)10-19 14:22:20.345: W/System.err(1854): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)10-19 14:22:20.345: W/System.err(1854): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)10-19 14:22:20.355: W/System.err(1854): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)10-19 14:22:20.355: W/System.err(1854): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)10-19 14:22:20.355: W/System.err(1854): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)10-19 14:22:20.355: W/System.err(1854): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)10-19 14:22:20.365: W/System.err(1854): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)10-19 14:22:20.365: W/System.err(1854): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)10-19 14:22:20.375: W/System.err(1854): at com.example.sleeksmsmobile.Sender.checkBalance(Sender.java:96)10-19 14:22:20.375: W/System.err(1854): at com.example.sleeksmsmobile.SettingsTab.onClick(SettingsTab.java:86)10-19 14:22:20.375: W/System.err(1854): at android.view.View.performClick(View.java:4438)10-19 14:22:20.385: W/System.err(1854): at android.view.View$PerformClick.run(View.java:18422)10-19 14:22:20.385: W/System.err(1854): at android.os.Handler.handleCallback(Handler.java:733)10-19 14:22:20.385: W/System.err(1854): at android.os.Handler.dispatchMessage(Handler.java:95)10-19 14:22:20.385: W/System.err(1854): at android.os.Looper.loop(Looper.java:136)10-19 14:22:20.395: W/System.err(1854): at android.app.ActivityThread.main(ActivityThread.java:5017)10-19 14:22:20.395: W/System.err(1854): at java.lang.reflect.Method.invokeNative(Native Method)10-19 14:22:20.395: W/System.err(1854): at java.lang.reflect.Method.invoke(Method.java:515)10-19 14:22:20.405: W/System.err(1854): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)10-19 14:22:20.405: W/System.err(1854): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)10-19 14:22:20.415: W/System.err(1854): at dalvik.system.NativeStart.main(Native Method)10-19 14:22:20.925: I/Choreographer(1273): Skipped 36 frames! The application may be doing too much work on its main thread.
推荐答案
宁可使用httpconnection,也建议您使用httpclient像
rather using httpconnection i would suggest you to use httpclientlike
try
{
HttpClient client=new DefaultHttpClient();
HttpPost request=new HttpPost("your url");
BasicNameValuePair email=new BasicNameValuePair("username", "your username");
BasicNameValuePair password=new BasicNameValuePair("password", "your password");
List<NameValuePair> list=new ArrayList<NameValuePair>();
list.add(username);
list.add(password);
UrlEncodedFormEntity urlentity=new UrlEncodedFormEntity(list);
request.setEntity(urlentity);
HttpResponse response=client.execute(request);
HttpEntity entity=response.getEntity();
String tmp=EntityUtils.toString(entity);
return tmp;
}
catch(Exception e)
{
return e.toString();
}
以此尝试您的代码...并告诉我...我一定会工作...而且它也非常简单...所有与流和所有对象的网格化..希望这会有所帮助...; -)
try yourcode with this...and tell me ...i'll surelly work...and its also quite simple...there its all meshup with stream and all.. hope this will help... ;-)
这篇关于我正在尝试通过android建立http连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!