Witam,
Chciałbym pobrać zawartość strony i wydobyć z niej jedną wartość. Pogrzebałem nieco w necie i znalazłem kilka przykładów jak się do tego zabrać. Niestety po mimo iż przykładów jest sporo, żaden z nich nie chce zadziałać i przestaje działać na tym samym etapie. Dodam tylko iż korzystam z Android Studio 1.4. Poniżej zamieszczam jeden z przykładowych programów:
package com.aszejda.goldcalc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class GoldCalculator extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gold_calculator);
Button next = (Button) findViewById(R.id.button1);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
String x = pobierz("http://www.google.pl");
Toast.makeText(getApplicationContext(), x, Toast.LENGTH_LONG).show();
} catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();
}
}
});
}
public static String pobierz(String link) throws MalformedURLException, IOException {
String source = "";
URL akt = new URL(link);
BufferedReader in = new BufferedReader(new InputStreamReader(akt.openStream(), "utf-8")); // <--- tu program postanawia przerwać swoją dalszą pracę w metodzie i przeskakuje do etapu catch (IOException e)
String linia;
while ((linia = in.readLine()) != null) {
source += linia + "\n";
}
in.close();
return source;
}
}
Podobny kod który nie działa pod androidem, odpalany w NetBeans jako zwykła aplikacja java zadziałał bez problemu:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Main extends JFrame {
JButton go = new JButton("Get Source");
JTextArea codeArea = new JTextArea();
public Main() {
JPanel inputPanel = new JPanel(new BorderLayout(3, 3));
go.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
URL pageURL = new URL("http://www.google.com");
HttpURLConnection urlConnection = (HttpURLConnection) pageURL.openConnection();
int respCode = urlConnection.getResponseCode();
String response = urlConnection.getResponseMessage();
codeArea.setText("HTTP/1.x " + respCode + " " + response + "\n");
int count = 1;
while (true) {
String header = urlConnection.getHeaderField(count);
String key = urlConnection.getHeaderFieldKey(count);
if (header == null || key == null) {
break;
}
codeArea.append(urlConnection.getHeaderFieldKey(count) + ": " + header + "\n");
count++;
}
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
Reader r = new InputStreamReader(in);
int c;
while ((c = r.read()) != -1) {
codeArea.append(String.valueOf((char) c));
}
codeArea.setCaretPosition(1);
} catch (Exception ee) {
}
}
});
inputPanel.add(BorderLayout.EAST, go);
JScrollPane codeScroller = new JScrollPane(codeArea);
add(BorderLayout.NORTH, inputPanel);
add(BorderLayout.CENTER, codeScroller);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(700, 500);
this.setVisible(true);
}
public static void main(String[] args) {
JFrame webPageSourceViewer = new Main();
}
}