2016-07-31 6 views
0

私はここに多くの類似の質問があることを知っていますが、いずれのケースでも解決策が見つかりませんでした。私は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を表示する基本的な方法についてはまだ理解していません。もし誰かが「レシピ」や私が従うべき基本的なステップを知っているなら、あなたが私と分かち合うなら、とても感謝しています!

ありがとうございます!

答えて

0

私はあなたがそうでなければ、結果はJSON形式でエンコードされないため

$enc_value = json_encode($profil); 
return $enc_value; 

にPHPコードを変更する必要があることを疑います。

JSONObject parentObject = new JSONObject(finalJson); 
JSONArray parentArray = parentObject.getJSONArray("profil"); 
JSONObject finalObject = parentArray.getJSONObject(0); 

をのみ使用します:確かにJava側からあなたが削除することができstar_kid57 @

JSONObject finalObject = new JSONObject(finalJson); 
+0

を、それは動作しますか? – Lino

+0

残念ながら、私はそれが理にかなっていることを理解していますが、それでも動作していません。ログは次のように述べてい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) など。 –

+0

あなたはandroid logcatで同じエラーが発生していますか? – Lino

関連する問題