2017-08-21 7 views
0

Ceci est le projet de base pour mon entreprise actuelle. L'application android s'exécute bien et envoie des données à la base de données, cependant, une exception d'erreur est levée. L'image A screenshot of my phone's screen

L'activité principale

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(); 

        } 


       }); 
      } 
     }); 

    } 
} 

La classe de service api:

public interface ApiService { 

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

La classe étudiante ::

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; 
    } 
} 

et le script côté serveur PHP.

$username = $_POST['name']; 
$useremail = $_POST['email']; 
$userpassword = $_POST['password']; 
$user = "root"; 
$pass = "[email protected]"; 
$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"; 
} 
?> 

Les autres solutions que j'ai trouvées ne fonctionnent pas pour le problème à portée de main. Où pourrais-je me tromper?

Répondre

0

Le problème est en fait après l'insertion de votre réponse obtiennent en tant que String mais vous êtes assignant à Class Student

donc Remplacer

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

avec

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

Je suis gettin un " Erreur: (55, 56) erreur: types incompatibles: Appel ne peut pas être converti en appel "message sur l'IDE lorsque je fais cela correction. – Gatibaru

+0

Modifier à quand vous appelez api – Anil

+0

Pouvez-vous poster votre code – Anil