【问题标题】:Retrofit2 Throwablecom.google.gsonJsonSyntax expected begin_object but was string at line 2 column 1 path $Retrofit2 Throwablecom.google.gsonJsonSyntax 预期 begin_object 但在第 2 行第 1 列路径 $
【发布时间】:2017-08-21 13:28:52
【问题描述】:

这是我目前工作的基础项目。 android 应用程序运行正常并将数据发送到数据库,但是抛出了错误异常。 图片A screenshot of my phone's screen

主要活动

package com.mytrendin.retrofitsenddata;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;

import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {


    EditText name,email, password;
    Button save;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name= (EditText) findViewById(R.id.name);
        email= (EditText) findViewById(R.id.email);
        password= (EditText) findViewById(R.id.password);
        save = (Button) findViewById(R.id.save);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OkHttpClient client = new OkHttpClient();
                Gson gson = new GsonBuilder()
                        .setLenient()
                        .create();

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("http://192.168.1.4")
                        .client(client)
                        .addConverterFactory(GsonConverterFactory.create(gson))
                        .build();


                ApiService service = retrofit.create(ApiService.class);
                Student student = new Student();
                student.setName(name.getText().toString());
                student.setEmail(email.getText().toString());
                student.setPassword(email.getText().toString());
                Call<Student> call = service.insertData(student.getName(),student.getEmail(),student.getPassword());

                call.enqueue(new Callback<Student>() {
                    @Override
                    public void onResponse(Call<Student> call, Response<Student> response) {

                        Toast.makeText(MainActivity.this, "response"+response, Toast.LENGTH_LONG).show();

                        name.setText("");
                        email.setText("");
                        password.setText("");

                    }

                    @Override
                    public void onFailure(Call<Student> call, Throwable t) {


                        Log.i("Hello",""+t);
                        Toast.makeText(MainActivity.this, "Throwable"+t, Toast.LENGTH_LONG).show();

                    }


                });
            }
        });

    }
}

api服务类:

public interface ApiService {

    @FormUrlEncoded
    @POST("/test/index.php")
    Call<Student> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
}

学生班级::

public class Student {

    String name, email, password;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

和 PHP 服务器端脚本。

$username = $_POST['name'];
$useremail = $_POST['email'];
$userpassword = $_POST['password'];
$user = "root";
$pass = "admin@00100";
$host= "localhost";
$dbname="test";

$con = mysqli_connect($host,$user,$pass,$dbname);
$sql="insert into userdata(name,email,password) values('".$username."','".$useremail."','".$userpassword."');";
if(mysqli_query($con,$sql)){
        echo  "data inserted";

}else{  
        echo "Failed";
}
?>

我发现的其他解决方案无法解决当前的问题。我哪里出错了?

【问题讨论】:

    标签: php android mysqli retrofit2 gson


    【解决方案1】:

    问题实际上是在插入后你得到了String的响应,但你将它分配给Class Student

    所以替换

    Call<Student> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
    

    Call<String> insertData(@Field("name") String name, @Field("email") String email , @Field("password") String password);
    

    【讨论】:

    • 当我进行更正时,IDE 上出现“错误:(55, 56) 错误:不兼容的类型:Call 无法转换为 Call”消息。
    • 调用 api 时将 更改为
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2017-05-12
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多