#android #json
#Android #json
Вопрос:
public class MainActivity extends AppCompatActivity {
public TextView textView;public Button clickMe;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clickMe = (Button)findViewById(R.id.clickMe);
clickMe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new JsonClass().execute("www.webbanknepal.com/app/services.php");
}});
}
class JsonClass extends AsyncTask<String,Void,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();
InputStreamReader isr= new InputStreamReader(stream);
reader =new BufferedReader(isr);
StringBuffer buffer=new StringBuffer();
String line="";
while((line=reader.readLine())!=null)
{
buffer.append(line);
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(connection!=null){ connection.disconnect();}
try {
if(reader!=null){ reader.close();};
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
textView= (TextView)findViewById(R.id.textView);
textView.setText(s.toString());
}
}
Это МОЙ ВОПРОС
я получаю приложение, к сожалению, близко, вот мой файл журнала cat ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ
Произошла ошибка при выполнении doInBackground() в.done(AsyncTask.java:300) в java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) в java.util.concurrent.Исключение FutureTask.setException(FutureTask.java:222) в java.util.concurrent.FutureTask.run(FutureTask.java:242) на android.os.AsyncTask$SerialExecutor$ 1.запустите(AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1112) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) на java.lang.Thread.run(Thread.java:841) Вызвано: java.lang.Исключение NullPointerException в com.example.shailendra.fulljson.MainActivity $ JsonClass.doInBackground(MainActivity.java:81) в com.example.shailendra.fulljson.MainActivity $ JsonClass.doInBackground(MainActivity.java: 47) в android.os.AsyncTask $ 2.вызов (AsyncTask.java:288) в java.util.concurrent.FutureTask.run(FutureTask.java:237) на android.os.AsyncTask$SerialExecutor$ 1.запустите(AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1112) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) на java.lang.Thread.run(Thread.java:841)
Комментарии:
1. Попробуйте вернуть значение null; чтобы вернуть «»;
2. нет, он выдает ошибку
3. попробуйте отладить код и убедитесь, что вы получаете успешный ответ от сервера, а «буфер» содержит данные
4. какая 81-я строка в MainActivity?
Ответ №1:
Я немного изменил ваш код, и он работает нормально. Проверьте код….
public class MainActivity extends AppCompatActivity { public TextView textView;public Button clickMe;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
clickMe= (Button)findViewById(R.id.clickMe);clickMe.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
new JsonClass().execute("http://www.webbanknepal.com/app/services.php");
}
});
}
class JsonClass extends AsyncTask<String, Void, 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();
InputStreamReader isr = new InputStreamReader(stream);
reader = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException 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 s) {
super.onPostExecute(s);
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(s.toString());
}
}
}
Комментарии:
1. хорошо, ваш код работает нормально, но можете ли вы сказать мне, где вы изменились и в чем причина изменения
2. if(reader!=null){ reader.close();}; reader.close(); вот в чем проблема
Ответ №2:
Вы передаете нулевую строку для onPostExecute (строки).
Сделайте это:
public class MainActivity extends AppCompatActivity
{
public TextView textView;
public Button clickMe;
public static String s;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
...
...
new JsonClass().execute("www.webbanknepal.com/app/services.php",null,s);
}});
}
class JsonClass extends AsyncTask<String,Void,String>
{ @Override
protected String doInBackground(String... params) {
...
...
String line="";
while((line=reader.readLine())!=null)
{
buffer.append(line);
}
s=buffer.toString();
return s;
Комментарии:
1. та же проблема java.lang.RuntimeException: произошла ошибка при выполнении doInBackground()