質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

919閲覧

[django] androidから送信した情報をdjango側のデータベースに保存したいです。

bakara1332

総合スコア13

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/20 05:40

編集2018/07/21 12:07

現在、django標準DBであるsqliteを使ったレビューアプリのようなもの(amazonのレビューなどを想像していただけるといいかと思います)を作成しようと奮闘しております。GETリクエストによる、DBからのデータ取得はできたのですが、POSTリクエストによるDBへのデータの追加が難航している状況です。

具体的には、android端末からフィールドの情報をJSON形式で送信し、データベースに保存するという流れを想像しております。

LAN内で動くことを目標にしています。

POSTリクエスト自体は送っているのですが、django側で "POST /api/comment/ HTTP/1.1" 400 177 というエラーが出ます。

android側、django側双方でやらなければいけないことなど教えていただけると助かります。
よろしくお願いします。

<django> model.py ```python class Facility(models.Model): name = models.CharField(u'施設名', max_length=255)
def __str__(self): return self.name

class Comment(models.Model):
nickname = models.CharField(u'ニックネーム', max_length=50)
txt = models.TextField(u'コメント')
level = models.IntegerField(u'評価値')
facility = models.ForeignKey(Facility, verbose_name=u'施設名', on_delete=models.CASCADE)

def __str__(self): return self.nickname
view.py ```python class FacilityViewSet(viewsets.ModelViewSet): queryset = Facility.objects.all() serializer_class = FacilitySerializer class CommentViewSet(viewsets.ModelViewSet): queryset = Comment.objects.all() serializer_class = EntrySerializer

serializer.py

python

1class FacilitySerializer(serializers.ModelSerializer): 2 class Meta: 3 model = Facility 4 fields = '__all__' 5 6 7class EntrySerializer(serializers.ModelSerializer): 8 class Meta: 9 model = Comment 10 fields = ('nickname', 'txt', 'level', 'facility')
<android> MainActivity.java ```java public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button3); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Gson gson = new Gson(); TextView nickname = findViewById(R.id.editText4); SpannableStringBuilder sp = (SpannableStringBuilder)nickname.getText(); TextView txt = findViewById(R.id.editText5); SpannableStringBuilder sp2 = (SpannableStringBuilder)txt.getText(); TextView level = findViewById(R.id.editText6); SpannableStringBuilder sp3 = (SpannableStringBuilder)level.getText(); TextView facility = findViewById(R.id.editText9); //SpannableStringBuilder sp4 = (SpannableStringBuilder)facility.getText(); Comments comments = new Comments(sp.toString(), sp2.toString(), Integer.parseInt(String.valueOf(sp3)), 1); comments.facility = 1; String str = gson.toJson(comments); System.out.println(gson.toJson(comments)); PostToDjango task = new PostToDjango(); task.execute(gson.toJson(comments)); } }); }

}

Comments.java ```java public class Comments { public String nickname; public String txt; public int level; public int facility; public Comments(String nikename, String txt,int level, int facility){ this.nickname = nikename; this.txt = txt; this.level = level; this.facility = facility; } }

PostTojango.java

java

1public class PostToDjango extends AsyncTask<String, Void, String> { 2 3 @Override 4 protected String doInBackground(String... string) { 5 execute("http://XXX.XXX.XXX.XXX/api/comment/", string[0]); 6 return null; 7 } 8 9 10 public String execute(String argStrApiUrl, String jsonData) { 11 String ret = ""; 12 HttpURLConnection urlConnection = null; 13 try { 14 //ステップ1.接続URLを決める。 15 URL url = new URL(argStrApiUrl); 16 17 //ステップ2.URLへのコネクションを取得する。 18 urlConnection = (HttpURLConnection) url.openConnection(); 19 20 //ステップ3.接続設定(メソッドの決定,タイムアウト値,ヘッダー値等)を行う。 21 //接続タイムアウトを設定する。 22 urlConnection.setConnectTimeout(100000); 23 //レスポンスデータ読み取りタイムアウトを設定する。 24 urlConnection.setReadTimeout(100000); 25 //ヘッダーにUser-Agentを設定する。 26 urlConnection.setRequestProperty("User-Agent", "Android"); 27 //ヘッダーにAccept-Languageを設定する。 28 urlConnection.setRequestProperty("Accept-Language", Locale.getDefault().toString()); 29 //ヘッダーにContent-Typeを設定する 30 urlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 31 //HTTPのメソッドをPOSTに設定する。 32 urlConnection.setRequestMethod("POST"); 33 //リクエストのボディ送信を許可する 34 urlConnection.setDoOutput(true); 35 //レスポンスのボディ受信を許可する 36 urlConnection.setDoInput(true); 37 38 //ステップ4.コネクションを開く 39 urlConnection.connect(); 40 41 //ステップ5:リクエストボディの書き出しを行う。 42 OutputStream outputStream = urlConnection.getOutputStream(); 43 if (jsonData != null) { 44 //JSON形式の文字列に変換する。 45 PrintStream ps = new PrintStream(urlConnection.getOutputStream()); 46 ps.print(jsonData); 47 ps.close(); 48 } 49 outputStream.close(); 50 51 //ステップ6.レスポンスボディの読み出しを行う。 52 int responseCode = urlConnection.getResponseCode(); 53 54 } catch (IOException e) { 55 e.printStackTrace(); 56 } finally { 57 if (urlConnection != null) { 58 //7.コネクションを閉じる。 59 urlConnection.disconnect(); 60 } 61 } 62 return ret; 63 } 64 65 public String convertToString(InputStream stream) throws IOException { 66 StringBuffer sb = new StringBuffer(); 67 String line = ""; 68 BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8")); 69 while ((line = br.readLine()) != null) { 70 sb.append(line); 71 } 72 try { 73 stream.close(); 74 } catch (Exception e) { 75 e.printStackTrace(); 76 } 77 return sb.toString(); 78 } 79 80} 81

まだ理解に乏しいので、解決に必要な情報をお見せできていないかもしれません。その場合はすぐに追加させていただきます。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

"POST /api/comment/ HTTP/1.1" 400
  • HTTPステータスコードの400はリクエストの内容に不備があることを示します。
  • 具体的に、何でエラーになっているかはHTTPレスポンスボディに書いてある場合があります。
  • まずは、Android側でレスポンスボディがどうなってるかログに書き出して見て、なぜエラーになってるのかお調べするのが良いと思います。
  • もしくはDjango側で pdb などのデバッグ機能などを利用して、なぜエラーになっているか調査してみるのも手だと思います。

投稿2018/07/21 13:09

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bakara1332

2018/07/22 15:41

ご回答ありがとうございます。 早速調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問