2016-11-01 7 views
1

MySqlデータベースをAndroidアプリに接続してインターネットで検索しています。いくつかのソリューションは1つの問題を解決しました。問題は、関数が文字列である形式でデータを返し、文字列の内容であることである:AndroidがAsyncTaskを使用してMySqlに接続し、JSONまたはStringの形式でデータを返す

[{"id":1,"username":"admin","password":"root","email":"[email protected]","fullname":"Site Admin"}] 

しかし、私は私のようなすべてのユーザーデータを取得することができ、それを通して、アレイのいくつかの並べ替えの形式のデータが欲しいです電子メール、フルネーム私は関数を実装しようとしましたが、うまくいきませんでした。

BackgroundWorker.java

public class BackgroundWorker extends AsyncTask<String,Void,String> { 
Context context; 
AlertDialog alertDialog; 
String tresult; 


BackgroundWorker (Context ctx){ 
    context = ctx; 
} 
@Override 
protected String doInBackground(String... params) { 
    String type = params[0]; 
    String username = params[1]; 
    String password = params[2]; 

    String login_url = "http://192.168.1.18/myproj/api/query1.php"; 
    if (type.equals("login")){ 
     try { 
      URL url = new URL(login_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8")); 
      String post_data = URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(username,"UTF-8")+"&"+ 
        URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8"); 
      bufferedWriter.write(post_data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 

      outputStream.close(); 

      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
      String line=""; 
      String result=""; 

      while((line = bufferedReader.readLine())!= null){ 
       result+=line; 
      } 

      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 

      return result; 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return null; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    alertDialog = new AlertDialog.Builder(context).create(); 
    alertDialog.setTitle("Login Status"); 
} 

@Override 
protected void onPostExecute(String result) { 
    alertDialog.setMessage(result); 
    alertDialog.show(); 
    tresult = result; 
    //return tresult; 
} 

@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 


} 

のBackgroundWorkerは、バックグラウンドで動作し、データベースとの接続クラスで次のコードです。そしてMainActivityで、次のように呼ばれて:機能の

MainActivity

public void onLogin(View view, String user, String pass){ 
    String type = "login"; 
    BackgroundWorker backgroundWorker = new BackgroundWorker(this); 
    backgroundWorker.execute(type,user,pass); 
} 

呼び出し:要するに

 loginbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String username = user_edittext.getText().toString(); 
      String password = pass_edittext.getText().toString(); 
      onLogin(v,username,password); 


     } 
    }); 

私は私のMainActivityprotected void onPostExecute(String result)から変数結果やtresultを返すと、変換したいですそれをArrayに変換します。ありがとうございました!専門家の意見を待っています。 1の上に別のアクティビティ

に、このフレンドリーなフォーマットを返すよりフレンドリーなフォーマット

  • にJSON文字列を変換する

    1. : は何も組み込まれてありません

  • +0

    「私は私がすべてを得ることができ、それを通して、アレイのいくつかの並べ替えの形式でデータが欲しいのバンドルに変換し、意図システムの一部として、あなたのメインの活動に返されます私は関数を実装しようとしましたが、うまくいきませんでした。 ""フロントエンド(つまり、アンドロイド/ java)からすることはできません。そのようにしてサーバサイドコーディングを書く必要があります – kgandroid

    +0

    バックエンド、すなわちphpから連想配列を返します: '$ result = $ sql-> fetchAll(PDO :: FETCH_ASSOC); echo json_encode($ result); '。私はPHPで詳細を分離することができますが、アンドロイドで、それはまだ1つの文字列で私を与えるだろう。 –

    答えて

    0

    は、あなたが二つの問題を持っているようですJSON文字列をJavaでパースする方法ですが、多数の簡単なライブラリオプションが用意されています。How to parse JSON in Javaを参照してください。 2上の

    :一般データに は

    +0

    さて、私は最初のものを手に入れました。問題番号2について説明したり、コードのアイデアを伝えたりできますか? –

    +0

    とBackgroundWorker.javaはアクティビティではなく、単なるクラスです。 –

    関連する問題