Я довольно новичок в программировании на Android и PHP, и в настоящее время у меня возникает проблема с печатью моего эхо-отчета с моей php-страницы, что так же просто, как:
<?php echo "Hey there response!"; ?>
То, что я сейчас использую в моей MainActivity:
setContentView(R.layout.activity_main); TextView txtView = (TextView) findViewById(R.id.txt); //ASYNC WAY new GetData(txtView).execute("");
Где AsyncTask определяется:
private class GetData extends AsyncTask<String, Void, String>{ private TextView display; GetData(TextView view){ this.display = view; display = (TextView) findViewById(R.id.txt); } protected String doInBackground(String... message){ HttpClient httpclient; HttpGet request; HttpResponse response = null; String result = "error0"; try{ httpclient = new DefaultHttpClient(); request = new HttpGet("http://localhost/php/wamp.php"); response = httpclient.execute(request); } catch (Exception e){ result = "error1"; } try{ BufferedReader rd = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); String line=""; while((line = rd.readLine()) != null){ result = result + line; } } catch(Exception e){ result = "error2"; } return result; } protected void onPostExecute(String result){ this.display.setText(result); } }
Сообщение в txtView становится error2, и я понятия не имею, почему.
EDIT Я изначально использовал метод чтения non-AsyncTask во входном потоке, но у меня есть переход на AsyncTask из-за ошибки в сети. Проблема все еще сохраняется, так как я не получаю эхо-копию в моем приложении.
Возможно, это слишком поздно для yanki, но для любого другого, кто попадает на эту страницу.
Я попробовал это с кодом yanki и получил ту же ошибку, что и его «ошибка 2». Тогда я заметил, что я не обновил файл манифеста, чтобы разрешать разрешения для Интернета.
<uses-permission android:name="android.permission.INTERNET" />
Я побежал за ним, и он работал отлично. Таким образом, используя код yanki и вводя разрешения в интернет-файл манифеста, программа должна работать.
Попробуйте это, проблема в том, что вы читаете его как байт, вы не переводили его обратно на char
private String readStream(String url) { try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(Url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); String result = ""; // convert response to string new BufferedReader(new InputStreamReader(is, "UTF-8"), 8); StringBuilder sb = new StringBuilder(); InputStreamReader r = new InputStreamReader(is, "UTF-8"); int intch; while ((intch = r.read()) != -1) { char ch = (char) intch; // Log.i("app", Character.toString(ch)); String s = new String(Character.toString(ch).getBytes(), "UTF-8"); sb.append(s); } is.close(); result = sb.toString(); } catch (Exception e) { Log.e(TAG, "Error converting result " + e.toString()); } }
Почему бы вам не использовать JSON или XML для отправки любого значения, которое вы хотите отобразить в приложении для Android. Попробуйте эти попробовать.