私はここに多くの類似の質問があることを知っていますが、いずれのケースでも解決策が見つかりませんでした。私はAndroidプログラミングに非常に新しく、PHPを介してSQLからSQLにデータを取得する必要があります。さて、私はチュートリアルやコードを試していても、エラーが出ています。これは私が試した最も簡単な方法です。PHPで単一のJSONオブジェクトを取得するだけです(これはうまく動作し、ブラウザに表示されます)。これをアプリケーションのTextViewに配置します。しかし、それはクラッシュし続け、私は正確に何を変更する必要があるのかわかりません。AndroidスタジオでJSONオブジェクトを取得して表示する
これは、PHPコード( "meinprofil.php")である:
<meta charset="utf-8">
<?php
include("../config/config.php");
$mail = '[email protected]';
$abfrage = mysql_query("SELECT * FROM user WHERE user_mail LIKE '".$mail."'") or die(mysql_error());
$user = mysql_fetch_array($abfrage);
$profil = array('id' => $user['id_user'], 'name' => $user['user_name'], 'mail' => $user['user_mail'], 'tel' => ['user_tel']);
echo json_encode($profil);
$json = $profil;
return $json; ?>
これはProfilAnsicht.javaクラスです:
package com.example.android.festivalapp;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
//Main Klasse
public class Profil extends StartseiteNachLogin {
ImageView iVProfilbild;
EditText eTUserAlter;
Button bProfilAendern;
TextView tvUsername1;
//Layoutverknüpfung
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profil);
iVProfilbild = (ImageView) findViewById(R.id.iVProfilbild);
tvUsername1 = (TextView) findViewById(R.id.tvUsername);
eTUserAlter = (EditText) findViewById(R.id.eTUserAlter);
bProfilAendern = (Button) findViewById(R.id.bProfilAendern);
new JSONTask().execute("http://pou-pou.de/stagedriver/android/meinprofil.php");
}
public class JSONTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = parentObject.getJSONArray("profil");
JSONObject finalObject = parentArray.getJSONObject(0);
String user_name = finalObject.getString("name");
return user_name;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
TextView tvUsername;
tvUsername = (TextView) findViewById(R.id.tvUsername);
tvUsername.setText(result);
}
}
}
私はそれを実行すると、私は次のエラーを取得:
07-31 12:25:20.314 31348-31348/com.example.android.festivalapp W/System: ClassLoader referenced unknown path: /data/app/com.example.android.festivalapp-1/lib/arm64
07-31 12:25:20.488 31348-31348/com.example.android.festivalapp W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-31 12:25:20.572 31348-31413/com.example.android.festivalapp D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
07-31 12:25:20.596 31348-31413/com.example.android.festivalapp I/Adreno: QUALCOMM build : bf7710d, I0bc8e21cf2
Build Date : 03/09/16
OpenGL ES Shader Compiler Version: XE031.06.00.02
Local Branch :
Remote Branch : quic/LA.BF64.1.2.2_rb4.28
Remote Branch : NONE
Reconstruct Branch : NOTHING
07-31 12:25:20.599 31348-31413/com.example.android.festivalapp I/OpenGLRenderer: Initialized EGL, version 1.4
07-31 12:25:20.690 31348-31348/com.example.android.festivalapp I/Timeline: Timeline: Activity_idle id: [email protected] time:118876554
07-31 12:25:35.764 31348-31348/com.example.android.festivalapp I/Timeline: Timeline: Activity_idle id: [email protected] time:118891628
07-31 12:25:37.619 31348-31348/com.example.android.festivalapp W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
07-31 12:25:38.605 31348-31348/com.example.android.festivalapp I/Timeline: Timeline: Activity_launch_request id:com.example.android.festivalapp time:118894469
07-31 12:25:38.729 31348-31684/com.example.android.festivalapp I/DpmTcmClient: RegisterTcmMonitor from: com.android.okhttp.TcmIdleTimerMonitor
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: org.json.JSONException: **Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject**
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at org.json.JSON.typeMismatch(JSON.java:111)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at org.json.JSONObject.<init>(JSONObject.java:160)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at org.json.JSONObject.<init>(JSONObject.java:173)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at com.example.android.festivalapp.Profil$JSONTask.doInBackground(Profil.java:68)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at com.example.android.festivalapp.Profil$JSONTask.doInBackground(Profil.java:47)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
07-31 12:25:38.804 31348-31684/com.example.android.festivalapp W/System.err: at java.lang.Thread.run(Thread.java:818)
07-31 12:25:38.860 31348-31413/com.example.android.festivalapp D/OpenGLRenderer: endAllActiveAnimators on 0x5561e47040 (ListPopupWindow$DropDownListView) with handle 0x5561e8f2d0
07-31 12:25:38.865 31348-31348/com.example.android.festivalapp I/Timeline: Timeline: Activity_idle id: [email protected] time:118894728
07-31 12:29:07.316 31348-31348/com.example.android.festivalapp I/Timeline: Timeline: Activity_idle id: [email protected] time:119103180
誰かを助けることができたら本当にありがたいです。私はここで多くの質問とチュートリアルを読んできましたが、PHPとJSONをJavaに接続し、JSON Object/Arrayを表示する基本的な方法についてはまだ理解していません。もし誰かが「レシピ」や私が従うべき基本的なステップを知っているなら、あなたが私と分かち合うなら、とても感謝しています!
ありがとうございます!
を、それは動作しますか? – Lino
残念ながら、私はそれが理にかなっていることを理解していますが、それでも動作していません。ログは次のように述べていSTH: org.json.JSONException:org.json.JSONTokener.syntaxErrorで の文字0で入力の終わり(JSONTokener.java:449)org.json.JSONTokener.nextValueで (JSONTokener.java: 97) at org.json.JSONObject。(JSONObject.java:156) at org.json.JSONObject。 (JSONObject.java:173) など。 –
あなたはandroid logcatで同じエラーが発生していますか? – Lino