stackoverflow用户好,
我正在尝试编写一个post请求(发送SMS),该请求在单击按钮时被调用。post请求具有:
一个URL参数: api_key
一个标题:"Content-Type“= "application/x-www-form-urlencoded”
三对JSON:("from","insert#here"),("to","insert#here"),("body","Hello,World")
通过将POST请求发送到REST API端点URL,我希望在用户单击按钮时发送SMS。这就是我所拥有的:
public class PostSMS extends AsyncTask<Void, String, String>
{
@Override
protected String doInBackground(Void... params) {
try {
MainActivity.text.setText("enteredTry");
URL url = new URL("https://api.apidaze.io/apikey/sms/send?api_secret=apisecret");
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
MainActivity.text.setText("connectionBuilt");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.setRequestMethod("POST");
MainActivity.text.setText("connectionEstablished1");
urlConnection.connect();
MainActivity.text.setText("connectionEstablished23");
// Create JSONObject Request
JSONObject jsonRequest = new JSONObject();
jsonRequest.put("from", "1111111111");
jsonRequest.put("to", "1111111112");
jsonRequest.put("body", "Hello, World");
MainActivity.text.setText("jsonArrayConstructed");
// Write Request to output stream to server
OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
out.write(jsonRequest.toString());
out.close();
MainActivity.text.setText("OutputStream written");
int statusCode = urlConnection.getResponseCode();
String statusMsg = urlConnection.getResponseMessage();
// Connection success. Proceed to fetch the response.
if (statusCode == 200)
{
InputStream it = new BufferedInputStream(urlConnection.getInputStream());
InputStreamReader read = new InputStreamReader(it);
BufferedReader buff = new BufferedReader(read);
StringBuilder dta = new StringBuilder();
String chunks;
while ((chunks = buff.readLine()) != null)
{
dta.append(chunks);
}
String returndata = dta.toString();
return returndata;
}
catch (ProtocolException e)
{
e.printStackTrace();
} catch (MalformedURLException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
在OnClickListener中运行这段代码时,我的TextView对象(代码中的文本)在模拟器中只显示"connectionEstablished1“,因此它不会运行程序的其余部分。
之后
urlConnection.setRequestMethod("POST");
MainActivity.text.setText("connectionEstablished1");
正在运行,
程序不再运行。没有编译时错误。
我有
<uses-permission android:name="android.permission.INTERNET" />
权限也是如此。
谢谢!
发布于 2018-09-30 03:24:07
我检查了你的代码,如果你移除MainActivity.text.setText(),它就可以工作了。
正如Mike M.指出的,您不应该使用MainActivity.text.setText()来跟踪进度,您应该使用Logging来跟踪进度。如果您想向用户显示进度,您应该使用onProgressUpdate(String...值)和可以在AsyncTask中覆盖的onPostExecute(字符串)。
此外,一旦你更熟悉Android studio界面,你也可以尝试debug your app,这比从catch块检查日志和StackTraces要容易得多。
https://stackoverflow.com/questions/52571199
复制相似问题