Android 错误:IllegalArgumentException:无法为2创建调用适配器。响应
我通过本教程()创建了一个AcceleratorRESTAPI,只是为了在端点()处查看本地主机服务器上的数据值。但我面临一个错误“无法为2.Response创建调用适配器” 然而,在使用教程改型(<2.0)时,我使用的是RetroFit2.0(2.1)。因此,根据更新的库所做的更改很少 这是我下面的Accelerometer.javaAndroid 错误:IllegalArgumentException:无法为2创建调用适配器。响应,android,retrofit2,android-sensors,restful-architecture,Android,Retrofit2,Android Sensors,Restful Architecture,我通过本教程()创建了一个AcceleratorRESTAPI,只是为了在端点()处查看本地主机服务器上的数据值。但我面临一个错误“无法为2.Response创建调用适配器” 然而,在使用教程改型(
package accelerometer.sensor.com.acceleration;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Date;
import accelerometer.sensor.com.acceleration.model.Acceleration;
import retrofit2.Retrofit;
public class AccelerometerAct extends AppCompatActivity implements SensorEventListener{
private String restURL;
private TextView acceleration;
private Button myStartButton;
private Button myStopButton;
private AccelerometerAPI accelerometerAPI;
private SensorManager sm;
private Sensor accelerometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accelerometer_activity);
acceleration = (TextView) findViewById(R.id.acc);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
initRestApi();
initActionButtons();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onSensorChanged(SensorEvent event) {
Acceleration capturedAcceleration = getAccelerationFromSensor(event);
updateTextView(capturedAcceleration);
new SendAccelerationAsyncTask().execute(capturedAcceleration);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//Do nothing
}
private void initRestApi() {
Bundle extras = getIntent().getExtras();
if (extras != null) {
restURL = extras.getString(MainActivity.URL);
}
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(restURL)
.build();
accelerometerAPI = restAdapter.create(AccelerometerAPI.class);
}
private void initActionButtons() {
myStartButton = (Button) findViewById(R.id.start);
myStopButton = (Button) findViewById(R.id.stop);
myStartButton.setVisibility(View.VISIBLE);
myStopButton.setVisibility(View.GONE);
myStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSensor();
myStartButton.setVisibility(View.GONE);
myStopButton.setVisibility(View.VISIBLE);
}
});
myStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopSensor();
myStartButton.setVisibility(View.VISIBLE);
myStopButton.setVisibility(View.GONE);
finish();
}
});
}
private void startSensor() {
sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
private void stopSensor() {
sm.unregisterListener(this);
}
private void updateTextView(Acceleration capturedAcceleration) {
acceleration.setText("X:" + capturedAcceleration.getX() +
"\nY:" + capturedAcceleration.getY() +
"\nZ:" + capturedAcceleration.getZ() +
"\nTimestamp:" + capturedAcceleration.getTimestamp());
}
private Acceleration getAccelerationFromSensor(SensorEvent event) {
long timestamp = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 1000000L;
return new Acceleration(event.values[0], event.values[1], event.values[2], timestamp);
}
private class SendAccelerationAsyncTask extends AsyncTask<Acceleration, Void, Void>{
@Override
protected Void doInBackground(Acceleration... params) {
try {
accelerometerAPI.sendAccelerationValues(params[0]);
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
package accelerometer.sensor.com.acceleration;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
public static final String URL = "restURL";
private EditText restURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
restURL = (EditText) findViewById(R.id.inUrl);
final Button myStartButton = (Button) findViewById(R.id.startAct);
myStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, AccelerometerAct.class);
intent.putExtra(URL, restURL.getText().toString());
startActivity(intent);
}
});
}
}
package accelerometer.sensor.com.acceleration;
import accelerometer.sensor.com.acceleration.model.Acceleration;
import retrofit2.Response;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface AccelerometerAPI {
@POST("/acceleration")
Response<Acceleration> sendAccelerationValues(@Body Acceleration acceleration);
}
还有我的加速.java模型
package accelerometer.sensor.com.acceleration.model;
public class Acceleration {
private long timestamp;
private double x;
private double y;
private double z;
public Acceleration(float x_value, float y_value, float z_value, long timestamp) {
x= new Double(""+x_value);
y= new Double(""+y_value);
z= new Double(""+z_value);
this.timestamp = timestamp;
}
public long getTimestamp() {
return timestamp;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public double getZ() {
return z;
}
}
这是我的接口Accelerometrapi.java
package accelerometer.sensor.com.acceleration;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Date;
import accelerometer.sensor.com.acceleration.model.Acceleration;
import retrofit2.Retrofit;
public class AccelerometerAct extends AppCompatActivity implements SensorEventListener{
private String restURL;
private TextView acceleration;
private Button myStartButton;
private Button myStopButton;
private AccelerometerAPI accelerometerAPI;
private SensorManager sm;
private Sensor accelerometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accelerometer_activity);
acceleration = (TextView) findViewById(R.id.acc);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
initRestApi();
initActionButtons();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onSensorChanged(SensorEvent event) {
Acceleration capturedAcceleration = getAccelerationFromSensor(event);
updateTextView(capturedAcceleration);
new SendAccelerationAsyncTask().execute(capturedAcceleration);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//Do nothing
}
private void initRestApi() {
Bundle extras = getIntent().getExtras();
if (extras != null) {
restURL = extras.getString(MainActivity.URL);
}
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(restURL)
.build();
accelerometerAPI = restAdapter.create(AccelerometerAPI.class);
}
private void initActionButtons() {
myStartButton = (Button) findViewById(R.id.start);
myStopButton = (Button) findViewById(R.id.stop);
myStartButton.setVisibility(View.VISIBLE);
myStopButton.setVisibility(View.GONE);
myStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startSensor();
myStartButton.setVisibility(View.GONE);
myStopButton.setVisibility(View.VISIBLE);
}
});
myStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopSensor();
myStartButton.setVisibility(View.VISIBLE);
myStopButton.setVisibility(View.GONE);
finish();
}
});
}
private void startSensor() {
sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
private void stopSensor() {
sm.unregisterListener(this);
}
private void updateTextView(Acceleration capturedAcceleration) {
acceleration.setText("X:" + capturedAcceleration.getX() +
"\nY:" + capturedAcceleration.getY() +
"\nZ:" + capturedAcceleration.getZ() +
"\nTimestamp:" + capturedAcceleration.getTimestamp());
}
private Acceleration getAccelerationFromSensor(SensorEvent event) {
long timestamp = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 1000000L;
return new Acceleration(event.values[0], event.values[1], event.values[2], timestamp);
}
private class SendAccelerationAsyncTask extends AsyncTask<Acceleration, Void, Void>{
@Override
protected Void doInBackground(Acceleration... params) {
try {
accelerometerAPI.sendAccelerationValues(params[0]);
} catch(Exception e) {
e.printStackTrace();
}
return null;
}
}
package accelerometer.sensor.com.acceleration;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
public static final String URL = "restURL";
private EditText restURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
restURL = (EditText) findViewById(R.id.inUrl);
final Button myStartButton = (Button) findViewById(R.id.startAct);
myStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, AccelerometerAct.class);
intent.putExtra(URL, restURL.getText().toString());
startActivity(intent);
}
});
}
}
package accelerometer.sensor.com.acceleration;
import accelerometer.sensor.com.acceleration.model.Acceleration;
import retrofit2.Response;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface AccelerometerAPI {
@POST("/acceleration")
Response<Acceleration> sendAccelerationValues(@Body Acceleration acceleration);
}
package accelerator.sensor.com.acceleration;
导入accelerator.sensor.com.acceleration.model.acceleration;
2.回应;;
导入文件2.http.Body;
导入文件2.http.POST;
公共接口加速器{
@后(“/加速”)
响应发送加速度值(@车身加速度);
}
这是显示错误的日志猫
**01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration
W/System.err: java.lang.IllegalArgumentException: Unable to create call adapter for retrofit2.Response<accelerometer.sensor.com.acceleration.model.Acceleration>**
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: for method AccelerometerAPI.sendAccelerationValues
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:234)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:160)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:166)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at retrofit2.Retrofit$1.invoke(Retrofit.java:145)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:393)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at $Proxy0.sendAccelerationValues(Unknown Source)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at **accelerometer.sensor.com.acceleration.AccelerometerAct$SendAccelerationAsyncTask.doInBackground(AccelerometerAct.java:134)**
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at **accelerometer.sensor.com.acceleration.AccelerometerAct$SendAccelerationAsyncTask.doInBackground(AccelerometerAct.java:129)**
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-24 09:25:48.439 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-24 09:25:48.441 1968-2023/accelerometer.sensor.com.acceleration W/System.err: at java.lang.Thread.run(Thread.java:818)
**01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration
W/System.err:java.lang.IllegalArgumentException:无法为2.Response创建调用适配器**
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:用于方法Accelerometerrapi.send加速度值
01-24 09:25:48.439 1968-2023/Accelerator.sensor.com.acceleration W/System.err:at-Reformation 2.ServiceMethod$Builder.methodError(ServiceMethod.java:720)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at reformation2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:234)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at reformation2.ServiceMethod$Builder.build(ServiceMethod.java:160)
01-24 09:25:48.439 1968-2023/Accelerator.sensor.com.acceleration W/System.err:at-Reformation 2.Reformation.loadServiceMethod(Reformation.java:166)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at-reformation 2.reformation$1.invoke(reformation.java:145)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at java.lang.reflect.Proxy.invoke(Proxy.java:393)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at$Proxy0.sendAccelerationValue(未知来源)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at**accelerator.sensor.com.acceleration.accelerometer$sendAccelerationSyncTask.doInBackground(accelerometer ract.java:134)**
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at**accelerator.sensor.com.acceleration.accelerometer$sendAccelerationSyncTask.doInBackground(accelerometer ract.java:129)**
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at-android.os.AsyncTask$2.call(AsyncTask.java:295)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at-android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-24 09:25:48.439 1968-2023/accelerator.sensor.com.acceleration W/System.err:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-24 09:25:48.441 1968-2023/accelerator.sensor.com.acceleration W/System.err:at java.lang.Thread.run(Thread.java:818)
我想,这可能会对你有所帮助
简短回答:在Accelerometrapi
界面中返回Call
public interface AccelerometerAPI {
@POST("/acceleration")
Call<Acceleration> sendAccelerationValues(@Body Acceleration acceleration);
}
然后像这样建造改装:
Retrofit rest = new Retrofit.Builder()
.baseUrl(endpoint)
.addConverterFactory(GsonConverterFactory.create())
.build();
我想,我可以帮你
简短回答:在Accelerometrapi
界面中返回Call
public interface AccelerometerAPI {
@POST("/acceleration")
Call<Acceleration> sendAccelerationValues(@Body Acceleration acceleration);
}
然后像这样建造改装:
Retrofit rest = new Retrofit.Builder()
.baseUrl(endpoint)
.addConverterFactory(GsonConverterFactory.create())
.build();
如果您正在使用Kotlin,请查看以下内容:-
在API服务类的函数声明中添加了“suspend”
您的数据类(或模型)设置正确
如果您正在使用Kotlin,请查看以下内容:-
在API服务类的函数声明中添加了“suspend”
您的数据类(或模型)设置正确
我已经尝试过了,得到了一个不同的错误:无法为类加速计创建转换器。sensor.com.acceleration.model.acceleration
@User9382982编辑了我的答案,请尝试新的一个,我已完全删除Asynctask实现,并替换为一个包含capturedacceleration数据的构造函数的类,该类包含“Call Call=Accelerometrapi.sendAccelerationValues(acc)”;call.enqueue(新回调()blabla bla.`我正在执行失败,当我在失败中看到使用Log.d捕获的数据时,它显示了正确的结果。但是为什么onResponse没有执行?我丢失了什么?你能修复它吗?我面临着同样的问题,我不想使用CallI我已经尝试过了,得到了不同的错误illegargumentException:Unable要为类Accelerator.sensor.com.acceleration.model.acceleration创建转换器
@User9382982编辑了我的答案,请尝试新答案我已完全删除Asynctask实现,并替换为包含capturedacceleration数据的构造函数的类,该类包含此'Call Call=AccelerometerRapi.sendAccelerationVvalues(acc);call.enqueue(new Callback()blabla bla..`我正在执行失败,当我在失败时看到使用Log.d捕获的数据时,它显示了正确的结果。但是为什么onResponse没有执行?我丢失了什么?你能修复它吗?我面临着同样的问题,我不想使用call