【发布时间】:2016-08-13 08:30:30
【问题描述】:
我正在创建一个应用程序,该应用程序向 Web 服务发出 HTTP 请求并接收 XML 格式的信息。
我有一个 EditExt,我在其中插入名称并使用提交按钮提交请求..
public class MainActivity extends AppCompatActivity {
//Variabili layout
TextView result_text;
EditText person_name;
Button conf;
//url site
String url="";
ProgressDialog progress=null;
ConnectivityManager connMgr;
NetworkInfo networkInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
conf=(Button)findViewById(R.id.button_conf);
person_name=(EditText)findViewById(R.id.editText);
result=(TextView)findViewById(R.id.textView_risultato);
connMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo= connMgr.getActiveNetworkInfo();
//Al click del bottne controllo che la editext non sia vuota e che ci sia connessione...
conf.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
url="";
url="http://remote.tesisrl.net/AlboUnicoServices/OttieniSoggetti?v=";
if (person_name.getText().toString().equals("")){
person_name.setError("Insert name");
//Se cè connessione lancio l'asyncktask
} else if (isNetworkAvailable()){
url=url+person_name.getText().toString();
new DownloadUrlTask().execute(url); // mando la richiesta al sito
}
else if (!isNetworkAvailable()){
//Mostro errore tramite toast
Toast.makeText(MainActivity.this,"Connessione Internet Assente",Toast.LENGTH_LONG).show();
}
}
});
}
private boolean isNetworkAvailable() {
//CONTROLLO CONNESSIONE INTERNET
ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
//AsyncTask
private class DownloadUrlTask extends AsyncTask<String, Void,String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
// aggiornamento UI
progress = ProgressDialog.show(MainActivity.this, "Richiesta",
"Attendere...", true);
}
@Override
protected String doInBackground(String... urls) {
//Il parametro proviene dalla chiamata execute(); params [0] e la url.
try{
return downloadPage(urls[0]); //lancio il metodo per la connessione
}catch (IOException e){
return "URL non valida";
}
}
// onPostExecute mostra il sirultato dell'AsyncTask
@Override
protected void onPostExecute(String result) {
// aggiornamento UI
progress.dismiss();
Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();
restul_text.setText(result);
// Here i wont to parsing xml and insert the result in a listview
}
}
// metodo per la richiesta al webservice
private String downloadPage(String url1) throws IOException {
InputStream is=null;
String DEBUG_TAG="Debug_prova";
try {
URL url= new URL(url1);
HttpURLConnection conn =(HttpURLConnection)url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
//Instaurare connessione
conn.connect();
int response= conn.getResponseCode();
Log.d(DEBUG_TAG,"statuscode"+response);
String content= null;
is = conn.getInputStream();
if (response==200){
//Convertire l'InputStream in stringa
content= convertInputStreamToString(is);
}
return content;
// Assicurarsi che l'InputStream sia chiuso
}finally {
if (is!=null){
is.close();
}
}
}
//Convertire la richiesta in una stringa
private String convertInputStreamToString(InputStream is){
ByteArrayOutputStream baos= new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int read;
try {
while ((read = is.read(buffer)) != -1){
baos.write(buffer, 0 , read);
}
}catch (IOException e){
e.printStackTrace();
}
return new String(baos.toByteArray());
}
在 asyncktask 的“OnPostExecute”方法中,我想做 xml 解析结果并将其添加到列表视图中...
xml 结果的格式如下:
<ArrayOfSoggetto xmlns="http://schemas.datacontract.org/2004/07/AlboUnicoWcf" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Soggetto>
<CodiceFiscale>PRTBLD48D25B007W</CodiceFiscale>
<Cognome>PIEROTTI</Cognome>
<Eliminato>false</Eliminato>
<Esterno>true</Esterno>
<IDSoggetto>6563</IDSoggetto>
<Nome>UBALDO</Nome>
<NomeCompleto>PIEROTTI UBALDO</NomeCompleto>
<TipoSoggetto>108</TipoSoggetto>
<TipoSoggettoEtichetta>Professionista</TipoSoggettoEtichetta>
</Soggetto>
</ArrayOfSoggetto>
有人知道如何解析文件/xml结果并将其放入列表视图中吗?
对不起我的英语 =)
【问题讨论】:
-
这在 android 文档中有明确记录:developer.android.com/training/basics/network-ops/xml.html
标签: java android listview android-studio xml-parsing