Java 无法将消息发送到行通知(使用HttpsURLConnection POST)
我是Android开发的新手,我正在尝试使用“身份验证方法->发布”()向在线通知服务发送消息 这是我的密码,我总是 退货状态代码:-1 。请帮我找出问题出在哪里 LINENotify.java 活动\u main.xmlJava 无法将消息发送到行通知(使用HttpsURLConnection POST),java,android,http-post,httpurlconnection,httpsurlconnection,Java,Android,Http Post,Httpurlconnection,Httpsurlconnection,我是Android开发的新手,我正在尝试使用“身份验证方法->发布”()向在线通知服务发送消息 这是我的密码,我总是 退货状态代码:-1 。请帮我找出问题出在哪里 LINENotify.java 活动\u main.xml 我知道答案了!!感谢谷歌和发布他们的经验和笔记的人 我的失败是 为了避免创建无响应的UI,请不要在UI线程上执行网络操作。默认情况下,Android 3.0(API级别11)及更高版本要求您在主UI线程以外的线程上执行网络操作 因此,我尝试使用AsyncTask来解决这个问
我知道答案了!!感谢谷歌和发布他们的经验和笔记的人 我的失败是
为了避免创建无响应的UI,请不要在UI线程上执行网络操作。默认情况下,Android 3.0(API级别11)及更高版本要求您在主UI线程以外的线程上执行网络操作
因此,我尝试使用AsyncTask来解决这个问题。
MainActivity.java
package com.example.test3;
导入androidx.appcompat.app.appcompat活动;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.URL;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
编辑文本消息;
按钮发送;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msg=(EditText)findViewById(R.id.EditText);
send=(按钮)findviewbyd(R.id.Button);
send.setOnClickListener(this);
}//一次创建
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id按钮:{
newlinenotify().execute(msg.getText().toString());
打破
}
}
}
公共类LINENotify扩展异步任务{
私有静态最终字符串强度点=”https://notify-api.line.me/api/notify";
私有静态最终字符串tokenKEY=“ldo3dtiajt5opjwbezaqtnxhq23pocxceavkotwjhn”;
字符串结果=”;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串背景(字符串…字符串){
字符串消息=字符串[0];
试一试{
URL=新URL(增强点);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.addRequestProperty(“授权”、“承载人”+令牌密钥);
connection.addRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
连接。设置连接超时(15*1000);
connection.setDoOutput(真);
connection.setUseCaches(false);
connection.setReadTimeout(15*1000);
connection.setDoInput(true);
OutputStream os=connection.getOutputStream();
OutputStreamWriter writer=新的OutputStreamWriter(操作系统,“UTF-8”);
writer.write(“message=”+message);
writer.flush();
writer.close();
os.close();
connection.connect();
结果=connection.getResponseMessage();
连接断开();
}捕获(IOException错误){
//处理输入和输出错误
}
返回结果;
}
@凌驾
受保护的void onProgressUpdate(整型…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
}
}
}
一些参考链接:
package com.example.test3;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class LINENotify {
private static final String strEndpoint = "https://notify-api.line.me/api/notify";
private static final String tokenKEY = "ldO3dTIAjT5OpjWbeZAQtnXhq23poCXcEAvKoTwJHhn";
public int sendMSG( String message ) {
int statusCode;
statusCode = -1;
try {
URL url = new URL( strEndpoint );
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod( "POST" );
connection.addRequestProperty("Authorization", "Bearer " + tokenKEY);
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setConnectTimeout(15*1000);
connection.setDoOutput( true );
connection.setUseCaches( false );
connection.connect();
connection.setReadTimeout(15*1000);
connection.setDoInput( true );
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( os, "UTF-8") );
writer.write( "message=" + message );
writer.flush();
writer.close();
os.close();
statusCode = connection.getResponseCode();
if ( statusCode == 200 ) {
//
} else {
throw new Exception( "Error:(StatusCode)" + statusCode + ", " + connection.getResponseMessage() );
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return statusCode;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Name" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test3">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
package com.example.test3;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText msg;
Button send;
LINENotify lineNotify;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msg = (EditText) findViewById(R.id.editText);
send = (Button) findViewById(R.id.button);
lineNotify = new LINENotify();
send.setOnClickListener(this);
}// onCreate
@Override
public void onClick(View v) {
switch( v.getId() ) {
case R.id.button: {
int statusCode = lineNotify.sendMSG( msg.getText().toString() );
Toast.makeText(this, "Return status code: " + statusCode, Toast.LENGTH_LONG).show();
break;
}
}
}
}
package com.example.test3;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
EditText msg;
Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msg = (EditText) findViewById(R.id.editText);
send = (Button) findViewById(R.id.button);
send.setOnClickListener(this);
}// onCreate
@Override
public void onClick(View v) {
switch( v.getId() ) {
case R.id.button: {
new LINENotify().execute(msg.getText().toString());
break;
}
}
}
public class LINENotify extends AsyncTask<String, Integer, String> {
private static final String strEndpoint = "https://notify-api.line.me/api/notify";
private static final String tokenKEY = "ldO3dTIAjT5OpjWbeZAQtnXhq23poCXcEAvKoTwJHhn";
String result = "";
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... strings) {
String message = strings[0];
try {
URL url = new URL( strEndpoint );
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod( "POST" );
connection.addRequestProperty("Authorization", "Bearer " + tokenKEY);
connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setConnectTimeout(15*1000);
connection.setDoOutput( true );
connection.setUseCaches( false );
connection.setReadTimeout(15*1000);
connection.setDoInput( true );
OutputStream os = connection.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
writer.write( "message=" + message );
writer.flush();
writer.close();
os.close();
connection.connect();
result = connection.getResponseMessage();
connection.disconnect();
} catch (IOException error) {
// Handles input and output errors
}
return result;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
}