2017-01-09 9 views
-2

Я внедряю Retrofit с использованием тонкой рамки, но она не работает.Невозможно реализовать Дооснащение с использованием Slim framework

Когда я тестирую свой веб-api (PHP-тонкий код), используя postman в chrome, тогда он отлично работает, и на стороне Android данные проходят через URL-адрес, и я также вижу это в logcat. Вот мой код.

<?php 
$app->post('/directorder',function($request) { 

    require_once('dbconnect.php'); 

    $query = "INSERT INTO direct_order (d_name,d_contact,d_address) values (?,?,?)"; 
    $stmt = $mysqli->prepare($query); 
    $stmt->bind_param("sss",$a,$b,$c); 


     $a = $request->getParsedBody()['d_name']; 
     $b = $request->getParsedBody()['d_contact']; 
     $c = $request->getParsedBody()['d_address']; 

    if ($stmt->execute()) { 
      echo json_encode("success"); 
     } else { 
      echo json_encode("fail"); 
     } 
}); 

?> 

Вот мой Android Side КОДЕКСА

АКТИВНОСТЬ

public class DirectOrderActivity extends AppCompatActivity { 

    EditText name,contact,address; 
    Button buttonUpload; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_direct_order); 

     name = (EditText) findViewById(R.id.input_name); 
     address = (EditText) findViewById(R.id.input_address); 
     contact = (EditText) findViewById(R.id.input_contact); 
     buttonUpload = (Button) findViewById(R.id.btn_directorder); 

     buttonUpload.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String ename=name.getText().toString(); 
       String eaddress=address.getText().toString(); 
       String econtact=contact.getText().toString(); 

       RestAdapter adapterCity = new RestAdapter.Builder() 
         .setEndpoint(Base.Base_Url) 
         .setLogLevel(RestAdapter.LogLevel.FULL) 
         .build(); 

       UserInterface services = adapterCity.create(UserInterface.class); 
       services.directorder(ename , econtact,eaddress , new Callback<String>() { 
        @Override 
        public void success(String s, Response response) { 
         Toast.makeText(getApplicationContext(), "Order Successfully", Toast.LENGTH_LONG).show(); 
         Intent intent = new Intent(getApplicationContext() , MainActivity.class); 
         startActivity(intent); 
        } 

        @Override 
        public void failure(RetrofitError error) { 

        } 
       }); 



      } 
     }); 

    } 
} 

XML файл

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.anthesis.benchmarkayurveda.NewVisitActivity"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="24dp" 
     android:paddingRight="24dp"> 



     <!-- Email Label --> 
     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="8dp" 
      android:layout_marginBottom="8dp"> 
      <EditText android:id="@+id/input_name" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:inputType="text" 
       android:hint="Name of Docotr/Medical Shop" /> 
     </android.support.design.widget.TextInputLayout> 


     <!-- Email Label --> 
     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="8dp" 
      android:layout_marginBottom="8dp"> 
      <EditText android:id="@+id/input_address" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:inputType="text" 
       android:hint="Address" /> 
     </android.support.design.widget.TextInputLayout> 

     <!-- Email Label --> 
     <android.support.design.widget.TextInputLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="8dp" 
      android:layout_marginBottom="8dp"> 
      <EditText android:id="@+id/input_contact" 
       android:layout_below="@+id/input_address" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:inputType="phone" 
       android:hint="Contact" 
       android:lines="1"/> 
     </android.support.design.widget.TextInputLayout> 


      <android.support.v7.widget.AppCompatButton 
       android:id="@+id/btn_directorder" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="24dp" 
       android:layout_marginBottom="24dp" 
       android:layout_marginLeft="20dp" 
       android:padding="12dp" 
       android:background="@color/colorPrimary" 
       android:text="Save and Place Order"/> 



    </LinearLayout> 
</RelativeLayout> 

ИНТЕРФЕЙС

public interface UserInterface { 

    @POST("/directorder") 
    public void directorder(@Query("d_name") String ename, @Query("d_contact") String eaddress, @Query("d_address") String econtact, retrofit.Callback<String> response); 


} 

Помогите мне, ребята..пожалуйста,

+0

Модернизация не имеет методов «успеха» и «неудачи». Пожалуйста, ознакомьтесь с учебными пособиями по модернизации, чтобы понять, как их использовать. – akash93

+0

это модификация 1.9.0 bro .. У этого есть методы успеха и неудачи и мой код андроида работает нормально .. просто я не могу подключить свой тонкий код к андроиду –

+0

Вы должны включить это в свой вопрос. 1.9 больше, чем 1,5 года. В любом случае вы проверили, вызван ли «отказ» и зарегистрирована ошибка? – akash93

ответ

0

Вы должны отправить правильный код состояния HTTP для отказа. Это делается в Slim, возвращая $ response от вашего маршрута, который можно вызывать.

т.е. код должен должен выглядеть следующим образом:

$app->post('/directorder',function($request) { 

    require_once('dbconnect.php'); 

    $query = "INSERT INTO direct_order (d_name,d_contact,d_address) values (?,?,?)"; 
    $stmt = $mysqli->prepare($query); 

    $a = $request->getParsedBody()['d_name']; 
    $b = $request->getParsedBody()['d_contact']; 
    $c = $request->getParsedBody()['d_address']; 
    $stmt->bind_param("sss",$a,$b,$c); 


    if ($stmt->execute()) { 
     $statusCode = 200; 
     $output['result'] = 'success'; 
    } else { 
     $statusCode = 500; 
     $output['result'] = 'fail'; 
    } 

    return $response->withJson($output, $statusCode); 
}); 

Заметьте, что вы можете позволить Слим закодировать JSON и установить правильный заголовок Content-Type для вас, если вы используете withJson, что делает жизнь немного Полегче.

+0

Большое вам спасибо –

+0

Добро пожаловать. Не стесняйтесь отмечать этот ответ как принято :) –