Я работаю над подключением базы данных 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
и конвертировать это в Массив. Спасибо! ожидая мнения экспертов.
«Я хочу, чтобы данные в виде какого-то массива, через который я могу получить все пользовательские данные, такие как электронная почта, полное имя. Я попытался реализовать функцию, но это не сработало ». .. Вы не можете сделать это с переднего конца (например, android/java). Таким образом, вам необходимо написать кодировку на стороне сервера – kgandroid
из back end ie php возвращает ассоциативный массив: '$ result = $ sql-> fetchAll (PDO :: FETCH_ASSOC); echo json_encode ($ result); '. Я могу разделить детали в php, но в android, но это даст мне одну строку. –