Сообщение о модернизации не может успешно отправить данные JSON на сервер Django - PullRequest
0 голосов
/ 27 июня 2019

Каждый, кто недавно разрабатывал сервер-клиентскую систему, на стороне сервера я использую django и restframework для взаимодействия с приложениями для Android. На стороне клиента я использую android и модернизацию для отправки и получения данных с сервера. Когда я получаю данные с сервера, все в порядке, но когда я пытаюсь отправить данные с android на django, возникают некоторые ошибки. В частности, он успешно отправляет данные на сервер, но не отображается в представлениях Django.

Сначала я использую почтальон, чтобы проверить, могу ли я публиковать данные на URL http://192.168.*.**:8001/api/output, и это работает, но когда я использую приложение для Android для отправки данных на http://192.168.*.**:8001/api/output, оно также может успешно публиковать

Вот мой код сервера django

class OutputInfoView(ModelViewSet):
    serializer_class = OutPutInfoSerializer

    def get_queryset(self):
        return models.OutputInfo.objects.all()

class OutPutInfoSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.OutputInfo
        fields = ['id', 'user', 'lx', 'ly', 'room', 'activity', 'sound']

# router url
routers = routers.DefaultRouter()
routers.register(r'output', views.OutputInfoView,basename='OutputInfo')

urlpatterns = [
    path('', include(routers.urls))
    # path('output', views.OutputInfoView.as_view(), name='output'),
]

В моем клиенте для Android я модифицировал пользователя для публикации данных:

public interface JsonPlaceHolderAPI {

    @Headers({"Content-Type: application/json"})
    @POST("output")
    Call<List<Sender>> createUser(@Body RequestBody body);
}

Это основной вид деятельности loading

        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://192.168.*.**:8001/api/")  // restapi的BASE地址
                .addConverterFactory(GsonConverterFactory.create())   // 添加jsonparse
                .client(okHttpClient)
                .build();

        jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderAPI.class);

        createSend();

// send post json data to server
private void createSend(){

        Sender send = new Sender("2","35","43","sdf","gredf","4dfe");
        Gson gson = new Gson();

        String route = gson.toJson(send);
        Log.d("TAG", route);
        RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),route);
        Call<List<Sender>> call = jsonPlaceHolderApi.createUser(body);

        call.enqueue(new Callback<List<Sender>>() {
            @Override
            public void onResponse(Call<List<Sender>> call, Response<List<Sender>> response) {
                if (response.isSuccessful()){
                    showText.setText("successfuly send");

                }else{
                    showText.setText("Code: " + response.code());
                    return;
                }
            }

            @Override
            public void onFailure(Call<List<Sender>> call, Throwable t) {
                showText.setText(t.getMessage());
            }
        });
    }

После того, как я разверну все эти шаги, я сначала использую почтальон, чтобы проверить, могу ли я публиковать данные на URL http://192.168.*.**:8001/api/output, и он работает, но когда я использую приложение Android для отправки данных поста на http://192.168.*.**:8001/api/output, он также может публиковать успешно следующим образом:

D/OkHttp: --> POST http://192.168.0.11:8001/api/output
D/OkHttp: Content-Type: application/json
    Content-Length: 79
    {"activity":"gredf","lx":"35","ly":"43","room":"sdf","sound":"4dfe","user":"2"}
    --> END POST (79-byte body)
D/OkHttp: <-- 200 OK http://192.168.0.11:8001/api/output/ (94ms)
    Date: Thu, 27 Jun 2019 02:30:55 GMT
    Server: WSGIServer/0.2 CPython/3.7.1
    Content-Type: application/json
    Vary: Accept, Cookie
    Allow: GET, POST, HEAD, OPTIONS
    X-Frame-Options: SAMEORIGIN
    Content-Length: 371
D/OkHttp: [{"id":1,"user":1,"lx":"25","ly":"35","room":"classroom","activity":"walk","sound":"speak"},{"id":2,"user":2,"lx":"12","ly":"79","room":"restroom","activity":"stand","sound":"silence"},{"id":3,"user":1,"lx":"22","ly":"19","room":"restroom","activity":"stand","sound":"silence"},{"id":4,"user":1,"lx":"22","ly":"19","room":"restroom","activity":"stand","sound":"silence"}]
    <-- END HTTP (371-byte body)

Apparenetly, данные не отправляются на сервер успешно, мне интересно, где я был не прав, я думаю, что сделал все, что мог ..

android Отправить данные поста на django

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...