2016-11-01 1 views
1

Я работаю над подключением базы данных MySql к своему приложению Android и поискам в Интернете. Некоторые из решений работали с одной проблемой. Проблема заключается в том, что функция возвращает данные в форме, которая является строкой, а содержание струны:Android-соединение с MySql с использованием AsyncTask и возврат данных в виде 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); 


     } 
    }); 

Короче я хочу вернуть переменный результат или TResult из protected void onPostExecute(String result) в моих MainActivity и конвертировать это в Массив. Спасибо! ожидая мнения экспертов.

+0

«Я хочу, чтобы данные в виде какого-то массива, через который я могу получить все пользовательские данные, такие как электронная почта, полное имя. Я попытался реализовать функцию, но это не сработало ». .. Вы не можете сделать это с переднего конца (например, android/java). Таким образом, вам необходимо написать кодировку на стороне сервера – kgandroid

+0

из back end ie php возвращает ассоциативный массив: '$ result = $ sql-> fetchAll (PDO :: FETCH_ASSOC); echo json_encode ($ result); '. Я могу разделить детали в php, но в android, но это даст мне одну строку. –

ответ

0

Кажется, у вас есть две проблемы:

  1. Преобразование строки JSON в более удобном формате
  2. Вернувшиеся этот дружественный формат другой деятельности

1: Там нет встроенного в целях синтаксического анализа строк JSON на Java, но доступно множество доступных возможностей библиотеки - посмотрите на How to parse JSON in Java, где они обсуждаются.

на 2: В общих данных преобразуются в пучок и вернулся к вашей основной деятельности в рамках намерение системы

+0

Хорошо, у меня есть первый. Можете ли вы объяснить или дать некоторое представление о проблеме номер 2? –

+0

и BackgroundWorker.java - это не активность, а просто класс. –

Смежные вопросы